Вопрос

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

Например:

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Когда вы аутентифицируете пользователя, установите домен файла 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));

В качестве дополнительного примечания, я обнаружил, что после использования метода 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);
            }

В дополнение к установке cookie для родительского домена также необходимо убедиться, что все сайты (приложения) имеют одинаковые validationKey и decryptionKey (), чтобы все они распознали билет аутентификации и cookie друг друга.Довольно хорошая статья здесь http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

Да, конечно.Возможно, вам придется создать свой собственный на некоторых этапах, но это должно быть выполнимо.

Одна идея:когда вы перенаправляете их через границу, предоставьте им токен одноразового прохождения, а затем сообщите принимающему поддомену ожидать их (этого пользователя, с этого IP, с этим токеном).

Ответ Джро работает нормально.Но обязательно обновите проверку подлинности webconfig forms setting "domain" , в противном случае формы аутентификации для выхода из системы не будут работать должным образом. Здесь это проблема с выходом из системы, с которой я столкнулся.Хитрость здесь в том, чтобы использовать '.' в качестве префикса, поскольку домен задан для файла cookie как ".parent.com" (используйте инспектор файлов cookie).

<authentication mode="Forms">          
      <forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com"  name="FormAuthentication" path="/"/>
    </authentication>

2 вещи, которые нужно сделать:

  1. machineKey должен быть одинаковым во всех web.config (основном домене и поддоменах).
  2. Доменное имя AuthenticationCookie должно быть таким же.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top