2012-03-27 8 views
3

Einmaliges Anmelden scheint für meine Anwendung und eine Reihe anderer Websites, die sich einen STS teilen, ordnungsgemäß zu funktionieren. Wenn ich mich von meiner Anwendung abmelde, scheint ich ordnungsgemäß von meiner Site abgemeldet zu sein. Ich kann jedoch immer noch auf andere Anwendungen zugreifen, die denselben STS verwenden, ohne sich erneut anmelden zu müssen. Kann mir jemand sagen, was ich vermisse?Warum meldet mich meine WIF-Abmeldung nicht von allen RP-Websites ab?

Meine Anwendung ruft alles unter der Sonne, in einem Versuch, dies zur Arbeit zu bringen, aber das Verhalten ist das gleiche, wenn ich nur FederatedSignOut aufrufen.

FederatedAuthentication.SessionAuthenticationModule.SignOut(); 
FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie(); 
FederatedAuthentication.WSFederationAuthenticationModule.SignOut(false); 
System.Web.Security.FormsAuthentication.SignOut(); 
WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule; 
WSFederationAuthenticationModule.FederatedSignOut(new Uri(authModule.Issuer), new Uri(authModule.Realm)); 

Hier ist mein STS-Logout-Code.

SignOutRequestMessage requestMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri(Request.Url); 
FederatedPassiveSecurityTokenServiceOperations.ProcessSignOutRequest(requestMessage, User, requestMessage.Reply, Response); 

Ist das ein Problem mit der STS, oder mit meiner Anwendung? Ist es möglich, dass dies ein Konfigurationsproblem ist, wenn die Abmeldung zumindest für meine Anwendung funktioniert? Muss ich explizit eine "wsignoutcleanup1.0" -Nachricht an alle RPs senden, oder sollte ProcessSignOutRequest das für mich tun?

Antwort

2

Wie Sie wahrscheinlich schon erraten haben, erstellen sowohl der STS als auch Ihre Anwendung einen eigenen Sitzungscookie, und sie können die Cookies der anderen nicht berühren, weshalb Sie die Meldung wsignoutcleanup1.0 benötigen.

Auf Ihrer Anwendungsseite ist nur der Aufruf von FederatedSignOut() erforderlich. Es löscht Ihren Anwendungssitzungscookie für Sie, bevor er an den STS umgeleitet wird. Alles andere, was Sie dort haben, ist überflüssig.

Jetzt ist es jedoch Sache des STS, die eingehende Anfrage wsignoutcleanup1.0 an einem bestimmten Endpunkt zu empfangen und zu verarbeiten. Es hört sich so an als wäre es nicht. Ich würde zuerst bestätigen, dass dieser STS-Code von Ihnen tatsächlich getroffen wird. Wenn es getroffen wird, aber der STS-Sitzungscookie bleibt, dann stimmt etwas anderes nicht.

3

Nach dem link ist dies die Struktur der Abmelde url: https: // {DNS_name_of_RP_STS} /adfs/ls/?wa=wsignout1.0 & Wreply = {post-Sign-out_landing_URL}

Rufen Sie es direkt oder umleiten Sie Ihre Antwort darauf.

Update: Oder Sie können den URI erstellen, indem Sie das SignOutRequestMessage-Objekt verwenden.

var fa = FederatedAuthentication.WSFederationAuthenticationModule; 
var signOutRequestMessage = new SignOutRequestMessage(new Uri(fa.Issuer), fa.Realm); 
var signOutURI = signOutRequestMessage.WriteQueryString(); 
Verwandte Themen