Итак, проблема, с которой вы сталкиваетесь, связана с обработкой SessionAuthenticationModule перехвата запроса.Этот модуль отвечает за определение наличия у пользователя действительного сеанса (на основе файла cookie, который записывается при успешном перенаправлении с STS) и, если нет, за перенаправление пользователя на STS для получения действительного токена. WSFederationAuthenticationModule предоставляет события, необходимые для подключения к различным этапам процесса перенаправления / аутентификации.
Исходя из вашего описания, звучит так, будто вы хотите, чтобы произошло следующее:
- Пользователь нажимает на ссылку, которая перенаправляет на сайт партнера
- У партнерана сайте, запрос перехватывается, и система определяет, вошел ли пользователь в STS или анонимно
- Если у пользователя есть действительный сеанс с STS, то запросите права для этого пользователя
Проблема в том, что ваш RP не может знать, что у пользователя есть действительный сеанс без предварительной отправки пользователя в STS (RP не общаются друг с другом или STS. Браузер пользователя используется как средствосвязь между RP и STS в форме директив WS-Fed и токенов SAML, передаваемых в URL во время перенаправлений).Если пользователь отправляется в STS, он должен пройти аутентификацию, что может быть проблемой для анонимных пользователей.
Итак, я не думаю, что есть «хитрость», которую вы можете использовать посредством конфигурации или перехвата запроса, чтобы определить, имеет ли пользователь допустимый сеанс с STS.Однако вы можете передать подсказку от реферера, перехваченного партнерским сайтом.Эта подсказка может принимать форму параметра в URL-адресе, который указывает партнерскому сайту, что текущий пользователь имеет допустимый сеанс, а также для продолжения и перенаправления на STS (отсутствие этой подсказки указывает на анонимного пользователя).Вы также можете создать систему для «передачи» знаний о вошедшем в систему пользователе, используя ресурс, к которому имеют доступ оба сайта (т.е. база данных).
Как вы наверняка узнаете в ближайшее время, чаще всего WIF предлагает кусочки головоломки, но каждая ситуация отличается, и вы должны предоставить другие кусочки самостоятельно.
Надеюсь, это поможет!