2010-02-19 8 views
5

Rozwijamy aplikację intranetową opartą na przeglądarce. Wszyscy użytkownicy mają aktywne konto katalogowe, więc oczywistym wyborem będzie użycie Zintegrowanego uwierzytelniania systemu Windows. Ale będzie wielu użytkowników uzyskujących dostęp do tego samego komputera klienckiego, więc zdecydowaliśmy się użyć uwierzytelniania opartego na formularzach (ale uwierzytelnionego przeciwko AD).Jak uwierzytelnić użytkownika między ASP.NET i WCF?

W tym scenariuszu, jaki jest najlepszy sposób uwierzytelniania między moją aplikacją ASP.NET (IIS) a usługami WCF (inny serwer IIS 7). Nie chcę używać trybu zgodności lub certyfikatu asp.Net.

Mam na myśli utworzenie innego konta domeny do uwierzytelniania ASP.NET i WCF. Przekazuję również informacje o bieżącym użytkowniku ASP.NET do WCF jako informacje o nagłówku. Czy to właściwy sposób? Poniższy kod wywoła z ASP.NET, aby uzyskać dostęp do każdej metody usługi.

// Call WCF service from ASP.NET Application using a new domain account for each call. 
proxy.ClientCredentials.Windows.ClientCredential.Domain = "mydomain"; 
ServiceReference.HelloWorldClient proxy = new ServiceReference.HelloWorldClient(); 
proxy.ClientCredentials.Windows.ClientCredential.UserName = "new_domain_account"; 
proxy.ClientCredentials.Windows.ClientCredential.Password = "password"; 

Czy istnieje lepszy sposób uwierzytelniania WCF z ASP.NET?

Dzięki, Popiół.

Odpowiedz

0

umm ... jeśli masz AD i oni logują się przy pomocy swoich referencji, nie ma znaczenia, na jakiej maszynie się znajdują, po prostu użyj AD. A co jeśli używają tej samej maszyny.

W każdym razie, Microsoft ma dużo informacji na ten temat tutaj:

http://wcfsecurity.codeplex.com/wikipage?title=Application%20Scenarios&referringTitle=Home

Sprawdź to.

+0

Konfiguracja usługi wcf jako zintegrowane uwierzytelnianie systemu Windows. Dostęp do jednego komputera klienckiego przy użyciu konta AD będzie miał wielu użytkowników. Nie chcą wylogowywać się z systemu Windows, aby uzyskać dostęp do tej aplikacji. więc konfiguruję uwierzytelnianie formularzy. Ale po zalogowaniu się (formularz), jeśli uzyskują dostęp do WCF, tożsamość będzie oryginalnym użytkownikiem logowania do systemu Windows, a nie użytkownikiem formularza. – Ash

+0

Ah, myślę, że rozumiem, nie chcesz konfigurować Kerberos.Jeśli konfigurujesz protokół Kerberos, możesz uwierzytelniać się przy użyciu usługi AD w serwisie internetowym bez konieczności wykonywania jakichkolwiek czynności przez użytkownika. Czy może to lepszy sposób mówienia? – Hogan

+0

Tak, chcę ustawić Kerberos i chcę uwierzytelnić się z AD, ale istnieje sposób, w jaki mogę przekazać aktualnie uwierzytelnionego użytkownika formularza ASP.NET do WCF, aby WCF pomyślał, że jest to bieżący użytkownik. (Użytkownik AD). Obecnie WCF uwierzytelnia się, ale nie jest najnowszym użytkownikiem formularza, ale oryginalnym użytkownikiem logowania do systemu Windows. Dziękuję za link, ale nie mogłem znaleźć właściwej odpowiedzi. – Ash

3

Nie ma nic szczególnego w uwierzytelnianiu aplikacji ASP.NET do usługi WCF. Dostępne są wszystkie standardowe opcje autoryzacji (nazwa użytkownika, X.509, okna).

Interesujące jest to, że chcesz przekazać również poświadczenia klienta oparte na przeglądarce. Jest to znany wzorzec nazywany zaufanym podukładem. I tak, możesz je przekazać w nagłówku, o ile wiadomość jest chroniona (zaszyfrowana).

1

Wygląda na to, że nie jest to problem z WCF, ale problem z przezroczystą autentycznością przeglądarki.

Spróbuj wyłączyć uwierzytelnianie zintegrowane z systemem Windows w usługach IIS dla aplikacji ASP.NET i przełącz się na uwierzytelnianie podstawowe lub szyfrowane. Obie te metody nadal będą uwierzytelniać się przeciwko AD, ale przeglądarka nie będzie w przejrzysty sposób uwierzytelniać zalogowanego użytkownika.

Następnie w aplikacji ASP.NET wystarczy, że poda się podszywanie i przekaże informacje, o których świadczy usługa IIS do usługi WCF, do której dzwonisz.

1

Nie znam ASP.NET w CAŁOŚCI, ale zrobiłem trochę WCF i myślę, że trzeba zrobić "logowanie do formularza", aby następnie podszyć się pod użytkownika w bieżącym wątku, a następnie zainicjować połączenie WCF z drugim serwerem. Spójrz na numer this article on msdn, aby uzyskać szybki przegląd niektórych z nich w samym WCF. Nie wiem, jak można to zintegrować ze stroną ASP.NET (jak powiedziałem, znam zero na temat tej technologii), ale myślę, że koncepcyjnie to właśnie będzie trzeba zrobić.

Powiązane problemy