WIF从身份提供商内部注销

时间:2012-01-27 16:36:55

标签: wif

是否可以在不调用RP的情况下从身份提供商内部向依赖方退出?

我已经在MVC中实现了一个自定义STS,它在登录时向RP发出声明,并且在制作标准退出请求时,我在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);

3 个答案:

答案 0 :(得分:2)

一旦您的RP验证了已发布的令牌,RP将使用新的cookie建立自己的auth会话,而IP无法控制。通常,RP通过清除此cookie来处理它自己的注销,SessionAuthenitcationModule.SignOut()会这样做。

但是如果你想让你的IP结束RP会话,我认为你必须通过重定向来实现它。

答案 1 :(得分: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)。

答案 2 :(得分:-1)

我们需要在下面签署来自RP和IDP的签名

var fedModule = FederatedAuthentication.WSFederationAuthenticationModule;

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