我正在使用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。
答案 0 :(得分:1)
我认为你可能误解了联邦签署和签署工作的方式(我说这是因为你忽略了我认为最重要的事情。)
当您尝试登录使用WS-Federation的应用程序时,您实际上已重定向到身份提供程序(Idp)并登录此Idp。登录Idp后,您将通过安全令牌重定向回您的站点,然后您也将登录到您的站点。
在此阶段,您将登录两个有效的应用程序:
你想要达到什么目标?
如果我们是1,那么这很简单。删除你的cookie,你会没事的,但是你仍然会登录到Idp,所以当用户导航回你的网站并被重定向到Idp时,他们很可能被重定向回你的网站,并带有安全令牌而不会被提示凭据然后将再次登录到您的站点,这似乎有点无意义。
考虑到这一点,我认为你是在完成方案2.那么在这种情况下,你想要的功能实际上取决于你为你的Idp使用的软件,你在这个问题中忽略了一些。
不幸的是,我不相信有一种通用的方式来做你想要的所有Idp,甚至更多的一些Idp不会直接支持它。
我认为最好提出一个关于你的Idp如何运作以及如何让它发挥作用的问题。此外,在问题中包含的一些非常好的东西可能是您的网站和Idp的URL(不是出于“检查它们”的目的,而是因为如果它们属于同一域名,则可能有其他间接解决方案)。此外,您的Idp和网站的基础设施的任何内容也会有所帮助,因为再次特定设置可以提供间接解决方案。
答案 1 :(得分:0)
“如果在ACSSignOut cookie中指定了wreply参数,则为 JavaScript重定向到wreply值指示的地址 完成注销。否则,JavaScript会重定向到 返回依赖方的URL,如ACS管理中所指定 门户“。
<强> Source 强>