Аутентификация форм через субдомены
Возможно ли аутентифицировать пользователей через поддомены, когда проверка подлинности происходит в поддомене вместо родительского домена?
Например:
Пользователь регистрируется на сайте site1.parent.com, а затем нам нужно отправить их на report.parent.com.
Могу ли я аутентифицировать их на сайте отчетности, даже несмотря на то, что регистрация произошла в поддомене?
До сих пор все проведенные мной исследования включали пользователей, которые сначала регистрировались в родительском домене, а затем каждый поддомен имел доступ к файлу cookie аутентификации.
Ответы
Ответ 1
Вы можете установить cookie как родительский домен во время аутентификации, но вы должны явно установить его, по умолчанию будет указан полный домен, в котором вы находитесь.
Как только файл cookie auth будет правильно установлен в родительский домен, тогда все поддомены должны быть в состоянии прочитать его.
Ответ 2
При аутентификации пользователя установите домен cookie аутентификации в домен второго уровня, то есть parent.com. Каждый поддомен будет получать файлы cookie родительского домена по запросу, поэтому возможна аутентификация по каждому из них, так как у вас будет общий cookie файл для проверки подлинности.
Код аутентификации:
System.Web.HttpCookie authcookie = System.Web.Security.FormsAuthentication.GetAuthCookie(UserName, False);
authcookie.Domain = "parent.com";
HttpResponse.AppendCookie(authcookie);
HttpResponse.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(UserName,
False));
Ответ 3
В качестве побочного примечания я обнаружил, что после использования метода jro, который хорошо работал +1, метод FormsAuthenication.SignOut() не работал при вызове из поддомена, отличного от www/. (Я предполагаю, потому что свойство .Domain не соответствует). Чтобы обойти это, я использовал:
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
myCookie.Domain = "parent.com";
myCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(myCookie);
}
Ответ 4
В дополнение к настройке файла cookie для родительского домена также необходимо убедиться, что все сайты (приложения) имеют одинаковое значение validationKey и decryptionKey(), чтобы они все узнавали друг друга и аутентификационный билет и cookie. Довольно хорошая статья здесь http://www.codeproject.com/KB/aspnet/SingleSignon.aspx
Ответ 5
Да, конечно. Возможно, вам придется катиться самостоятельно на некоторых этапах, но это должно быть выполнимо.
Одна идея: когда вы перенаправляете их через границу, дайте им одноразовый маркер прохождения, а затем сообщите получающему поддомену, что они ожидают их (этот пользователь, с этого IP, с этим токеном).
Ответ 6
Jro отвечает отлично. Но обязательно обновите аутентификацию форм webconfig setting "domain"
, в противном случае идентификатор проверки подлинности не будет работать должным образом. Здесь - это проблема с выводом, с которой я столкнулся. Трюк здесь должен иметь. поскольку префикс как домен настроен для файла cookie как ".parent.com" (используйте инспектор файлов cookie).
<authentication mode="Forms">
<forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com" name="FormAuthentication" path="/"/>
</authentication>
Ответ 7
2 дела:
- MachineKey должен быть таким же во всех web.config(основной домен и поддомен (ы))
- Доменное имя AuthenticationCookie должно быть таким же.
Следуйте следующим для большей глубины.