Frage

Ich habe eine ziemlich komplexe Web-Anwendung, die (von einem Auftragnehmer) gebaut wurde, integrierte Authentifizierung verwendet wird. Im Rahmen des Authentifizierungsprozesses wird eine GetNetworkID() Funktion verwendet, die wie folgt aussieht:

private string GetNetworkID()
{
    return HttpContext.Current.User.Identity.Name.Split(new char[] { '\\' })[1];
}

Als ich das auf meiner Entwicklung Feld laufen, der HttpContext.Current.User.Identity.Name Wert ist myNetwork \\ myuserid , so dass die oben funciton kehrt meinen Benutzer-ID, wie beabsichtigt, und der authenticaiton Prozess funktioniert gut.

Aber wenn ich diese auf meinem Web-Server laufen, bekomme ich eine Index außerhalb der Grenzen des Arrays war Fehler durch die return-Anweisung in der GetNetworkID() Funktion geworfen.

Ich bin ein wenig verloren, wie dies zu beheben und wie, um herauszufinden, ob es sich um eine IIS-Konfigurationsproblem ist (mein Webserver ist ein Windows Server 2008-Box mit IIS 7), oder etwas anderes.

Wenn ich hart Code meines Benutzer-ID als Rückgabewert für die GetNetworkID() Funktion, sich auf dem Web-Server funktioniert, aber ich habe keine großen Ideen, wie auf dem Web-Server debuggen, um zu bestimmen, was die HttpContext.Current.User.Identity.Name Rückkehr Wert wird, dass verursacht den Array Indexfehler.

Irgendwelche Vorschläge?

War es hilfreich?

Lösung

IIS läuft als IIS-Dienstkonto, so Current.User.Identity ist wahrscheinlich der Name des IIS-Konto gehen.

Die Vollständigkeit halber sollten Sie überprüfen, für ‚\‘ entweder mit einem Find () oder durch Spaltung Aufruf, und die Länge des resultierenden Array zu überprüfen. Wenn die Länge 1 ist, das bedeutet, dass die ID nicht in der Form Domäne \ Benutzername ist.

Im Allgemeinen, wenn Sie debuggen möchten, können Sie einen beliebigen Wert auf den HTTP-Response-Stream schreiben wie folgt:

Response.Write(HttpContext.Current.User.Identity.Name)

Eine andere Methode ist eine ASP-Seite Variable einrichten, und stellen Sie die Seite Variable auf den Wert, den Sie überprüfen möchten. Sie können den Variablenwert angezeigt werden entweder durch ASP-Code oder durch Javascript.

Andere Tipps

Sie können eine IIS-Einstellung fehlen.

Versuchen Sie in IIS: Webseite (rechte Maustaste) | Eigenschaften | Verzeichnissicherheit (tab)

Klicken Sie auf "Bearbeiten ..."

Wählen Sie dann "Integrierte Windows-Authentifizierung"

Ich denke, der Benutzer, der in Ihre Web-applciation auf dem anderen Server anmeldet, keine gültige Login ist. Und daher wird ein Ergebnis nicht zurück auf User.Identity.Name.

Wie Sie schon sagten, es funktioniert, wenn Sie den Benutzernamen fest einprogrammiert. Das heißt, der Benutzer creditials des PC Sie sich einloggen verwenden, um nicht auf Ihrer Website nicht gestattet. Diese müssen daher zu den Anmeldeinformationen unterscheiden Sie hartzucodieren.

Am besten auf dem Webserver zu debuggen ist (es ist nicht schwer - alles, was Sie zurückkehren wollen die User.Identity.Name ist und Sie können den Benutzernamen erhalten und ableiten Logik von dort), und die Inhalte in Ihrem Web überprüfen CONFIG-Datei.

Wie Alan wies darauf hin, (und ich upvoted ihn dafür) Sie wahrscheinlich eine Überprüfung hinzugefügt werden sollen, welche Form der User.Identity.Name nehmen. Eine aktualisierte Routine zum Beispiel könnte wie folgt aussehen:

private string GetNetworkID()
{
    var name = HttpContext.Current.User.Identity.Name;
    return name.InStr("\\") > -1 ? name.Split("\\")[1] : name;
}

Damit wird den zweiten Teil der Login-Namen zurück, wenn ein \ vorhanden ist, und die vollständige Zeichenfolge, wenn nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top