Аутентификация в STS с помощью выданного токена

Я работаю над федерацией приложения с различными областями и чрезвычайно точными разрешениями. Каждая из различных областей имеет федеративную конечную точку WCF для обратной связи с сервером. Из-за мелкозернистых разрешений один токен, содержащий все разрешения, может иметь размер до 1 МБ, а может и больше.

Требования диктуют, что учетные данные пользователя и пароль не должны храниться в нашей кодовой базе после первоначального процесса входа в систему. Разрешения не могут быть объединены для создания меньшего набора. Мы используем Thinktecture.IdentityServer для нашей реализации STS.

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

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

Можно ли настроить STS, чтобы разрешить аутентификацию, предоставив ранее выпущенный токен из определенной области? Есть ли лучшее решение, которого я не нашел?


person psaxton    schedule 06.08.2013    source источник


Ответы (2)


Да, вы можете пройти аутентификацию в службе STS A с помощью токена, выданного службой STS B. Служба STS A должна быть настроена так, чтобы она доверяла STS B как известному поставщику удостоверений.

Я думаю, что с thinktecture STS это можно сделать, настроив нового поставщика удостоверений WSStar. Если одна служба STS области добавляет другую область STS в качестве поставщика удостоверений, она должна начать принимать маркеры, выданные из этой области + сертификат.

Для WCF достаточно безболезненным способом настроить выданные каналы токенов является метод расширения WIF CreateChannelWithIssuedToken:

http://msdn.microsoft.com/en-us/library/ee517268.aspx

1MB — это действительно очень большой токен. Могут быть и другие веские причины для разделения на несколько STS в отдельных областях, но в качестве альтернативы вы можете помочь решить проблему, динамически получая разрешения с помощью политики или хранилищ разрешений на стороне проверяющей стороны, где потребляется ваш токен, а не предварительно вычисляя все детализированные разрешения со стороны STS. Но я говорю это, не зная вашего конкретного приложения, поэтому не стесняйтесь сказать мне уйти :)

person Andrew Lavers    schedule 08.08.2013
comment
Я предполагаю, что это будет работать, если STS A === STS B, и я попробую это. Я отмечу это как принятый ответ, если он сработает. Что касается использования хранилища разрешений на RP, то из-за требований к хранилищу данных в настоящее время это нецелесообразно. - person psaxton; 08.08.2013

Что вам действительно нужно, так это обновить токен с истекшим сроком действия. Мы не поддерживаем это. И тоже не планирую этого делать.

Вы можете установить время истечения срока действия на значение, которое вам подходит, а затем принудительно повторно войти в систему после этого.

Токены размером 1 МБ не являются хорошей идеей — вам нужно либо использовать их в оба конца, либо создать сходство сеансов. Токены предназначены для описания личности пользователя, а не для того, чтобы сбрасывать в них все возможные значения.

Почему RP не загружает правила authZ от IdP через сервисный вызов?

person leastprivilege    schedule 08.08.2013
comment
В настоящее время план состоит в том, чтобы выпустить токены истечения срока действия ~ 12 часов из области аутентификации, а затем использовать токены области аутентификации в качестве аутентификации для других областей. Понятно, что IdP не позволит обновить токен области аутентификации. Что касается того, что RP загружает правила authZ из IdP через сервисный вызов: это то, с чем я не знаком. Не могли бы вы предоставить ссылку на учебник или пример реализации, пожалуйста? - person psaxton; 08.08.2013
comment
Вместо того, чтобы передавать ваши правила authZ через токен. Создайте веб-сервис, где RP может получить их. - person leastprivilege; 09.08.2013
comment
Чтобы углубиться в то, что имеет в виду Доминик, утверждения в вашем выданном токене должны представлять собой набор свойств принципала: имя, должность, ранг, отдел, проект, над которым они работают, и т. д. Заявления не являются разрешениями, и ваша STS не должна принимать решения об авторизации от имени RP, который использует токен. Это должен быть RP, который запускает набор утверждений принципала через политику (набор правил), чтобы принимать решения об авторизации. Есть разница между теорией и практикой, но это то, что утверждается по крайней мере в теории. - person Andrew Lavers; 12.08.2013