У меня есть 2 веб-сайта, первый myFirst.domain.com
, а второй mySecondSite.domain.com
.
Они остаются на двух разных веб-серверах, и моя цель — разрешить межсайтовую аутентификацию (моей реальной потребностью является общий FormsAuthentication
файл cookie).
Я правильно настроил свой файл web.config
(узел машинного ключа, узел форм). Единственная разница заключается в loginUrl, где на myFirstSite отображается как ~/login.aspx
, а на mySecondSite — как http://myFirstSite.com/login.aspx
.
Обратите внимание, что у меня нет виртуального каталога, у меня всего 2 разных веб-приложения.
Проблема: когда я перехожу на страницу входа в myFirstSite с mySecondSite, меня никогда не перенаправляют со страницы входа, кажется, что файл cookie не записывается.
Ниже приводится несколько фрагментов по этой проблеме:
Мой первый сайт:
<machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES" />
<authentication mode="Forms">
<forms loginUrl="login.aspx" name="authCookie" enableCrossAppRedirects="true"></forms>
</authentication>
<authorization>
<deny users="?" />
<allow users="*"/>
</authorization>
Код MyFirstSite позади:
FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, "userName..", DateTime.Now, DateTime.Now.AddMinutes(30), true, "roles..");
string ticket = FormsAuthentication.Encrypt(fat);
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticket);
authCookie.Expires = fat.Expiration;
authCookie.Domain = "myDomain.com";
Response.Cookies.Add(authCookie);
//Here is other stuff about querystring checking in order to execute exact redirect, however it's not working, I always return to the login page.
Мой второй сайт:
<machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES"/>
<authentication mode="Forms">
<forms loginUrl="http://myFirstSite.domain.com/login.aspx?queryStringToIndicateUrlPage" enableCrossAppRedirects="true"></forms>
</authentication>
<authorization>
Ну вот и все. К сожалению, это не работает.
Пожалуйста, не обращайте внимания на queryStringToIndicateUrlPage
, это всего лишь простой обходной путь, чтобы узнать, должен ли я перенаправлять на то же приложение или на другое.