Совместное использование файла cookie между двумя веб-сайтами в одном домене
Здесь ситуация:
Я пытаюсь передать cookie (проверка подлинности форм) между веб-сайтами.
Я не использую аутентификацию на основе форм. Я использую встроенные методы (Encrypt, Decrypt и т.д.), Но я настраиваю свой собственный файл cookie.
Когда я устанавливаю файл cookie на одном из сайтов, другие видят файл cookie, но не могут его расшифровать. Ошибка - это общая ошибка "Ошибка произошла во время криптографической операции".
Что я обеспечил:
- Файл cookie имеет домен "example.com" (что означает доступ к субдоменам. Доказательство - это то, что другой веб-сайт может "видеть" файл cookie).
- Оба веб-узла используют один и тот же машинный ключ. Web.config для обоих имеет то же значение для decryptionKey и validationKey.
- Версия билета проверки подлинности форм и имя файла cookie одинаковы на обоих сайтах.
- Путь установлен на "/".
Я делал это раньше, и он отлично работает, но в этом сценарии оба приложения используют одну и ту же базу кода.
В этом случае они являются отдельными приложениями. Это связано с тем, что я создаю прототип решения, в котором два независимые от платформы приложения в одном домене верхнего уровня могут совместно использовать файл cookie для проверки подлинности.
Может ли кто-нибудь сказать мне, что мне не хватает, или предоставить альтернативное решение.
Я прочитал все связанные вопросы, но ответ обычно 2) выше.
Ответы
Ответ 1
При создании нового приложения ASP.NET 4.5 (например, ASP.NET MVC 4) в файл web.config добавляется следующая строка:
<httpRuntime targetFramework="4.5" />
Это не было в моем другом приложении, возможно, потому что другим моим приложением было приложение ASP.NET 3.5, которое было обновлено до 4.5.
Удаление этой строки в новом веб-приложении ASP.NET устранило проблему.
Я думаю, что это связано с значением режима совместимости:
http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx
Framework45. Криптографические улучшения для ASP.NET 4.5 действуют. Это значение по умолчанию, если файл приложения Web.config имеет атрибут targetFramework для элемента httpRuntime, установленного на "4.5".
Не уверен, что я понял, как удалить эту проблему. Я предполагаю, что у приложения есть другой режим совместимости, так как у него не было этого элемента httpRuntime
.
Ответ 2
Лучший способ справиться с этим - сделать дешифрование машинного ключа обратно в Framework20SP2
Из этой статьи: http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx
Просто добавьте этот атрибут в машинный ключ в приложение .net 4.5
<machineKey validationKey="" decryptionKey="" validation="SHA1" compatibilityMode="Framework20SP2" />
вам не нужно будет удалить targetFramework = "4.5" из httpruntime сейчас.