Подтвердить что ты не робот

Совместное использование аутентификации между двумя веб-приложениями

У меня есть базовый веб-сайт (приложение Asp.net WebForms), работающее под тем.

http://localhost:90/

Затем я создал новое (это приложение Asp.net MVC) и добавил его под

http://localhost:90/mvc/

но не просто как простая виртуальная папка, а как папка приложения, указав другой пул приложений для ее запуска по сравнению с родительским приложением.

Поскольку браузеры не могут знать, что есть два разных приложения в основном в одном домене, он будет работать следующим образом:

  • пользователь обращается к http://localhost:90/
  • родительское приложение перенаправляет пользователя на экран проверки подлинности
  • пользователь успешно зарегистрировался в
  • родительский веб-сайт добавляет файл cookie для проверки подлинности
  • пользователь обращается к http://localhost:90/mvc
  • браузер прикрепляет тот же файл cookie из родительского приложения

Возможно ли, чтобы я аутентифицировал пользователя на основе этого же файла cookie? Я бы настроил мое приложение MVC для переадресации имени в родительское приложение, чтобы иметь общий экран проверки подлинности. Но я хотел бы знать, кто аутентифицирован и работает с этого момента.

Я прочитал кое-что о том, чтобы использовать одни и те же значения system.web/machineKey, чтобы обеспечить такую ​​функциональность, но мне бы хотелось, чтобы некоторые примеры в реальном мире.

Я знаю, что эти два приложения не смогут делиться состоянием сеанса, и это не проблема, потому что я не хочу их. Все, что я хочу, это своего рода единый логин (SSO/SSS)

Возможно ли это? Как?

Внимание!

Я читал другие вопросы/ответы об этом, но они либо спрашивают о междоменном/кросс-сервере и т.д. Это один и тот же веб-сайт IIS.

4b9b3361

Ответ 1

Я нашел его сам.

Это статья о MSDN, которая говорит именно об этом сценарии. Я решил оставить этот вопрос в любом случае для тех, кто некоторое время спустя будет преследовать одну и ту же информацию.

MSDN: Аутентификация форм во всех приложениях

Вкратце

Вам нужно настроить машинные ключи в web.config обоих приложений, чтобы они соответствовали друг другу, поэтому они смогут декодировать данные, созданные другой стороной. И это весь трюк. В статье MSDN это подробно объясняется, в том числе, как сгенерировать эти ключи.

Ответ 2

Если в случае, если кто-либо еще не может использовать ключи, используйте compatibilityMode="Framework20SP1"

<machineKey validationKey="same key all over" 
            decryptionKey="same key all over" 
            validation="SHA1" decryption="AES"
            compatibilityMode="Framework20SP1"/>