Проблема Mvc4 FormsAuthentication при использовании на нескольких веб-сайтах

Я разрабатываю два разных веб-сайта. В этом я использовал FormsAuthentication для аутентификации. Я использую следующий код

FormsAuthenticationTicket authTicket = default(FormsAuthenticationTicket);
HttpCookie authCookie = default(HttpCookie);

authTicket = new FormsAuthenticationTicket(1, user.userContext.UserName, DateTime.Now, DateTime.Now.AddMinutes(Session.Timeout), model.RememberMe, model.Email);
string strEncryptedTicket = FormsAuthentication.Encrypt(authTicket);
authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, strEncryptedTicket);
if (authTicket.IsPersistent)
{
    authCookie.Expires = authTicket.Expiration;
}
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);;
Session.Add(Constants.LOGIN_DO, user.userContext);

Я использую один и тот же код на обоих сайтах для входа. При входе на один сайт работает. Но если я открою другой сайт в том же браузере и попытаюсь войти в систему, это создаст проблему. Он ведет себя неправильно - например, когда я выхожу из системы site1, он также выходит из системы site2. Предположим, что первый сайт — www.someone.com, а второй — something.someone.com.

Примечание: для site2 я меняю значение Session.Add(Constants.LOGIN_DO, user.userContext);, где LOGIN_DO = "OrgLoginDO";

web.config

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>

Я не понимаю, почему это происходит? Может ли кто-нибудь помочь мне решить эту проблему? мне нужно использовать что-то другое? Я хочу реализовать его как без единого входа.


person Ajay    schedule 29.01.2016    source источник
comment
Два сайта размещены в одном домене верхнего уровня? Также не могли бы вы быть немного более конкретным, когда вы говорите, что It misbehaves? Пожалуйста, определите ожидаемое и фактическое поведение, которое вы наблюдаете.   -  person Darin Dimitrov    schedule 31.01.2016
comment
Спасибо за повтор. первый домен веб-сайта www.someone.com, а второй something.someone.com.   -  person Ajay    schedule 31.01.2016
comment
@DarinDimitrov Пожалуйста, посмотрите мое редактирование.   -  person Ajay    schedule 31.01.2016


Ответы (1)


Чтобы избежать коллизий между файлами cookie аутентификации форм двух сайтов, вы можете дать им разные имена:

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login" timeout="2880" name="SITE1COOKIE" />
</authentication>

и на вашем втором сайте:

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login" timeout="2880" name="SITE2COOKIE" />
</authentication>

Также я вижу, что вы используете сеансы ASP.NET. Убедитесь, что вы также указали другое имя файла cookie для сеансов:

<sessionState cookieName="SITE1SESSION" ... />

а также:

<sessionState cookieName="SITE2SESSION" ... />
person Darin Dimitrov    schedule 31.01.2016