To interesujące pytanie, które zadałeś. Wiem, że z jakiegoś powodu Microsoft wydał tę strukturę "Windows Identity Foundation" bez dużej dokumentacji. Wiem o tym, ponieważ miałem zadanie dowiedzieć się, jak z niego korzystać w nowym projekcie i zintegrować go z istniejącą infrastrukturą. Przez wiele miesięcy szukałem w sieci informacji, szukając dobrych informacji.
Podjąłem nieco inny punkt widzenia, aby rozwiązać problem, który opisujesz.
Wziąłem istniejącą aplikację logującą i zintegrowałem z nią WIFI Microsoftu. Rozumiem przez to, że mam aplikację, w której loguje się użytkownik. Aplikacja logująca przesyła poświadczenia dostarczone przez użytkownika do innego serwera, który zwraca tożsamość użytkownika (lub wskazuje na niepowodzenie podczas logowania).
Patrząc na niektóre z przykładów Microsoftu, widzę, że robią, co następuje: Narysuj SignInRequestMessage
z kwerendy (generowanego przez powołując aplikacji Strony), skonstruować token usługi z klasy niestandardowej, a wreszcie zadzwonić FederatedSecurityTokenServiceOperations. ProcessSignInresponse z bieżącym httpcontext.response. Niestety, nie potrafię tego dobrze wyjaśnić; naprawdę musisz spojrzeć na próbki kodu.
Niektóre z moich kodów są bardzo podobne do próbki kodu. Tam, gdzie będziesz zainteresowany implementacją wielu własnych logik, jest GetOutputClaimsIdentity
. Jest to funkcja, która tworzy tożsamość roszczeń opisującą zalogowanego użytkownika.
Oto, co myślę, że naprawdę chcesz wiedzieć. Tego Microsoft nie mówi w swojej dokumentacji, AFAIK.
Po zalogowaniu użytkownik zostaje przekierowany z powrotem do aplikacji strony ufającej. Bez względu na to, jak działa aplikacja do logowania, klasy WIF wyślą odpowiedź do przeglądarki użytkownika, która zawiera "ukryte" dane wejściowe HTML zawierające certyfikat podpisania tokena i roszczenia użytkownika. (Zgłoszenia będą w jasnym tekście). Na końcu tej odpowiedzi znajduje się przekierowanie do strony sieci zaufania.Wiem tylko o tej akcji, ponieważ złapałem ją za pomocą "Fiddlera"
Po powrocie na stronę strony ufającej, klasy WIF obsłużą odpowiedź (przed uruchomieniem jakiegokolwiek kodu). Certyfikat zostanie zatwierdzony. Domyślnie, jeśli skonfigurowałeś stronę internetową strony zależnej za pomocą FedUtil.exe (klikając "Dodaj STS Reference w aplikacji strony ufającej od Visual Studio), klasa Microsoft zweryfikuje odcisk kciuka certyfikatu."
Wreszcie, WIF framework ustawia pliki cookie w przeglądarce użytkownika (Z doświadczenia wiem, że nazwy ciasteczek zaczynają się od "FedAuth"), które zawierają roszczenia użytkowników.Te ciasteczka nie nadają się do odczytu przez człowieka
Kiedy to się stanie, możesz opcjonalnie wykonać operacje na roszczenia użytkownika na stronie internetowej strony ufającej za pomocą ClaimsAuthenticationClass
. To jest, gdzie Twój kod jest ponownie uruchomiony
Wiem, że różni się to od tego, co opisujesz, ale mam tę konfigurację działa. Mam nadzieję, że to pomoże!
ps. Sprawdź inne pytania, które zadawałem o systemie Windows Identity Foundation.
UPDATE: Aby odpowiedzieć na pytanie w komentarzu poniżej:
jedna rzecz, którą zostawiłem na to, że przekierowanie do STS logowania aplikacja dzieje na zasadzie przekierowania z zapytaniem-string zawierający adres URL aplikacja, do której loguje się użytkownik. To przekierowanie dzieje się automatycznie, gdy użytkownik po raz pierwszy próbuje uzyskać dostęp do strony wymagającej uwierzytelnienia. Ewentualnie uważam, że można przekierować ręcznie za pomocą modułu WSFederationAuthentication
.
Nigdy nie próbowałem tego robić, ale jeśli chcesz używać na stronie logowania w samej aplikacji, uważam, że ramy te powinny umożliwić korzystanie z następujących czynności:
1) enkapsulacja STS kod w bibliotece. 2) Odwołaj bibliotekę do swojej aplikacji. 3) Utwórz stronę logowania w aplikacji. Upewnij się, że taka strona nie wymaga uwierzytelnienia. 4) Ustaw właściwość wystawcy elementu wsFederation
w sekcji Microsoft.IdentityModel
pliku web.config na stronie logowania.
dzięki Eugenio, pomyślałem, że przeczytałem Przewodnik po Tożsamościach, oczywiście nie dlatego, że przegapiłem, że Fabrikam był aplikacją MVC. Na pewno jeszcze raz to obejrzę. Spojrzałem też na bloga Dominika Baiera i sądzę, że to, do czego dążę, to dzwonienie do aktywnego sts z serwera WWW na stronie logowania. –
Nie widzę, że przy użyciu WIF w ASP.net MVC jest inny niż przy użyciu formularzy ASP.net. –
Zasady są dokładnie takie same. Jest tylko kilka szczegółów dotyczących implementacji. Najczęściej występujące różnice to: -W aplikacji do obsługi formularzy internetowych zwykle używasz WIF do wymiany wszystkich protokołów (passiveRedirectEnable = true). W aplikacji MVC wyłączysz to i zajmiesz się tym programowo, jak wyjaśniono w moim poście na blogu. - W aplikacji MVC zazwyczaj stosuje się atrybut IAuthorizationFilter. W formularzach sieci Web to nie istnieje i po prostu polegasz na istniejącym mechanizmie autoryzacji ASP.NET (lub wywołaj IsInRole, itp.). –