2012-01-27 119 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