Разбор значения wresult без WSFederationAuthenticationModule

При возврате из Azure ACS я получаю результат проверки подлинности федерации внутри FormCollection. Значение, содержащее нужную мне информацию, находится внутри зашифрованного значения, которое называется «результат». У меня возникли проблемы с расшифровкой этого значения, чтобы использовать его для дальнейшей аутентификации.

Я не хочу использовать WSFederationAuthenticationModule, потому что я не разрешаю установку файлов cookie. Когда модуль используется, он автоматически устанавливает файлы cookie авторизации с типом Federated-Authentication.

Вместо этого я хочу получить утверждения, содержащиеся в wresult, а затем установить свой собственный токен безопасности (будь то JWT, SAML 2.0 или что-то еще).

Единственный возможный обходной путь, который я нашел до сих пор, — это использовать FAModule, а затем сразу же удалить файл cookie токена сеанса. Но это приведет к тому, что auth-cookies будут установлены дважды в ответе, со значением и сразу же отключены.

В конечном итоге я хочу добиться следующего: Предоставление возможности аутентификации с помощью сайта форм или аутентификации с использованием любого поставщика удостоверений в Azure ACS. Используя проверку подлинности с помощью форм, я могу сразу же сравнить имя пользователя и пароль и установить токен безопасности с любыми утверждениями, которые я хочу иметь. Но при использовании Azure ACS я хочу сначала сравнить полученный идентификатор имени с сохраненными значениями в моей базе данных, а затем установить свой собственный токен безопасности вместо маркера федерации WS. Или, если идентификатор имени неизвестен, я хочу перенаправить на страницу форм, где пользователь может аутентифицировать этот идентификатор имени с помощью своих учетных данных. Я не хочу, чтобы возвращаемое azure ACS значение рассчитывалось как прошедшее проверку подлинности.


person user1908061    schedule 16.12.2012    source источник


Ответы (2)


Вам не нужно регистрировать FAM, но вы все равно можете использовать его вспомогательные методы (например, GetSignInResponseMessage()) для анализа ответного сообщения о входе от ACS.

Это дает вам доступ к сведениям о протоколе и возвращенному токену безопасности без использования системы файлов cookie WIF.

person leastprivilege    schedule 20.12.2012

Вместо того, чтобы изменять обработку файлов cookie по умолчанию WSFederatedAuthenticationModule, я бы предложил альтернативную настройку:

  1. Создайте и разместите свой собственный поставщик удостоверений подлинности на основе форм STS. Есть несколько хороших опций, которые помогут настроить это.
  2. Настройте новый IP STS в ACS
  3. Используйте страницу входа ACS по умолчанию (страница обнаружения домашней области) или настройте свою собственную.

Теперь вашим пользователям будет предложено выбрать поставщика удостоверений, с которым они хотят пройти аутентификацию. Если они выберут ваш, после ввода имени пользователя/пароля ваш IP-адрес отправит идентификатор имени в ACS, который, в свою очередь, отправит его на веб-сайт вашей проверяющей стороны. То же самое произойдет, если вы добавите Google в качестве поставщика удостоверений. Преимущество заключается в том, что ваш RP не должен вести себя по-разному в зависимости от того, с какого IP-адреса пользователь вошел в систему, но если вы хотите настроить какое-либо поведение на основе IP-адреса, эта информация доступна в токене, выданном ACS.

Кроме того, если вы хотите использовать токены JWT вместо SAML, вы можете настроить ACS для их выдачи со страницы вашей проверяющей стороны на портале ACS (хотя это помечено как бета-функция).

person Andrew Lavers    schedule 18.12.2012
comment
Я не понимаю, как это может мне помочь. Непосредственно на первой странице я хочу иметь возможность аутентифицироваться с паролем/именем пользователя моей базы данных, а не выбирать IP-адрес из моего ACS. И как мне сразу же внедрить свои пользовательские утверждения в другие STS, такие как Live или Google? - person user1908061; 19.12.2012
comment
Посмотрите на шаг №3. Ваша страница входа не обязательно должна быть селектором IP, вы можете сделать ее какой угодно, например, включить форму входа в базу данных с именем пользователя/паролем. Кроме того, вы не будете сразу вводить пользовательские утверждения в токены из других STS, но вы должны настроить правила в ACS, чтобы поместить утверждения в токен, который ваш сайт получает от ACS. msdn.microsoft.com/en-us/library/gg185955.aspx - person Andrew Lavers; 19.12.2012