2013-08-13 27 views
8

Aktualizacja 2personifikacji i asynchrony w ASP.NET WebAPI

To pytanie pierwotnie była "działa personifikacji z Web API?"
A pytanie na to pytanie brzmi "tak, to prawda".

Ale problem nie dotyczył interfejsu Web API, ale personifikacji. (Opis problemu znajduje się poniżej)

Ale teraz chciałbym powiedzieć innym o rozwiązaniu.

Moje kontrolery są asynchroniczne i moim błędnym założeniem było to, że każdy wątek zrodzony przez podszywany wątek ma tę samą tożsamość, co jego rodzic.
Domyślnie jest to fałsz: TPL nie przepływa podszywanie się pod nici.

Przepust personifikacji można włączyć albo programmatically or in configuration.
Pamiętaj, że zmiany należy wprowadzić w pliku pliku aspnet.config, a nie w pliku web.config.

Jako this post można ustawić plik aspnet.config dla każdej puli aplikacji.

I this post link do którego uprzejmie pod warunkiem Andrew mówi o całej misji w więcej szczegółów.

Tym, którzy po raz pierwszy włączą personifikację, chciałbym zauważyć, że IIS 7.5 ma bardzo przyjemną funkcję wprowadzania danych personifikowanego konta. Te poświadczenia nie są potrzebne w pliku konfiguracyjnym, a pisanie jest sensowne.

Po wprowadzeniu poświadczeń zostaną one automatycznie dodane do pliku konfiguracyjnego.

enter image description here enter image description here

pytanie oryginalny:

Odwróciłem personifikacji na i pod warunkiem poświadczenia użytkownika.

<identity impersonate="true" usernName="foo" password="bar"/> 

Ale kiedy połączyć się z serwerem sql poprzez Entity Framework pojawia się błąd „Logowanie nie powiodło się dla użytkownika {} $ nazwa_komputera”. To jest EF działający pod kontem IUSR. Tymczasem WindowsIdentity.GetCurrent() zwraca tożsamość użytkownika "foo".

Poddane personifikacji konto ma wszystkie wymagane uprawnienia na serwerze SQL, na którym włączono uwierzytelnianie systemu Windows.

Co więcej, jeśli wyłączę podszywanie się i po prostu ustawię pulę aplikacji, aby działała z poświadczeniami tej tożsamości, wszystko działa poprawnie.

Nie mogę zrozumieć, dlaczego nie działa, gdy podszywanie się jest włączone, ale AppPool działa na domyślnym koncie.

Aktualizacja 1

EF ciąg połączenia jest

<add name="PtKbEntities" connectionString="metadata=...;provider=System.Data.SqlClient;provider connection string=&quot;data source=...;initial catalog=...;Trusted_Connection=Yes;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

ja obsługiwać aplikację na Win2008 SRV, IIS 7.5

+0

jak twoja sql ConnectionString wyglądać? –

+0

@AndrewFlierman Dodałem go do pytania –

Odpowiedz

4

Ponieważ answer wyjaśnione; podszywanie się w web.config zastępuje tożsamość w puli aplikacji.

Moim zdaniem nie jest dobrym wytłumaczeniem here który z nich korzystać: personifikacja lub aplikacja basen

+0

Ma on na celu zastąpić, ale nie w moim przypadku. Cóż, wygląda na to, że znalazłem powód, ale sprawdzę tylko jutro. Moje kontrolery API są asynchroniczne i mam dostęp do EF w osobnym wątku bez włączonego przepływu personifikacji. Ale dziwne jest to, że ten błąd pokazuje konto IUSR, a nie DefaultAppPool. –

+0

ah ok, async. Może ten post jest przydatny: http://blog.codeishard.net/2012/09/17/await-async-mvc-and-impersonation/ i ten: http://blog.codeishard.net/2013/06/ 25/1301 / –

Powiązane problemy