Как определить федеративное удостоверение из элемента управления federatedpassivesignin, если пользователь вошел в систему на STS

Привет, я использую FederatedPassiveSignInControl на своем сайте asp.net (под названием ChildSite), чтобы получить удостоверение пользователя от STS, настроенного на другом сайте asp.net (под названием ParentSite). Для проверки подлинности моего сайта (ChildSite) установлено значение FormsAuthentication, поэтому FederatedPassiveSignInControl находится на странице входа в систему проверки подлинности форм ChildSite.

У меня есть 2 сценария. В первом пользователь входит в ParentSite и переходит на ChildSite по ссылке в ParentSite. Во втором случае пользователь переходит непосредственно на ChildSite и авторизуется на ChildSite:

Сценарий 1:

  1. Пользователь открывает ParentSite в браузере
  2. Пользователь входит в ParentSite
  3. ParentSite отображает ссылку на ChildSite в браузере
  4. Пользователь нажимает ссылку на ChildSite
  5. Пользователь переходит на дочерний сайт

Здесь пользователь попадает на страницу авторизации. Требуемое поведение заключается в том, что пользователь плавно перенаправляется на запрошенный URL-адрес в ChildSite, поскольку он уже выполнил вход в ParentSite.

Вместо этого отображается страница входа, и пользователь должен нажать кнопку FedratedPassiveSigninControl, чтобы восстановить свою личность, а затем быть перенаправленным. Я не могу установить для свойства FedratedPassiveSigninControl autosignin="true". Он всегда будет перенаправлять пользователя на ParentSite, если он не вошел в систему, и это нарушит сценарий 2.

Интересно, как я обнаруживаю или как заставить FederatedPassiveSignin Control (или другие компоненты WIF) обнаруживать, что пользователь уже вошел в систему, не показывать FedratedPassiveSigninControl и просто перенаправлять пользователя на запрошенную им страницу.

Сценарий 2:

  1. Пользователь открывает ChildSite в браузере
  2. Пользователь вводит учетные данные в текстовые поля на ChildSite и нажимает «Войти».
  3. Отображается запрошенная страница на ChildSite.

Я что-то упустил здесь?

Ура, mortb


person mortb    schedule 28.06.2012    source источник
comment
Используя FBA на ChildSite, в каком хранилище учетных данных вы выполняете аутентификацию? Это то же хранилище учетных данных, которое использует ParentSite? Если это то же самое, почему ChildSite не может просто использовать WIF для вызова обычного экрана входа в систему STS?   -  person rbrayb    schedule 29.06.2012


Ответы (2)


Самым простым подходом было бы добавить дополнительный параметр строки запроса к вашему 4-му шагу в Сценарии 1, чтобы, когда вы наконец попадете на страницу входа, у вас было «если»: «если параметр строки запроса присутствует, то AutoSignIn = true».

Это известно как «обнаружение домашней области», хотя ваш сценарий не типичен, поскольку hrd обычно включает два или более stses, и здесь вы должны различать аутентификацию sts и форм.

person Wiktor Zychla    schedule 28.06.2012
comment
Где я должен изменить свойство автоподписи? Например: Должен ли я проверить параметр QueryString (я думаю вместо этого использовать cookie :), а затем установить autosignin = true, если параметр присутствует (и является истинным)? - person mortb; 06.07.2012
comment
Page_Load в порядке, все элементы федерации выполняются позже. - person Wiktor Zychla; 06.07.2012
comment
Я хотел бы поделиться открытием, которое я сделал по волшебному совпадению: добавляя параметр строки запроса с именем returnurl=‹что угодно› при первом доступе к ChildSite (когда вы перенаправляетесь с родительского сайта), вы будет автоматически отправлен на ParentSite для проверки подлинности вместо ChildSite, даже если проверка подлинности с помощью форм включена в ChildSite. Чтобы это работало, у вас должен быть параметрpassRedirectEnabled=true в вашей веб-конфигурации. Мы добавили этот параметр к нашему URL-адресу, чтобы иметь возможность перенаправлять с ChildSite обратно на ParentSite (нажимая кнопки и т. Д.), Но оказалось, что он также выполняет аутентификацию! - person mortb; 06.07.2012

Это похоже на классический сценарий единого входа. ParentSite и ChildSite, вероятно, должны быть двумя разными проверяющими сторонами. Если пользователь переходит на ParentSite, то всякий раз, когда он попадает на защищенный ресурс (все, что требует аутентификации пользователя), он будет перенаправлен на STS для аутентификации. Между службой STS и браузером пользователя устанавливается сеанс, после чего пользователь возвращается на ParentSite с действительным токеном (предполагая «счастливый путь»).

Когда они попадут на защищенный ресурс на ChildSite (например, по ссылке на ParentSite), они будут снова перенаправлены на STS (например, они будут запрашивать токен специально для ChildSite, второй проверяющей стороны). На этот раз, поскольку сеанс с STS уже есть, этап аутентификации уже завершен, и выдается второй токен. Все это работает без проблем для пользователя.

В этой главе «Руководства по претензиям» рассматривается следующий сценарий: http://msdn.microsoft.com/en-us/library/ff359102

Дополнительное примечание: учетные данные нужно вводить не на каком-либо из сайтов, а в СТС.

person Eugenio Pace    schedule 28.06.2012
comment
Насколько я понял, ParentSite - это STS. Его проблема в том, что ParentSite ЯВЛЯЕТСЯ STS, но ChildSite может работать как с федеративной аутентификацией, так и с аутентификацией на основе форм. Это не классический сценарий, так как классический предполагает делегирование аутентификации, а не делегирование, а иногда нет. - person Wiktor Zychla; 28.06.2012
comment
Да, я чувствую, что это не стандартная архитектура. Если бы у меня было время, я бы переписал аутентификацию в ChildSite, сделав ее более общей, но в этом задействовано много кода... - person mortb; 29.06.2012
comment
В такой архитектуре нет ничего плохого. Я использую его в течение некоторого времени, с той лишь разницей, что на странице входа есть явные элементы управления FederatedPassiveSignIn — три, если быть точным. Однако остальная часть точно такая же, как та, которую вы описываете - я вхожу либо с аутентификацией внутренних форм, либо с одной из трех внешних stses. - person Wiktor Zychla; 29.06.2012