Разбор значения 'wresult' без WSFederationAuthenticationModule
Возвращаясь из Azure ACS, я получаю результат проверки подлинности федерации внутри FormCollection. Значение, содержащее нужную мне информацию, находится внутри зашифрованного значения, называемого "wresult". У меня проблемы с расшифровкой этого значения, чтобы использовать его для дальнейшей аутентификации.
Я не хочу использовать WSFederationAuthenticationModule, потому что я не авторизую куки для установки. Когда модуль используется, он автоматически устанавливает auth-cookie с типом Federated-Authentication.
Вместо этого я хочу получить утверждения, содержащиеся в wresult, а затем установить свой собственный токен безопасности (будь то JWT, SAML 2.0 или любой другой).
Единственный возможный обходной путь, который я нашел до сих пор, - это использовать FAModule, а затем сразу же удалить cookie с маркером сессии. Но это приведет к тому, что auth-cookies будут установлены дважды в ответе, и значение сразу же будет сброшено.
В конечном итоге я хочу добиться следующего: предоставить возможность аутентификации на сайте форм или аутентификации с использованием любого поставщика удостоверений в Azure ACS. Используя аутентификацию по формам, я могу сразу сравнить имя пользователя и пароль и установить маркер безопасности с любыми утверждениями, которые я хочу получить. Но при использовании Azure ACS я хочу сначала сравнить извлеченный nameidentifier с сохраненными значениями в моей базе данных, а затем установить свой собственный токен безопасности вместо федеративного WS. Или, если nameidentifier неизвестен, я хочу перенаправить на страницу форм, где пользователь может аутентифицировать этот nameidentifier со своими учетными данными. Я не хочу, чтобы возвращаемое значение Azure ACS вычислялось как аутентифицированное.
2 ответа
Вам не нужно регистрировать FAM - но вы все равно можете использовать его вспомогательные методы (например, GetSignInResponseMessage()) для анализа ответного сообщения о входе из ACS.
Это дает вам доступ к деталям протокола и возвращенному токену безопасности без использования файлов cookie WIF.
Вместо того, чтобы изменять обработку куки-файлов по умолчанию в WSFederatedAuthenticationModule, я бы предложил альтернативную настройку:
- Создайте и разместите свои собственные службы проверки подлинности на основе форм STS. Есть несколько хороших опций, которые помогут настроить это.
- Настройте свой новый IP STS в ACS
- Используйте страницу входа по умолчанию в ACS (домашнюю страницу обнаружения областей) или настройте свою собственную.
Теперь вашим пользователям будет предложено выбрать поставщика удостоверений, с которым они будут проходить аутентификацию. Если они выберут ваше имя, то после ввода имени пользователя / пароля ваш IP отправит идентификатор идентификатора в ACS, который, в свою очередь, отправит его на веб-сайт вашей проверяющей стороны. То же самое происходит, если вы добавите Google в качестве поставщика удостоверений. Преимущество заключается в том, что RP не должен вести себя по-разному в зависимости от того, с какого IP-адреса вошел пользователь, но если вы хотите настроить некоторые действия на основе IP-адреса, эта информация будет доступна в токене, выданном ACS.
Кроме того, если вы хотите использовать токены JWT вместо SAML, вы можете настроить ACS для их выдачи со страницы проверяющей стороны на портале ACS (хотя это помечено как бета-функциональность).