2012-06-13 2 views
1

Я работаю над проектом, который использует Active Directory для пользовательской информации, ADFS для проверки подлинности и единого входа и нескольких пользовательских приложений, все из которых созданы с помощью ASP.NET MVC.Хранение разрешений на основе ролей с использованием ADFS и WIF

Модель авторизации - это претензии и основанные на ролях; то есть роли пользователя доступны в качестве претензий к соответствующему приложению через токены, выпущенные ADFS (с использованием WIF).

Каждая роль имеет определенный список разрешений для различных ресурсов приложений (т. Е. Роль Admin имеет разрешение WRITE для ресурса X). У нас есть основная модель авторизации, хорошо работающая с некоторыми жестко запрограммированными разрешениями.

Мой вопрос: что является лучшим способом/местом для хранения фактических разрешений для различных ролей? Это можно сделать в ADFS или понадобится отдельный магазин (я предполагаю, что последний)? Разрешения следуют той же широкой схеме, что и XACML (user/role: resource: action), и решение XACML, вероятно, будет легко интегрироваться, но самая популярная реализация XACML (XACML.NET) в .NET реализует XML как единственную который не будет жизнеспособным (у нас есть много ресурсов для хранения разрешений против - потенциально тысячи).

Что люди используют для этого? Наиболее очевидным решением является просто хранить триплеты в SQL Server, но, учитывая все готовые решения для аутентификации (особенно с использованием ADFS и WIF), кажется странным, что для фактической реализации авторизации и разрешений имеется очень мало (очевидная) информация. Все примеры, которые я нашел в Интернете, перестают объяснять вещи на уровне разрешений.

ответ

1

Проще всего было бы сохранить разрешения в SQL Server и просто использовать пользовательский SQL Server attribute store в ADFS для извлечения значений.

Вы можете сделать некоторую логику с помощью claims rules, но на самом деле нет хорошего места для хранения подобных вещей в самой ADFS.

+0

Это то, что я подозревал, спасибо. – MarkH

+0

Из интереса: как вы конвертируете тройную «роль Admin имеет разрешение WRITE в отношении ресурса X» в заявку, которая выглядит как «.../Claim/role = Admin»? – nzpcmad

2

ADFS часто является общим компонентом инфраструктуры. Проблема с переносом специфических для него приложений (например, для конкретных приложений) заключается в том, что с течением времени это может стать узким местом администратора. Спросите себя: кто будет управлять этими разрешениями с течением времени? вам придется подать форму для одобрения кого-то? Это, вероятно, будет проблемой. Это сработает, но это будет хлопот.

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

Конечно, вы могли бы получить данные об извлечении ADFS из базы данных, которая управляется распределенным способом.

В некоторых случаях люди развертывают специфичную для приложения STS (часто называемую «RP-STS»), которая преобразует токен во что-то, что ожидает приложение (или группа приложений). SharePoint делает это, например.

+0

Экземпляр ADFS, который мы используем, будет доступен только в связанных приложениях, для которых применяются соответствующие разрешения, и приложения будут использовать один и тот же набор разрешений ... поэтому я думаю, что я счастлив с этого угла. Я думаю, как указано выше, хотя ADFS, вероятно, не является подходящим местом для хранения этих разрешений, поскольку они не являются ориентированными на пользователя/претензиями. Интересный момент в отношении реализации приложения - это не слишком хорошо вписывается в нашу модель по разным причинам, но это интересный вариант. – MarkH

Смежные вопросы