Проблема SignOut единого входа: FormsAuthentication.SignOut () не работает - PullRequest
6 голосов
/ 10 ноября 2009

Я использовал демо Single Sign-on из: http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

И я добавил функцию SignOut для этой демонстрации, но обнаружил проблему:

когда я устанавливаю cookie.Domain, FormsAuthentication.SignOut () не работает, и cookie не может быть очищен.

Если cookie не был установлен, cookie.Domain, FormsAuthentication.SignOut () работает.

Я использовал C # asp.net.

А кто-нибудь может мне рассказать о некоторых простых и практичных решениях для единого входа и единого входа, использующих asp.net?

Ответы [ 3 ]

4 голосов
/ 10 ноября 2009

Если вы используете аутентификацию для одного и того же домена и субдомена, попробуйте добавить имя домена в файл web.config вместо добавления домена с помощью кода. вам не нужно ничего кодировать, если вы используете эту запись web.config

<authentication mode="Forms">

   <forms loginUrl="~/Account/LogOn" timeout="2880" domain="abc.com"/>

</authentication>

Эта запись сообщает механизму asp.net, что файл cookie аутентификации будет использоваться для всех поддоменов abc.com. Попробуйте использовать это и посмотрите, работает ли оно.

1 голос
/ 17 февраля 2010

Это сработало для меня:

В событии / методе выхода из системы каждого сайта используйте коллекцию файлов cookie в объекте запроса и удалите соответствующие файлы cookie, как показано ниже:

enter code hereHttpCookie cookie = Request.Cookies.Get(".CommonCookieName"); 
cookie.Expires = DateTime.Now.AddDays(-1); 
HttpContext.Current.Response.Cookies.Add(cookie);

Если все сайты в SSO используют один и тот же файл cookie, это просто, как описано выше. Если несколько или каждый сайт, участвующий в SSO, используют свой собственный файл cookie / имя пользователя для одного и того же субъекта (человека), то вам необходимо удалить все файлы cookie. (возможно, установите центральное расположение, сопоставляя имена пользователей и имена файлов cookie на каждом сайте в коллекции сайтов единого входа.

0 голосов
/ 26 мая 2011

Это работает для меня

public virtual ActionResult LogOff()
    {
        FormsAuthentication.SignOut();
        foreach (var cookie in Request.Cookies.AllKeys)
        {
            Request.Cookies.Remove(cookie);
        }
        foreach (var cookie in Response.Cookies.AllKeys)
        {
            Response.Cookies.Remove(cookie);
        }
        return RedirectToAction(MVC.Home.Index());
    }
...