Как получить SSO на сайте B с сайта A с помощью WIF и поставщика STS

Итак, вот установка. У меня есть поставщик STS и два сайта ASP.NET MVC, оба которых доверяют одному и тому же поставщику STS. Пользователь приходит на сайт A и перенаправляется на пассивный вход в систему поставщика STS, правильно аутентифицируется и перенаправляется обратно на сайт «A», как и ожидалось. Все это отлично работает. Я вижу токен и личность в коде на сайте «А», используя следующее:

IClaimsPrincipal claimsPrincipal = Thread.CurrentPrincipal as IClaimsPrincipal;
IClaimsIdentity claimsIdentity = (IClaimsIdentity)claimsPrincipal.Identity;

Теперь на сайте "А" есть ссылка на сайт "Б", которая использует тот же поставщик STS. Проблема заключается в том, что когда я перехожу на сайт «B», информация о претензии отсутствует, и пользователь не проходит автоматическую проверку подлинности. Согласно документации STS и WIF должно произойти следующее:

"Процесс начинается как обычно, пользователь запрашивает страницу у B на сайте A и перенаправляется на STS для получения токена. Однако на этот раз пользователь уже аутентифицирован на сайте STS, потому что является активным сеансом, представленным файлом cookie STS. Это означает, что запрос страницы STS ведет прямо к выполнению последовательности выдачи SecurityTokenService, не показывая пользователю какой-либо пользовательский интерфейс для сбора учетных данных. Токен выдается автоматически и пересылается на Б в обычной последовательности. С того момента, как пользователь перейдет по ссылке на Б и браузер отобразит запрошенную страницу с Б, только некоторое мерцание адресной строки в браузере даст тот факт, что какая-то аутентификация происходила под капотом.Во многом это и означает единый вход (SSO): пользователь прошел процедуру входа только один раз, и с этого момента система может получить доступ к другие надежные стороны без повторного запроса учетных данных пользователя».

Кто-нибудь знает, что должно произойти в поставщике STS, сайте A или сайте B, чтобы это работало правильно? Помните, что STS и сайт «А» работают отлично; просто сайт "B" не получает возможности SSO.

Спасибо!


person atconway    schedule 04.10.2012    source источник
comment
Так что же происходит, когда пользователи переходят к B?   -  person Wiktor Zychla    schedule 05.10.2012


Ответы (1)


Да, вы должны получить SSO.

Используя термины ADFS, я предполагаю, что вы использовали FedUtil и A, и B с STS, и настроили A и B на STS как проверяющие стороны с практически одинаковой конфигурацией? Я предполагаю, что вы сравнили как A, так и B web.config?

Удалите все ваши файлы cookie — я считаю, что FireFox делает это лучше всего.

Перейдите напрямую к B. Что произойдет?

  • Экран входа в STS?
  • Экран входа в FBA?
  • Ничего - просто идет прямо к B?

Если экран входа в STS, что происходит, когда вы проходите аутентификацию, а затем переходите к A?

Если ничего, защищена ли целевая страница на B?

person rbrayb    schedule 05.10.2012
comment
Я предполагаю, что вы FedUtil объединили A и B с STS и настроили A и B на STS как проверяющие стороны с практически одинаковой конфигурацией? Я предполагаю, что вы сравнивали web.config A и B? Что-то в предыдущем утверждении было виновником — оно работает так, как описано в документации, но очень важно, чтобы вся разбросанная конфигурация была правильной и применимой к этому конкретному приложению (может не просто копировать и вставлять все, очевидно). Благодарю за ваш ответ. - person atconway; 08.10.2012