如何强制联合注销重定向到登录页面?

问题描述 投票:0回答:4

我正在使用 WSFederationAuthentication 模块进行身份验证。我想要这个:用户按下注销按钮后,他注销(删除所有 cookie)并重定向到登录页面。 我有注销按钮的代码:

var ls = new LoginStatus();
ls.LogoutAction = LogoutAction.Redirect;
ls.LogoutPageUrl = {some URL, where I have sign out code}

注销部分:

Microsoft.IdentityModel.Web.WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
String signoutURL = WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(
authModule.Issuer,
{login Url},
null);

WSFederationAuthenticationModule.FederatedSignOut(
new Uri(signoutURL),
new Uri(authModule.Realm));

此代码确实注销并删除cookie,但不会重定向到登录页面。不过,用户看到的 url 包含这部分: &wreply={loginUrl}

据我了解,wreply 参数并不总是被使用。

我没有使用 FederatedSignOut() 方法,而是尝试了这个:

System.Net.WebRequest req = System.Net.WebRequest.Create(signoutURL);
System.Net.WebResponse resp = req.GetResponse();
Redirect(LoginUrl);

但是,这并不能真正注销。当用户下次尝试登录时,无需输入任何凭据并自动登录。我猜,并非所有 cookie 都会被删除。

所以,我的问题是,如何注销并强制重定向到登录页面?

附注我还自己删除了 FedAuth cookie。

c# asp.net federated-identity
4个回答
1
投票

我认为您可能误解了联合登录和注销的工作方式(我这么说是因为您忽略了提及我认为最重要的事情。)

当您尝试登录到使用 WS-Federation 的应用程序时,您实际上会被重定向到身份提供商 (Idp),并且您会登录到此 Idp。登录 Idp 后,您将使用安全令牌重定向回您的网站,然后您也将登录到您的网站。

在此阶段,您已登录到两个有效的应用程序:

  1. 国内流离失所者
  2. 您的网站

你想实现什么目标?

  1. 仅退出您的网站
  2. 联合注销(即注销 Idp 和您的网站以及任何其他依赖方)

如果我们处于情况 1,那就很简单了。删除您的 cookie 就可以了,但是您仍会登录 Idp,因此当用户导航回您的网站并重定向到 Idp 时,他们可能会使用安全令牌重定向回您的网站,而不会收到提示凭据,然后将再次登录您的网站,这似乎有点毫无意义。

鉴于此,我认为您需要场景 2。在这种情况下,您想要的功能实际上取决于您为 Idp 使用的软件,这是您在问题中忽略提及的。

不幸的是,我不相信有一种通用的方法可以对所有 Idp 执行您想要的操作,甚至一些 Idp 不会直接支持它。

我认为最好提出一个关于您的 Idp 如何工作以及如何使其发挥作用的问题。此外,问题中包含的一些非常好的内容可能是您的网站和 Idp 的 URL(不是为了“检查它们”,而是因为如果它们位于同一域名下,则可能存在其他间接解决方案)。此外,有关 Idp 和站点基础设施的任何信息也会有所帮助,因为特定设置可以提供间接解决方案。


0
投票

看来,重定向 Url 可以是only Url,写入 Idp 配置中:

<passiveEndpoints>
<endpoint endpointType="WsFed" location="{this url}" binding="Post" />
</passiveEndpoints>

如果

wreply
参数值为任何其他url,则不起作用。


0
投票

“如果在 ACSSignOut cookie 中指定了 wreply 参数,则 JavaScript 重定向到 wrply 值指示的地址 完成注销。否则,JavaScript 会重定向到 返回依赖方的 URL,如 ACS 管理中指定的 传送门。”

来源


0
投票

如果上述问题得到解决,请告诉我。我也有同样的问题。我们使用微软作为 IDP。请帮助我。

© www.soinside.com 2019 - 2024. All rights reserved.