У меня есть основное приложение asp.net, которое написано на asp.net 1.1. Запуск под приложением - несколько приложений 2.0. Чтобы полностью выйти из системы, я могу просто выйти из приложения 1.1 с помощью FormsAuthentication.SignOut или это сложнее, чем это?Как выйти из нескольких приложений asp.net?
ответ
То, что вы ищете, называется 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" />
Вы используете домены второго или третьего уровня для приложений? Если так что вам нужно будет сделать немного больше, добавив домен куки:
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 на прошлую дату. Это гарантирует, что 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);
}
Я принимаю во внимание, что вы используете одну и ту же базу данных для всех приложений. Если приложения используют отдельную базу данных для регистрации и аутентификации, нам нужно будет сделать еще несколько. Просто дайте мне знать, если это так. В противном случае это сработает для вас.
Это может быть проще, если у вас есть центральный магазин сеансов для всех ваших приложений. Затем вы можете установить сеанс равным нулю в одном месте.
Это работает для меня:
В случае Выход вместо FormsAuthentication.GetAuthCookie коллекции использовать метод Cookies в объекте запроса, как показано ниже:
HttpCookie cookie = Request.Cookies.Get(otherSiteCookieName);
cookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(cookie);
Ofcourse, это требует и знаю имя куки сайт (ы), в котором вы хотите, чтобы пользователь выходил из системы, - что, однако, не будет проблемой, если вы используете один и тот же файл cookie во всех веб-приложениях.
Я предпочитаю использовать web.config
<authentication mode="Forms">
<forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" />
</authentication>
«Теперь, чтобы сделать единый вход выключен, вызов FormsAuthentication.SignOut не может быть достаточно» Вы можете указать, почему это не было бы достаточно? – 2016-06-16 12:47:27