Как удалить мой файл cookie аутентификации fedauth с помощью C#?

У меня есть пользовательский вход в Sharepoint 2010 с использованием аутентификации на основе утверждений. Аутентификация пользователя работает просто отлично, но мой пользовательский метод выхода - нет. Я пробовал несколько решений, но мой файл cookie аутентификации (федерация) все еще там. Зачем?

Это не будет работать:

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);
}

Как удалить мой файл cookie FedAuth? Мой файл cookie не является постоянным. Тем не менее, единственный способ удалить мой файл cookie аутентификации - это удалить его вручную в моем браузере или закрыть.

2 ответа

У нас были некоторые проблемы с этим при использовании 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, из которого я получил списокRequest.Cookies.AllKeysзатем выберите, какой файл cookie может содержать аутентификацию по его имени.

Нет, я не кодировал его или что-то в этом роде, чтобы он мог выбирать автоматически, я распечатал этоAllKeysнаружу, чтобыDebug.Console()затем вручную выберите имя файла cookie, а затем назначьте его имяmyCookieName. В моем случае файл cookie, отвечающий за аутентификацию,FedAuth.

Другие вопросы по тегам