2012-03-27 91 views
3

單點登錄似乎對我的應用程序和許多其他共享STS的網站正常工作。當我退出我的應用程序時,我似乎正確地從我的網站註銷;但是,我仍然可以訪問使用相同STS的其他應用程序,而無需再次登錄。任何人都可以告訴我我錯過了什麼嗎?爲什麼我的WIF註銷不能將我從所有RP網站註銷?

我的應用程序在陽光下調用了所有東西,試圖讓它起作用,但是當我只調用FederatedSignOut時,行爲是一樣的。

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)); 

這是我的STS登出碼。

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

這是STS的問題,還是與我的應用程序?如果註銷至少適用於我的應用程序,這可能是配置問題嗎?我是否必須明確地向所有RP發送「wsignoutcleanup1.0」消息,還是應該爲ProcessSignOutRequest爲我做這些?

回答

2

正如您可能猜到的一樣,STS和您的應用程序都創建了自己的會話cookie,並且它們無法觸及彼此的cookie,這就是爲什麼您需要wsignoutcleanup1.0消息。

在您的應用程序端,只需要調用FederatedSignOut()。它會在你重新發送到STS之前刪除你的應用程序會話cookie,所以你在那裏的一切都是多餘的。

但是,現在由您的STS來正確接收和處理傳入的wsignoutcleanup1.0請求。這聽起來像你的不是。我會首先確認你的STS代碼實際上正在被擊中。如果它被擊中,但STS會話cookie仍然存在,那麼其他事情就是錯誤的。

3

按照link,這是註銷URL的結構: 的https:// {DNS_name_of_RP_STS} /adfs/ls/?wa=wsignout1.0 & wreply = {-SIGN後out_landing_URL}

直接調用它或將您的響應重定向到它。

更新:或者您可以使用SignOutRequestMessage對象創建URI。

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