WIF - дополнительная аутентификация - PullRequest
1 голос
/ 15 июля 2011

Я работаю над приложением для проверки концепции.Работает базовая функциональность, когда я могу войти на один сайт, перейти на другой сайт, на котором используется тот же STS, и партнерский сайт правильно подбирает учетные данные.Однако партнерский сайт запрашивает токен только в том случае, если для страницы, на которую мы ссылаемся, требуется аутентификация (что, я думаю, имеет смысл).

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

Я попытался поиграться с событиями SecurityTokenReceived и RedirectingToIdentityProvider, нопока я в тупике.

Любые мысли приветствуются.

1 Ответ

1 голос
/ 29 июля 2011

Итак, проблема, с которой вы сталкиваетесь, связана с обработкой SessionAuthenticationModule перехвата запроса.Этот модуль отвечает за определение наличия у пользователя действительного сеанса (на основе файла cookie, который записывается при успешном перенаправлении с STS) и, если нет, за перенаправление пользователя на STS для получения действительного токена. WSFederationAuthenticationModule предоставляет события, необходимые для подключения к различным этапам процесса перенаправления / аутентификации.

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

  1. Пользователь нажимает на ссылку, которая перенаправляет на сайт партнера
  2. У партнерана сайте, запрос перехватывается, и система определяет, вошел ли пользователь в STS или анонимно
  3. Если у пользователя есть действительный сеанс с STS, то запросите права для этого пользователя

Проблема в том, что ваш RP не может знать, что у пользователя есть действительный сеанс без предварительной отправки пользователя в STS (RP не общаются друг с другом или STS. Браузер пользователя используется как средствосвязь между RP и STS в форме директив WS-Fed и токенов SAML, передаваемых в URL во время перенаправлений).Если пользователь отправляется в STS, он должен пройти аутентификацию, что может быть проблемой для анонимных пользователей.

Итак, я не думаю, что есть «хитрость», которую вы можете использовать посредством конфигурации или перехвата запроса, чтобы определить, имеет ли пользователь допустимый сеанс с STS.Однако вы можете передать подсказку от реферера, перехваченного партнерским сайтом.Эта подсказка может принимать форму параметра в URL-адресе, который указывает партнерскому сайту, что текущий пользователь имеет допустимый сеанс, а также для продолжения и перенаправления на STS (отсутствие этой подсказки указывает на анонимного пользователя).Вы также можете создать систему для «передачи» знаний о вошедшем в систему пользователе, используя ресурс, к которому имеют доступ оба сайта (т.е. база данных).

Как вы наверняка узнаете в ближайшее время, чаще всего WIF предлагает кусочки головоломки, но каждая ситуация отличается, и вы должны предоставить другие кусочки самостоятельно.

Надеюсь, это поможет!

...