Подтвердить что ты не робот

Аутентификация форм через субдомены

Возможно ли аутентифицировать пользователей через поддомены, когда проверка подлинности происходит в поддомене вместо родительского домена?

Например:

Пользователь регистрируется на сайте site1.parent.com, а затем нам нужно отправить их на report.parent.com.

Могу ли я аутентифицировать их на сайте отчетности, даже несмотря на то, что регистрация произошла в поддомене?

До сих пор все проведенные мной исследования включали пользователей, которые сначала регистрировались в родительском домене, а затем каждый поддомен имел доступ к файлу cookie аутентификации.

4b9b3361

Ответ 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 должно быть таким же.

Следуйте следующим для большей глубины.