2009-07-31 5 views
6

Mam kilka stron internetowych do pracy, które żyją poza firmową siecią LAN - a zatem poza zasięgiem bezpośredniej komunikacji Active Directory (A/D) - ale dla których chciałbym móc uwierzytelniać użytkowników przeciwko firmowym serwerom A/D, a także wtórnemu repozytorium użytkowników/ról ***. Pseudo kod dla tego działania jest następujący:Jak uwierzytelnić się w usłudze Active Directory z kodu usługi sieci ASP.NET?

  1. Użytkownik wprowadza nazwę użytkownika/hasło w formularzu logowania zewnętrznej strony internetowej.
  2. Zewnętrzna strona internetowa wywołuje serwis internetowy w sieci LAN, który może rozmawiać z A/D.
  3. Usługa sprawdza, czy nazwa użytkownika/hasło może być uwierzytelnione, odwzorowane na użytkownika w A/D. Jeśli tak, zwróć listę ról układu A/D, których członkiem jest użytkownik.
  4. Jeśli nazwa użytkownika/hasło nie może zostać znaleziona/uwierzytelniona w A/D, sprawdź bazę danych/usługę, która jest wtórnym repozytorium informacji o użytkowniku/roli. Zwróć wszystkie role, których używa, jeśli uwierzytelniają się na wtórnym serwerze auth.
  5. Powoduje wyświetlenie listy ról użytkownika na wywołującej stronie internetowej.

*** Chodzi o to, że nie chcemy, aby umieścić dziesiątki - setki potencjalnie - wykonawców i stowarzyszone w usłudze Active Directory, kiedy wszyscy będą zalogowaniu tylko do naszych zewnętrznych serwerów internetowych. Stąd drugi system auth.

Odpowiedz

1

Myślę, że istnieje kilka warstw Tutaj każdy jego własne pytanie:

Jak mogę dostać się do serwisu WWW wewnątrz mojej sieci z DMZ?
To jest trudne, ponieważ naprawdę łamie koncepcję separacji DMZ/LAN. Zasadniczo połączenia między LAN i DMZ są dozwolone (i w ograniczonym zakresie) od strony sieci LAN - w ten sposób skompresowany DMZ nie może nawiązać kontaktu z siecią LAN i jest bardzo ograniczony w tym, co może zrobić (nie może wydać dowolne żądania, odpowiadają tylko na żądania z sieci LAN).

Jak mogę użyć usługi na innym komputerze do uwierzytelnienia nazwy użytkownika/hasła?
Ponownie jest to problem przyklejony - przekazujesz hasła przez sieć - czy można je przechwycić. Z AD jest to rozwiązane z Kerberos - systemem wyzwań/odpowiedzi, które zapewniają, że hasło nigdy nie jest faktycznie przesyłane. Oczywiście Kerberos i podobne protokoły są dość skomplikowane - nigdy nie powinieneś próbować toczyć własnego, ponieważ prawdopodobnie będzie to mniej bezpieczne niż użycie czegoś istniejącego - na przykład twoja usługa może działać na https, więc przynajmniej hasła są tylko zwykłym tekstem na dwa serwery, a nie łącze komunikacyjne między nimi. Certyfikaty mogą również służyć do zapobiegania przekierowaniu ruchu przeznaczonego dla usługi sieciowej LAN na komputer ze zmienną strefą DMZ (skompresowana maszyna DMZ nie będzie w stanie podrobić certyfikatu, więc system może ustalić, że jest on podłączony do fałszywego serwera przed wysyłanie danych do uwierzytelnienia)

Z mojego własnego doświadczenia wynika, że ​​problemy te powodują, że AD poza LAN nie jest po prostu wykonywana. Firmy decydują się na uzyskanie dostępu do sieci LAN za pomocą sieci VPN uwierzytelnianej za pomocą kluczy RSA (te małe breloki, które pokazują stale zmieniający się zestaw numerów) lub używają całkowicie oddzielnego zestawu loginów dla usług obszaru DMZ.

+0

Zewnętrzne serwery internetowe znajdują się w strefie DMZ i nie mogą uzyskać bezpośredniego dostępu do serwerów A/D. Istnieje jednak reguła zapory zezwalająca na ruch w porcie 80/443 z określonych adresów IP DMZ zewnętrznych serwerów sieciowych na określony port/adres IP wewnętrznego serwera aplikacji (asp.net). W przyszłości moglibyśmy całkowicie wyłączyć serwery poza domem, ale ten sam wyjątek firewall według portu i adresu IP nadal zezwalałby zewnętrznym serwerom WWW na wywoływanie wywołań usług internetowych na wewnętrznym serwerze aplikacji. –

1

Możesz chcieć rzucić okiem na @ dwa zasoby. Pierwszy dostarczy Ci wszystkiego, co chcesz wiedzieć o aktywnym katalogu, a drugi pokaże ci, jak się połączyć.

Możesz mieć problemy z połączeniem się z serwerem zdalnym AD choć. Tak więc, jako potencjalna praca, rozważyłbym, aby wywołanie aplikacji sieci Web było usługą sieciową uwierzytelniania, która znajduje się w sieci korporacyjnej.

+0

Myślę, że zamierzałeś oddzielić łącza: http://www.codeproject.com/KB/system/everythingInAD.aspx http://msdn.microsoft.com/en-us/library/aa302397.aspx –

+0

yeah , ale mam teraz tylko jedno ogniwo i oba są konieczne. Zauważyłem, że oba są niezwykle użyteczne przy realizacji podobnego problemu, jaki miałem. – andrewWinn

0

Możesz uprościć to, oferując inny portal logowania dla kontrahentów/podmiotów stowarzyszonych.

+0

Aplikacje, o których mowa, będą używane zarówno przez użytkowników wewnętrznych (A/D), jak i zewnętrznych (nie A/D). Jedno logowanie musi obsłużyć oba scenariusze. –