Как выйти из нескольких приложений asp.net? - PullRequest
3 голосов
/ 11 сентября 2008

У меня есть основное приложение asp.net, которое написано на asp.net 1.1. Под приложением работают несколько приложений 2.0. Чтобы полностью выйти из системы, я могу просто выйти из приложения 1.1 с помощью FormsAuthentication.SignOut или это сложнее?

Ответы [ 4 ]

5 голосов
/ 11 сентября 2008

То, что вы хотите сделать, называется Single Sign On и Single Sign Off. Существуют различия в зависимости от того, как у вас настроены приложения. Я постараюсь уточнить, где эти различия вступают в игру.

Чтобы реализовать единый вход и единый выход, необходимо, чтобы имена файлов cookie, атрибуты защиты и пути были одинаковыми для всех приложений.

<authentication mode="Forms">
    <forms name=".cookiename"
           loginUrl="~/Login.aspx" 
           timeout="30" 
           path="/" />
</authentication>

Затем вам нужно добавить машинные ключи, и они должны быть одинаковыми для всех ваших приложений.

<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902"
            encryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC"
            validation="SHA1" />

Используете ли вы домены второго или третьего уровня для приложений? Если это так, вам нужно будет сделать немного больше, добавив домен в cookie:

protected void Login(string userName, string password)
{
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
    cookie.Domain = "domain1.com";
    cookie.Expires = DateTime.Now.AddDays(30);
    Response.AppendCookie(cookie);
}

Теперь, чтобы выполнить однократную подпись, вызова FormsAuthentication.SignOut может быть недостаточно. Следующая лучшая вещь - установить дату окончания срока действия куки. Это гарантирует, что cookie больше не будет использоваться для аутентификации.

protected void Logout(string userName)
{
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False);
    cookie.Domain = "domain1.com";
    cookie.Expires = DateTime.Now.AddDays(-1);
    Response.AppendCookie(cookie);
}

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

0 голосов
/ 30 июня 2010

Я предпочитаю использовать web.config

<authentication mode="Forms">
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>
0 голосов
/ 17 февраля 2010

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

В событии Logout вместо метода FormsAuthentication.GetAuthCookie используйте коллекцию Cookies в объекте Request, как показано ниже:

HttpCookie cookie = Request.Cookies.Get(otherSiteCookieName);
cookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(cookie);

Конечно, для этого требуется, чтобы вы знали имя файлов cookie сайтов, на которых вы хотите, чтобы пользователь вышел из системы, однако это не будет проблемой, если вы используете один и тот же файл cookie во всех веб-приложениях.

0 голосов
/ 11 сентября 2008

Может быть проще, если у вас есть центральное хранилище сеансов для всех ваших приложений. Затем вы можете установить нулевую сессию в одном месте.

...