Проверка подлинности формы для нескольких приложений
Мы пытаемся использовать аутентификацию между двумя приложениями на наших ПК (Windows 7, IIS 7.5), и все идет хорошо. Но проблема в том, что когда мы пытаемся опубликовать эти сайты (веб-сервер Windows 2008, IIS 7.0), перекрестная аутентификация не работает!!
После долгого расследования мы обнаружили, что ошибка произошла в следующем коде, который находится на втором сайте:
Dim formsCookie As HttpCookie = Request.Cookies(FormsAuthentication.FormsCookieName)
If (formsCookie IsNot Nothing) Then
Else
' always null
Мы попытались проверить такие патчи в коде:
Dim ticket As New FormsAuthenticationTicket(1, smsProfile, DateTime.Now, _
DateTime.Now.AddDays(1), True, AdminSessions.UserObj.Pid, _
FormsAuthentication.FormsCookiePath)
Dim hash As String = FormsAuthentication.Encrypt(ticket)
Dim cookie As New HttpCookie(
FormsAuthentication.FormsCookieName,
hash)
If (ticket.IsPersistent) Then
cookie.Expires = ticket.Expiration
End If
Response.Cookies.Add(cookie)
Response.Redirect(smsPortal)
в web.config:
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" enableCrossAppRedirects="true" domain="mydomain.com.jo" loginUrl="http://..." protection="All" path="/"/>
</authentication>
Пожалуйста, сообщите нам, в чем разница между IIS в локальном ПК и сервере.
Благодарю.
1 ответ
Весьма вероятно, что браузер не отправляет куки-файл аутентификации с первого сайта на второй. Проверьте путь к cookie и домен. Оба сайта должны находиться в одном домене, а путь к файлам cookie должен иметь общий корень.
Смотрите эту ссылку для более подробной информации: домены cookie и пути
Чтобы помочь в устранении неполадок, используйте утилиту, такую как Fiddler или Firebug, чтобы просмотреть файлы cookie, отправляемые в запросе, и убедитесь, что файл cookie проверки подлинности, установленный сайтом 1 (где пользователь вошел в систему), также отправляется на сайт 2.
Если сайты не находятся на одном и том же сервере, также проверьте, используют ли они одинаковую конфигурацию machineKey.