Frage

Ich arbeite an einer ASP.NET-Seite, die wir, den anfordernden Benutzer in Code ausgeben. Wir sind mit dem folgenden Code Identitätswechsel zu starten.

Dim impersonationContext As System.Security.Principal.WindowsImpersonationContext
Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
currentWindowsIdentity = CType(User.Identity, System.Security.Principal.WindowsIdentity)
impersonationContext = currentWindowsIdentity.Impersonate()

Danach haben wir bestätigt, dass die Anwendung unter dem richtigen Kontext ausgeführt wird durch den Aufruf:

System.Security.Principal.WindowsIdentity.GetCurrent().Name

Das gibt die richtige Identität des Benutzers und den Dateizugriff und andere Gegenstände erscheinen ihr Konto zu verwenden. Allerdings, wenn die Microsoft Application Data Application Block SqlHelper-Klasse in einer Datenbank rufen eine vertrauenswürdige Verbindung Authentifizierung fehl für die „NT AUTHORITY \ ANONYMOUS LOGON“ Benutzer.

Wir können nach dem Scheitern erneut bestätigen, dass die aktuelle Identität noch unser gewünschtes Konto und nicht das ANONYMOUS LOGIN Konto.

Hat jemand eine Idee, warum das so ist? Oder genauer gesagt, wie wir es umgehen?

Bearbeiten Einige zusätzliche Informationen darüber, wie die Anrufe von diesen Seiten arbeiten.

Wir machen den impersonate Anruf von der ASPX-Seite.

Nachdem wir imitieren wir rufen zu einem „Business-Logik“ Assembly, die referecned wird.

Wir wissen, dass der Kontext Identität noch hier korrekt ist.

Danach wird die „Business Logik“ Versammlung ruft eine andere Anordnung, die die größte Verbindung Anruf tatsächlich ausführt. Wir können diesen „Datenzugriff“ Assembly nicht ändern, die Authentifizierung Ausnahme von dieser Versammlung auch berichtet wird.

War es hilfreich?

Lösung

Ich denke, @ John Sonmez richtig ist, Sie zum Doppel Hop Problem zu schlagen. Identitätswechsel ist nur die Hälfte der Geschichte, müssen Sie auch auf Delegations aussehen (vorausgesetzt, Ihr Netzwerk mit Kerberos-Authentifizierung). Die Artikel waren unter den nützlichsten in mir durch das gleiche Problem zu helfen

Identitätswechsel und Delegierung

ASP.NET Delegation

Andere Tipps

Ich weiß, dass ich den Identitätswechsel in ASP.NET, bevor sie verwendet haben (C # und den Zugriff auf das Dateisystem) und ich frage mich, ob Sie hatte versucht, die Logik Einwickeln, die enthält currentWindowsIdentity.Impersonate () mit a ‚Verwenden / Ende mit‘ (explizit den Sicherheitskontext für einen Code-Block zu definieren).

Also, es würde wie folgt aussehen:

Using impersonationContext = currentWindowsIdentity.Impersonate() 
' Logic here 
End Using
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top