Как создать токен безопасности SAML в том же приложении, которое его использует?

Я настраиваю некоторые из своих приложений для использования Windows Identity Foundation. Я использую пассивное перенаправление для получения токенов безопасности из службы токенов безопасности. Я достиг этого, вставив код WIF в веб-сайт входа в систему, который существовал до того, как я начал использовать WIF, а затем использовал «Добавить ссылку STS» в приложениях.

Однако у меня есть одно приложение, которое не использует веб-сайт входа в систему. Я думаю, что я хотел бы создать токен безопасности в самом приложении, не перенаправляя пользователя на внешнюю STS.

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

Я рассматриваю возможность создания внешней STS, которая будет предоставлять пользователю требования из базы данных, но я вижу в этом опасность. Кажется, нет никаких причин, по которым я должен создавать целую отдельную STS только для одного веб-сайта. Я хотел бы просто создать токен безопасности в своем приложении.


person Vivian River    schedule 12.02.2010    source источник


Ответы (1)


Класс Security Token Service можно поместить в ваше собственное приложение.

Однако, чтобы пользователь мог получить доступ к странице входа в ваше приложение до того, как он получит токен, вы должны удалить deny users=? из раздела Authorization файла web.config. Это позволит пользователям посещать вашу веб-страницу без токена безопасности. Как только они войдут в систему, перенаправьте их на соответствующую страницу.

Недостатком этого решения является невозможность использовать удобную функцию пассивного перенаправления, но оно работает. Это означает, что вы должны вручную перенаправлять пользователей на страницу входа, когда они пытаются сделать что-то, что требует от них входа в систему.

person Vivian River    schedule 19.02.2010
comment
Согласно часто задаваемым вопросам (msdn.microsoft.com/en-us/library/ee748487. aspx) ClaimsAuthenticationManager выполняется для каждого вызова независимо от сеанса, что объясняет поведение, которое вы видите. Встраивание STS прямо в ваше приложение противоречит цели федерации. Похоже, все, что вам действительно нужно, это IClaimsPrincipal, а не обычный принципал. Предполагая, что это так, возможно, было бы проще использовать обычную проверку подлинности с помощью форм и иметь пользовательский HttpModule, который регидратирует утверждения на основе токена проверки подлинности форм. - person Travis Illig; 27.08.2010