Miesięczne archiwum: Maj 2017

Delegacja w AD i IIS

Dziś zamierzam opisać proces delegacji pomiędzy witrynami na różnych serwerach w kontekście jednej domeny.

Po co? Generalnie wymyśliłem sobie przypadek w którym mam aplikację numer 1 i aplikację numer 2. Authentication w obu aplikacjach jest ustawione na „Windows Authentication”. W app1 wyświetlam aktualnego użytkownika używając:

@User.Identity.Name w widoku MVC.

App2 będzie zwracać poprzez web api również aktualnego użytkownika. Całą sytuację możemy zasymulować poprzez kod zaprezentowany poniżej. Zwykły kontroler:

oraz kontroler web api:

Instalując aplikację na IIS wykonując akcje Index i Go dostaniemy 2 różne wyniki.
Index zwróci mi aktualnie zalogowanego użytkownika – czyli „Artur”, a Go zwróci użytkownika który jest ustawiony na puli aplikacji.

http://webserver/Home/Go/webserver -> IISPoolUser
http://webserver/home/index -> Artur

W takim razie jak to zrobić, żeby mimo wszystko http://webserver/Home/Go/webserver zwracał użytkownika Artur?

Po pierwsze do web.config należy dodać wpis:

W Active Directory należy ustawić delegację dla użytkownika który jest ustawiony na puli naszej aplikacji.
Delegację można dodać dopiero wtedy kiedy na naszym użytkowniku jest ustawiony SPN.
SPN ustawiamy w ten sposób:

Aby ustawić delegację w ADUC (Active Directory Users and Computers) wybieramy użytkownika technicznego użytkownik_puli i przechodzimy do zakładki delegacji, która powinna się pojawić po ustawieniu SPN’ów. Wybieramy „Trust this user for delegation to specified services only” – i dodajemy nową usługę – wybieramy komputer/maszynę na którym jest zainstalowany nasz IIS i wybieramy usługę HTTP. Zapisujemy zmiany i to już koniec.

Po tych operacjach http://webserver/Home/Go/webserver i http://webserver/home/index zwracają tego samego użytkownika.

Na 2 hop’y, przekazywanie uprawnień działa bez SPN’a, powyżej 2 „mykiem” jest właśnie SPN żeby zadziałało