Identitätswechsel und Asynchronität in ASP.NET-WebAPI

8

Update 2

Diese Frage lautete ursprünglich: "Funktioniert der Identitätswechsel mit der Web-API?"
Und die Frage zu dieser Frage ist "Ja, tut es."

Aber das Problem war nicht die Web-API, sondern der Identitätswechsel selbst. (Die Beschreibung des Problems ist unten)

Aber jetzt möchte ich anderen von der Lösung erzählen.

Meine Controller sind asynchron und meine falsche Prämisse war, dass jeder Thread, der von einem imitierten Thread erzeugt wurde, die gleiche Identität wie sein Elternelement hat.
Standardmäßig ist es falsch: TPL führt keinen Identitätswechsel über Threads durch.

Der Identitätswechselfluss kann entweder aktiviert werden programmatisch oder in der Konfiguration .
Bitte beachten Sie, dass Änderungen an der Datei aspnet.config und nicht web.config Ihrer Anwendung vorgenommen werden sollten.

Als diesen Beitrag states aspnet.config-Datei kann pro Anwendungspool festgelegt werden.

Und diesen Beitrag den Link, den Andrew freundlicherweise zur Verfügung gestellt hat erzählt mehr über die ganze Quest.

Für diejenigen unter Ihnen, die den Identitätswechsel zum ersten Mal einschalten, möchte ich darauf hinweisen, dass IIS 7.5 über eine sehr nützliche Funktion verfügt, um Anmeldeinformationen eines imitierten Kontos einzugeben. Diese Zugangsdaten werden nicht in der Konfigurationsdatei benötigt und es ist klug, nur zu schreiben.

%Vor%

Nach Eingabe der Zugangsdaten werden diese automatisch zur Konfigurationsdatei hinzugefügt.

Ursprüngliche Frage:

Ich habe den Identitätswechsel aktiviert und Benutzeranmeldeinformationen bereitgestellt.

%Vor%

Aber wenn ich über Entity Framework eine Verbindung zum sql Server herstelle, erhalte ich den Fehler "Login failed for user {MachineName} $". Das ist EF läuft unter IUSR-Konto. In der Zwischenzeit gibt WindowsIdentity.GetCurrent() die Identität von 'foo' user zurück.

Impersonierter Account verfügt über alle erforderlichen Berechtigungen für SQL-Server, auf denen die Windows-Authentifizierung aktiviert ist.

Außerdem, wenn ich den Identitätswechsel deaktiviere und den Anwendungspool so konfiguriere, dass er mit den Zugangsdaten dieser Identität läuft, funktioniert alles.

Ich kann nicht verstehen, warum es nicht funktioniert, wenn der Identitätswechsel aktiviert ist, aber AppPool unter dem Standardkonto ausgeführt wird.

Update 1

EF Verbindungszeichenfolge ist

%Vor%

Ich hoste Anwendung auf Win2008 Srv, IIS 7.5

    
Pavel Voronin 13.08.2013, 12:10
quelle

1 Antwort

4

Wie diese Antwort erklärt; Der Identitätswechsel in der Datei "web.config" überschreibt die Identität im Anwendungspool.

Meiner Meinung nach gibt es eine gute Erklärung hier , welche zu verwenden: Identitätswechsel oder Anwendungspool

    
Andrew Flierman 13.08.2013, 19:32
quelle