2014-01-16 1 views
2

Я пытаюсь настроить 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" /> 

Обновление обоих сайтов для нацеливания же рамки фиксированной проблемы.

+0

этот поток может помочь http://stackoverflow.com/questions/30091530/request-isauthenticated-always-returning-false –

ответ

2

GetAuthCookie создает новый печенье:

http://msdn.microsoft.com/en-us/library/vstudio/3fay1e4k(v=vs.100).aspx

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

Не удивительно, что он работает, он не смотрит в существующих кук.

Моя теория заключается в том, что у вас есть новые сайты на машине x64, а устаревший веб-сайт находится на x86. Шифрование отличается таким сценарием, даже если ключи одинаковы. Другой возможной причиной является другая версия .net, поскольку алгоритм шифрования был изменен в .net 4.

+0

Я не понимал, что он не читает существующие файлы cookie, спасибо. Что касается второй части, оба сайта находятся на одной машине, поэтому я не думаю, что это проблема - хотя они могут использовать другую версию .Net –

+0

Да, алгоритм шифрования был изменен в .net 4. –

+0

+1 для указания меня в правильном направлении. Проблема возникает даже между сайтами 4.0 и 4.5 (указанными тегами HttpRuntime и 'Compilation' в' web.config') –

 Смежные вопросы

  • Нет связанных вопросов^_^