Я пытаюсь настроить SSO на двух отдельных веб-сайтах IIS (с общим доменом) с использованием проверки подлинности с помощью форм. Я использую общий подход для установки файла cookie auth в общий домен и с помощью соответствующего машинного ключа для включения дешифрования.Аутентификация форм SSO - Почему User.Identity.IsAuthenticated == false
Это работает без проблем на тестовых площадках, которые я создал. Однако при попытке реализовать это на устаревшем веб-сайте Forms я сталкиваюсь с тем, чего я не понимаю.
При входе в один сайт, тестовый код на втором месте имеет следующие результаты:
var cookie = FormsAuthentication.GetAuthCookie("username", false); // works
var ft = FormsAuthentication.Decrypt(cookie.Value); // returns correct info
var isAuthentication = User.Identity.IsAuthenticated; // false
В качестве дополнительного бонуса, всякий раз, когда я подписываю в одном месте другой получает выписался (происходит в обоих направлениях .)
Должно быть что-то фундаментальное, что мне здесь не хватает.
Почему является User.Identity.IsAuthenticated
набор для false
, даже если билет FormsAuthentication, кажется, дешифрование без проблем?
ОБНОВЛЕНИЕ: как указано ниже - FormsAuthentication.GetAuthCookie
не является допустимым способом получения существующего файла cookie. Который подводит меня к этому: я могу видеть файл cookie верхнего домена в браузере, но он не отображается в запросе. Я подозреваю, что это проблема.
Решение: Оба сайта не целились ту же версию .Net Framework, как указано в web.config:
<httpRuntime targetFramework="4.5" />
<compilation debug="true" targetFramework="4.5" />
Обновление обоих сайтов для нацеливания же рамки фиксированной проблемы.
этот поток может помочь http://stackoverflow.com/questions/30091530/request-isauthenticated-always-returning-false –