WIF从身份提供商内注册
问题描述:
是否有可能在未致电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);
答
一旦您的RP验证发出的令牌,RP将使用一个新的cookie建立它自己的auth会话,这个IP是无法控制的。通常,RP通过清除这个cookie来处理它自己的注销,SessionAuthenitcationModule.SignOut()这样做。
但是,如果你想让你的IP结束RP会话,我想你必须用重定向来做到这一点。
答
要安全地支持联合注销,您应该从身份提供商和信赖方应用程序都注销。
每个身份提供商都不同于持久性验证cookie,您需要了解如何通过您的IDP(STS)处理Fed-Signout。
更多信息可以在这里找到适合ADFS:
如果你想欺骗这个过程中,你可以确保STS和应用程序都在同一个域,并配置Cookie域是相同(使用通配符cookie)。
答
我们需要从RP和IDP做下面signOut
VAR fedModule = FederatedAuthentication.WSFederationAuthenticationModule;
fedModule.SignOut(true); Response.Redirect(new SignOutRequestMessage(new Uri(fedModule.Issuer),fedModule.Realm).WriteQueryString());
这对我有用,欢呼声。该身份提供者登出网址的构建并不明显。 – Aquinas 2016-03-29 01:24:37