Проблема с проверкой подлинности с помощью форм единого входа. Невозможно расшифровать файл cookie аутентификации

Я пытаюсь разработать аутентификацию SSO между двумя веб-приложениями, приложением A и приложением B. Приложение A - это приложение MVC 4, а приложение B - приложение MVC 3.

Что должно произойти:

  1. Когда пользователь пытается получить доступ к приложению B, он будет перенаправлен на страницу входа в приложение A.
  2. После того, как он войдет в приложение A, он будет перенаправлен в приложение B

На самом деле происходит следующее:

  1. Пользователь пытается получить доступ к приложению B, он перенаправляется в приложение A для входа в систему.
  2. Пользователь входит в приложение A, он перенаправляется в приложение B
  3. Здесь что-то не так, потому что приложение B перенаправляет пользователя обратно в приложение A для входа в систему, как если бы он еще не вошел в систему

Я проделал следующие шаги, чтобы понять, что не так:

  1. Подтверждено, что файл cookie аутентификации передается приложению B
  2. Подтверждено, что ключ проверки и дешифрования машинного ключа одинаков для обоих приложений в web.config
  3. Подтверждено, что enableCrossAppRedirects включен в web.config
  4. Я использовал код из этого сообщения на форуме, чтобы узнать, могут ли оба приложения расшифровать файл cookie аутентификации: http://forums.asp.net/t/1762166.aspx/1
  5. Файл cookie аутентификации успешно расшифровывается в приложении A, но не в приложении B. Приложение B выдает исключение «Невозможно проверить данные» во время метода FormsAuthentication.Decrypt

Кто-нибудь может мне с этим помочь? Почему расшифровка не удалась, даже если они использовали один и тот же машинный ключ? Могу ли я по-прежнему полагаться на этот метод аутентификации? Потому что в этой статье говорится, что это уже ненадежно. http://blog.appharbor.com/2012/02/22/asp-net-forms-authentication-considered-broken

Спасибо!


person Adelia Benalius    schedule 28.12.2012    source источник
comment
Как вы передаете cookie от A к B? Я предполагаю, что они находятся в разных доменах?   -  person Paul Fleming    schedule 28.12.2012
comment
нет, он находится в одном домене, но в разных веб-приложениях. файл cookie автоматически передается браузером в заголовке запроса.   -  person Adelia Benalius    schedule 28.12.2012
comment
Как это: app.com/a/login и app.com/b/login?   -  person Paul Fleming    schedule 28.12.2012
comment
нет, domain.com/appA и domain.com/appB. Пользователь должен быть перенаправлен на domain.com/appA/Login, когда он пытается получить доступ к domain.com/appB   -  person Adelia Benalius    schedule 28.12.2012
comment
Используйте одно и то же имя для обоих файлов cookie. ‹Имя формы = .MYAPP /›   -  person Adriano Silva    schedule 28.12.2012


Ответы (1)


Уф .. наконец нашел проблему. Проблема заключалась в том, что приложение A нацелено на .NET Framework 4.5, а приложение B на .NET Framework 4.

Я подозревал это раньше, но, видимо, изменить целевую структуру в Project Properties недостаточно. Вы должны добавить этот <httpRuntime targetFramework="4.5"/> в приложение B web.config, чтобы оно работало.

person Adelia Benalius    schedule 28.12.2012