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

时间:2015-08-30 20:53:20

标签: c# asp.net federated-identity

我正在使用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都被删除了。

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

P.S。我也自己删除了FedAuth cookie。

2 个答案:

答案 0 :(得分:1)

我认为你可能误解了联邦签署和签署工作的方式(我说这是因为你忽略了我认为最重要的事情。)

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

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

  1. Idp
  2. 您的网站
  3. 你想要达到什么目标?

    1. 仅退出您的网站
    2. 联盟退出(即退出 Idp和您的网站以及任何其他依赖方)
    3. 如果我们是1,那么这很简单。删除你的cookie,你会没事的,但是你仍然会登录到Idp,所以当用户导航回你的网站并被重定向到Idp时,他们很可能被重定向回你的网站,并带有安全令牌而不会被提示凭据然后将再次登录到您的站点,这似乎有点无意义。

      考虑到这一点,我认为你是在完成方案2.那么在这种情况下,你想要的功能实际上取决于你为你的Idp使用的软件,你在这个问题中忽略了一些。

      不幸的是,我不相信有一种通用的方式来做你想要的所有Idp,甚至更多的一些Idp不会直接支持它。

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

答案 1 :(得分:0)

  

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

<强> Source

相关问题