如何使用c#删除我的第几个身份验证cookie

本文关键字:几个 身份验证 cookie 何使用 删除 我的 | 更新日期: 2023-09-27 18:14:20

我在Sharepoint 2010中使用基于声明的身份验证自定义登录。用户身份验证工作得很好,但我的自定义登出方法没有。我已经尝试了几种解决方案,但我的身份验证cookie (federation)仍然存在。为什么?

这行不通:

FormsAuthentication.SignOut();

不是这样的:

FederatedAuthentication.SessionAuthenticationModule.SignOut();
FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie();

var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
    HttpCookie cookie = new HttpCookie(authCookie.Name);
    cookie.Expires = DateTime.Now.AddDays(-1d);
    cookie.Domain = domain;
    Response.Cookies.Add(cookie);
}

如何删除我的FedAuth cookie?我的饼干不持久。然而,唯一的方法来删除我的验证cookie是手动删除它在我的浏览器或关闭它。

如何使用c#删除我的第几个身份验证cookie

我们在使用WIF时遇到了一些麻烦。我不知道你的SharePoint实现是否使用WIF,但是,如果使用,这是一个可能有用的替代方法:

WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
                string signoutUrl = (WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(authModule.Issuer, authModule.Realm, null));
                Response.Redirect(signoutUrl);

我知道这是一个10年的主题,但最近我也偶然发现了SharePoint Server 2013和ASP完全相同的问题。. NET Framework 4.5

解决我的问题的实际操作几乎与您的上一个代码片段完全相同

var authCookie = Request.Cookies[myCookieName];
if (authCookie != null)
{
    HttpCookie cookie = new HttpCookie(authCookie.Name);
    cookie.Expires = DateTime.Now.AddDays(-1d);
    cookie.Domain = domain;
    Response.Cookies.Add(cookie);
}

唯一不同的是我手动确定cookie名称myCookieName,我从Request.Cookies.AllKeys中获得列表,然后选择可能包含其名称中的auth的cookie。

不,我没有编码它或其他东西,所以它可以自动选择,我打印出AllKeys,到Debug.Console()然后手动选择一个cookie名称,然后将其名称分配给myCookieName。在我的例子中,负责验证的cookie是FedAuth