【发布时间】:2013-05-01 11:42:20
【问题描述】:
我正在基于 Thinktecture 代码实现我自己的身份提供程序。这是 Azure ACS 在使用单点注销功能时的一种奇怪行为,它对于 google/live 和我自己的身份提供者有所不同。
登出网址(realm 与站点名称完全相同):
mysite.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wreply=http%3a%2f%2flocalhost%2fAdministration.Frontend.Web%2f&wtrealm=http%3a%2f%2flocalhost%2fAdministration.Frontend.Web %2f
这是一个注销的伪代码:
//clear FedAuth cookies
FormsAuthentication.SignOut();
FederatedAuthentication.WSFederationAuthenticationModule.SignOut(true);
//call Single SignOut
var signoutRequestMessage = new SignOutRequestMessage(new Uri(signOutUrl));
return Redirect(signoutRequestMessage.WriteQueryString());
这是示例流程(我使用隐私浏览和 Fiddler 来查看所有内容):
1) 我正在使用 google 帐户登录我的应用程序。
2) 单击注销,结果我在 ACS 上获得一个带有此代码的页面:
function on_completion()
{window.location = 'http://localhost/Administration.Frontend.Web/';}
<iframe src="https://www.google.com/accounts/Logout" style="visibility: hidden"">/iframe>
<iframe src="http://localhost/Administration.Frontend.Web/?wa=wsignoutcleanup1.0" style="visibility: hidden"></iframe>
结果:我已从我的应用程序和 google 中注销。
3) 登录到我的身份提供商,单击注销,重定向到 ACS 上与上一步相同的 URL,但现在我得到 302 结果并重定向到
https://localhost/IdentityProvider/issue/wsfed?wa=wsignout1.0&wreply=https%3a%2f%2fmysite.accesscontrol.windows.net%2fv2%2fwsfederation%3fredirectUrl%3dhttp%3a%2f%2flocalhost%2fAdministration.Frontend.Web%2f
结果:我已从我的应用程序和身份提供者中注销。
4) 再次尝试使用google,输入凭据成功登录,但如果失败则注销。我已从应用程序中注销,但未从谷歌登录。而且我还看到我没有使用 iframe 获取页面,而是 ACS 再次尝试将我重定向到
https://localhost/IdentityProvider/issue/wsfed?wa=wsignout1.0
(然后返回 mysite.accesscontrol.windows.net,最后返回我的应用程序)
两个主要问题:
- 为什么调用 ACS 注销会给我带有附加的 iframe 页面 wa=wsignoutcleanup1.0 用于 google/live 但 302 重定向到我的 身份提供者,可能是我错过了什么 联邦元数据.xml?
- 看起来第 3 步之后的 ACS 没有 了解我已成功从身份提供者注销 从这一刻开始,一次又一次地尝试这样做,如何告诉他们 阻止它?
【问题讨论】:
-
您能否提供 ACS 页面(只是路径,在 .accesscontrol.windows.net/??? 之后),您正在被重定向并且行为不明确 - 首先呈现一些 JS + iframe 的页面,但接下来只呈现 302 响应。
-
另外,您使用的是 ACS 托管的领域发现登录页面,还是您自己的登录页面?我认为它是 ACS 托管的。请移至自托管登录页面,然后重试。
-
这里提供的答案stackoverflow.com/questions/14932241/… 提供了更准确的信息
标签: azure claims-based-identity acs