Podszywanie się pod użytkownika domeny za pomocą zintegrowanego rurociągu

To pytanie wciąż mnie prześladuje...

W lokalnym środowisku intranetowym, czy jesteśmy skazani na używanie "klasycznego" trybu pipeline w naszej puli aplikacji, jeśli chcemy używać podszywania się pod użytkowników domeny Windows, czy też istnieje nowy sposób deklaratywnie "uruchamiać jako" nich (że tak powiem)?

Moim celem jest użycie uwierzytelniania Windows dla lokalnych aplikacji internetowych w moim Intranecie, aby użytkownicy mogli uwierzytelniać i uruchamiać aplikacje na swoim koncie active directory (zasada). Every time I try this (Przy użyciu tożsamości NetworkService oczywiście), dostaję ten błąd:

Tutaj wpisz opis obrazka

Dzięki! ;)

Author: Chiramisu, 2012-10-19

2 answers

Napisałem małą aplikację, która wyświetla nazwę użytkownika sieciowego bieżącego użytkownika z kilku różnych miejsc, np. Page.User.Identity.Name. Złapałem również informacje o użytkowniku domeny za pomocą kilku różnych metod zapytań ActiveDirectory. Wszystko po to, aby potwierdzić następujące informacje.

Znalazłem dwa podstawowe tryby uruchamiania aplikacji przy użyciu uwierzytelniania Windows, który jest używany głównie w środowisku intranetowym, zgodnie z moimi badaniami. Oto Minimalne istotne elementy konfiguracje:

Tryb Klasyczny

  • Apppool - Managed Pipeline ustawiony na tryb klasyczny.
  • AppPool-Identity set to Network Service.
  • Uwierzytelnianie-Wyłączone: Uwierzytelnianie Anonimowe
  • Authentication-Enabled: ASP.NET Podszywanie się
  • Authentication-Enabled: Windows Authentication
  • Providers-Disabled: Kerberos
  • Ustawienia Zaawansowane-Tryb Jądra: Albo

Zintegrowany Mode

  • Apppool - Managed Pipeline ustawiony na tryb zintegrowany.
  • AppPool-Identity set to Network Service.
  • Uwierzytelnianie-Wyłączone: Uwierzytelnianie Anonimowe
  • uwierzytelnianie-wyłączone: ASP.NET Podszywanie się
  • Authentication-Enabled: Windows Authentication
  • Providers-Enabled: Kerberos
  • Ustawienia Zaawansowane-Tryb Jądra: Wyłączony

A teraz Kopacz!!

Jeśli chcesz użyć Tryb zintegrowany (który jest idealny, ponieważ daje znacznie więcej funkcjonalności i dobrze, integracja) trzeba będzie mieć włączone delegowanie. Poniżej znajduje się kilka artykułów, które należy przeczytać, aby zrozumieć podstawy delegacji , a także dynamicznej rejestracji SPN. Ponieważ wchodzi to w Więcej kwestii związanych z Kerberos i bezpieczeństwem, w które prawdopodobnie chcesz się zagłębić, łatwiej będzie trzymać się trybu klasycznego, w którym wystarczy włączyć Podszywanie się i zakończyć grę; albo oszukać i wyłączyć validateIntegratedModeConfiguration. : P

Mam nadzieję, że to komuś pomoże na interwebz. Zdrowie! :)
 25
Author: Chiramisu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-29 17:23:52

Nie, ale "zintegrowany" rurociąg wymaga ręcznego podszywania się pod użytkownika uwierzytelnionego w systemie Windows. Przynajmniej w IIS8. 5, czyli.

Dlaczego? Klasyczne podszywanie się łamie funkcje asynchroniczne.NET . W szczególności, trudno jest zarządzać WindowsIdentity wątku, gdy jest on używany przez wielu użytkowników w tym samym czasie. Jak? Użyj WindowsImpersonationContext np.
// Start with identity assigned by IIS Application Pool
var current = System.Security.Principal.WindowsIdentity.GetCurrent();

// Enable Windows Authentication in ASP.NET *and* IIS, which ensures 
// User.Identity is a WindowsIdentity
WindowsIdentity clientId = (WindowsIdentity)User.Identity;

// When 'using' block ends, the thread reverts back to previous Windows identity,
// because under the hood WindowsImpersonationContext.Undo() is called by Dispose()
using (WindowsImpersonationContext wic = clientId.Impersonate())
{
    // WindowsIdentity will have changed to match clientId
    current = System.Security.Principal.WindowsIdentity.GetCurrent();
}
// Back to the original identity
current = System.Security.Principal.WindowsIdentity.GetCurrent();
Problemy? czasami trzeba użyć delegacji zamiast podszywanie się.
 11
Author: Donal Lafferty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:39