czwartek, 1 kwietnia 2010

Impersonalizacja

Na sharepoint 2010 działa sobie mój customy sharepointowy web part. Ten web part pobiera jak i zapisuje niektóre atrybuty current usera do AD jak i do baz SQLowych. O ile z bazami zawsze sobie można poradzić bez impersonalizacji o tyle w przypadku Active Directory zaczęły się schody. Przykładowo normalnie schema AD pozwala na zapis niektórych atrybutów ownerowi DirectoryEntry np. mobile (sporo na temat praw dostępu do atrybutów AD). Dlatego impersonalizacja w takich przypadkach jest wskazana. Dodam jeszcze że u mnie aplikacja webowa(sharepoint-80) pracowała na application pool która używała normalnego dedykowanego użytkownika domenowego. Aby jednak to zadziałało trzeba przejść kilka kroków:
1. impersonate na true w web.config
2. włączony zaufany serwer i delegowanie przez Kerberos w AD "Users & Computers" dla serwera IIS na którym jest postawiona aplikacja ASP (reset serwera IIS wymagany)
3. Ustawienie "Negotiate" na protokole autentyfikacji aplikacji webowej w IIS
(polecam reset IIS)
4. setspn -S http://serwer/aplikacja DOMAIN_NAME\User_name na którym pracuje app pool (nie działa od razu)
Ostatni punkt jest kluczowy i ja go rozumiem w ten sposób ze użytkownik na którym pracuje app pool naszej aplikacji ASP może przyjąć ticket z Kerberosa.

Czasami też możemy chcieć wyłączyć impersonalizacje w trakcie działania programu i wrócić do użytkownika app pool - możemy to zrobić za pomocą:

using System.Web.Hosting;
...
using (HostingEnvironment.Impersonate())
{
..
}
Ogólnie polecam samemu eksperymentować bo gra jest warta świeczki jeśli nie musimy niepotrzebnie zwiększać uprawnień.
Strony które mnie pomogły:
Spencer Harbar
Directory Programming