2013-03-13 32 views
5

Używam ACS 2.0 w mojej aplikacji MVC 4.Nie można wylogować się z usługi Active Directory podczas używania usługi Azure ACS

Jest już skonfigurowany do logowania i działa dla różnych dostawców, w tym programu ADFS. Muszę zaimplementować funkcję wylogowania.

Jak this question jest już nieaktualne, użyłem kodu z these samples:

Oto jak to wygląda:

// Load Identity Configuration 
    FederationConfiguration config = FederatedAuthentication.FederationConfiguration; 

    // Get wtrealm from WsFederationConfiguation Section 
    string wtrealm = config.WsFederationConfiguration.Realm; 
    string wreply = wtrealm; //return url 

    // Read the ACS Ws-Federation endpoint from web.Config 
    string wsFederationEndpoint = ConfigurationManager.AppSettings["ida:Issuer"]; 

    SignOutRequestMessage signoutRequestMessage = new SignOutRequestMessage(new Uri(wsFederationEndpoint)); 

    signoutRequestMessage.Parameters.Add("wreply", wreply); 
    signoutRequestMessage.Parameters.Add("wtrealm", wtrealm); 

    FederatedAuthentication.SessionAuthenticationModule.SignOut(); 

    var signoutUrl = signoutRequestMessage.WriteQueryString(); 

W rezultacie otrzymuję URL logowania, gdzie należy przekierować , wyrzuci tokeny i odeśle mnie. URL wygląda następująco:

https://myacsnamespace.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wreply=http%3a%2f%2flocalhost%3a61192%2f&wtrealm=http%3a%2f%2flocalhost%3a61192%2f 

W rezultacie działa zgodnie z oczekiwaniami na kontach Google, Yahoo i Microsoft. Po wylogowaniu i uzyskaniu dostępu do chronionego obszaru otrzymuję listę dostawców tożsamości i muszę się ponownie zalogować, nawet jeśli wybiorę tego samego dostawcę.

Ale gdy używam dostawcę ADFS, to działa tak:

  • klikam wylogować i dostać się na stronie dostępnych dostawców

  • wybiorę ADFS dostawcy znowu

  • Dostaję się do chronionego obszaru przy użyciu moich starych poświadczeń AD

  • Jeśli ADFS jest jedynym dostawcą, krok 2 f ROM powyżej jest pomijany, a Ciągle loguję się bez możliwości zmiany użytkownika.

Jak widzę, ACS nie unieszkodliwia tokena bezpieczeństwa, który dostał z ADFS i ponownie go wykorzystuje.

Czy masz jakieś wskazówki, w jaki sposób mogę zmusić ACS do pozbycia się tego tokena?

Z góry dziękuję!

+1

ACS nigdy nie zapisuje tokenów w plikach cookie w tym scenariuszu. Jedyne pliki cookie są dostępne w programie ADFS i w Twoim RP. Jeśli korzystasz z komputera przyłączonego do domeny, podejrzewam, że program ADFS może być skonfigurowany do automatycznego logowania. Czy możesz potwierdzić, czy pierwotnie musiałeś użyć nazwy użytkownika/hasła, aby się zalogować, i czy jesteś automatycznie zalogowany podczas korzystania z okna przeglądarki prywatnej? –

+0

Oren, potwierdzam, że musiałem się zalogować po raz pierwszy - moja maszyna nie znajduje się w tej domenie. To samo zachowanie w oknie przeglądarki prywatnej. I podejrzewam, że token między ADFS i RP nie jest usuwany. Jeśli chcesz pomóc, daj mi znać twitter/fb/e-mail. Wyślę Ci adres URL i konto AD, aby rzucić okiem, a także mogę udostępniać źródła. –

+0

AKTUALIZACJA: Znalazłem Cię na Facebooku i udostępniłeś poświadczenia i adres URL. Daj mi znać, jeśli potrzebujesz źródeł. –

Odpowiedz

0

+1 za odpowiedź @ oren-melzer: przeglądarki buforują podstawowe poświadczenia http i automatycznie ponownie je wysyłają. Przenieś się do formularza auth (który używa plików cookie) lub wyloguj się, a konkretnie odmów nagłówek auth przeglądarki, ciągle zwracając 401. Czasami ten "powrót 401 dla poprawnych poświadczeń" działa, aby wyczyścić przeglądarkę, czasami musisz po prostu wymagać od użytkowników zamknięcia przeglądarki .

Powiązane problemy