2012-01-27 114 views
1

是否有可能在未致電RP的情況下從身份提供商內的依賴方註銷?WIF從身份提供商內註冊

我在MVC,在發出聲明爲一個RP上的標誌實現了自定義STS,並作出標準登出請求時,我的IP範圍內登出邏輯的工作原理:

// Process signout request 
SignOutRequestMessage signOutRequestMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri(Request.Url); 
// get response to invoke signout 
HttpResponse signOutResponse = new HttpResponse(HttpContext.Response.Output); 

然而,這當我嘗試從IP內部執行相同的操作時,代碼不起作用。

Uri uri = new Uri(string.Format("{0}://{1}/PassiveSTS?wa=wsignout1.0",request.Url.Scheme,request.Url.Host)); 
// Process signout request 
SignOutRequestMessage signOutRequestMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri(uri); 
// get response to invoke signout 
HttpResponse signOutResponse = new HttpResponse(context.Response.Output); 

回答

2

一旦您的RP驗證發出的令牌,RP將使用一個新的cookie建立它自己的auth會話,這個IP是無法控制的。通常,RP通過清除這個cookie來處理它自己的註銷,SessionAuthenitcationModule.SignOut()這樣做。

但是,如果你想讓你的IP結束RP會話,我想你必須用重定向來做到這一點。

2

要安全地支持聯合註銷,您應該從身份提供商和信賴方應用程序都註銷。

每個身份提供商都不同於持久性驗證cookie,您需要了解如何通過您的IDP(STS)處理Fed-Signout。

更多信息可以在這裏找到適合ADFS:

http://social.technet.microsoft.com/wiki/contents/articles/1439.ad-fs-how-to-invoke-a-ws-federation-sign-out.aspx

如果你想欺騙這個過程中,你可以確保STS和應用程序都在同一個域,並配置Cookie域是相同(使用通配符cookie)。

-1

我們需要從RP和IDP做下面signOut

VAR fedModule = FederatedAuthentication.WSFederationAuthenticationModule;

fedModule.SignOut(true); Response.Redirect(new SignOutRequestMessage(new Uri(fedModule.Issuer),fedModule.Realm).WriteQueryString());

+0

這對我有用,歡呼聲。該身份提供者登出網址的構建並不明顯。 – Aquinas 2016-03-29 01:24:37