AspGerman Wiki

Bearbeiten

Die Servervariable LOGON_USER sollte ermitteln, wer gerade die Seite abfragt. Allerdings ist die Variable für einige Benutzer leer. Wo liegt das Problem?

Es liegt im Wesen des WWW begründet, dass der überwiegende Teil der Kommunikation annonym abläuft. Der Besucher ist nicht bekannt und er muss sich auch nicht anmelden um Informationen abzurufen. In diesen Fällen ist dann die Servervariable nicht gefüllt.

Will/muss ich den Namen wissen (zum Beispiel in Intranet Umgebungen oder bei Bereichen, die nicht allgemein öffentlich sein sollen) dann muss ich den annonymen Zugriff abstellen und Authentifizierung des Benutzers fordern. Es gibt prinzipiell zwei Möglichkeiten dazu:
  1. je Seite einzeln
  2. gesamtes Verzeichnis

Bearbeiten

Per Seite authentifizieren

<%@ LANGUAGE="VBSCRIPT" %>
<%
' logon = Request("LOGON_USER")  Kurzform auch möglich zum schnellen Testen
logon = Request.Servervariables("LOGON_USER")
If logon = "" Then
 Response.Status = "401 Unauthorized"
 Response.End
Else
 username = Right(logon,len(logon)-InStr(logon, "\"))
End If
%>
<html><head><title>Hallo Welt</title></head>
<body>
Hallo <% = Right(logon,len(logon)-InStr(logon, "\")) %>, alte Haut wie gehts
</body>
</html>

Wird diese Seite aufgerufen und die Servervariable ist nicht gefüllt, dann schickt der Server den Statuscode 401 an den Browser zurück. Abhängig vom Browser und dessen Einstellungen wird dem Benutzer jetzt entweder ein Anmeldedialog gezeigt oder der Browser versucht erst nochmal automatisch die Benutzerdaten zu schicken, die er bereits kennt. Beim Internet Explorer im Intranet ist das z.B. der Anmeldenamen und das dazugehörige Kennwort. Sollte diese automatische Anmeldung nicht zum Ziel führen (Server schickt immer noch 401 Status) dann kommt auch hier der manuelle Anmeldedialog.

Wichtig in diesem Programmbeispiel ist übrigens der Abbruch der Seitenausgabe nach dem Senden des Status (response.end). Andernfalls wird zwar der Status 401 gesendet. Da aber eh Daten zurückkommen kann je nach Browser dieser Status auch ignoriert werden.

Bearbeiten

Auf Verzeichnisebene die Authentifizierung einschalten

Falls das Verzeichnis im IIS als eigene Applikation angelegt ist, kann man in der IIS Managementkonsole den annonymen Zugriff abstellen. Oder soll diese Einstellung für den gesamten Server gelten (was im Intranet durchaus Sinn macht) dann wird der annoyme Zugriff eben für den gesamten Server abgeschalten. Bei deutschen IIS findet sich diese Einstellung unter dem Karteireiter "Verzeichnissicherheit" - der Eintrag ist etwas unterschiedlich gestaltet bei den verschiedenen IIS Versionen.

Als quick und dirty fix ist es auch möglich im Datei-Explorer einfach dem IUSR_rechnername die Leserechte auf das Verzeichnis zu entziehen. Dann aber nicht vergessen, dass ja immer noch jemand darauf zugreifen können sollte. Also etwa die Gruppe "Domainusers". Oder ein eigens angelegtes Konto, dessen Namen und Kennwort an die Berechtigten weitergegeben wird (idealerweise sind solche Benutzer nur in der Gastgruppe).

ScrewTurn Wiki version 2.0.33. Some of the icons created by FamFamFam.