Совместное использование аутентификации между двумя веб-приложениями
У меня есть базовый веб-сайт (приложение 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.
Ответы
Ответ 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"/>