Интеграция Azure Active Directory с настраиваемым RBAC
У нас есть собственное веб-приложение, которое выполняет контроль доступа на основе имени пользователя и связанных ролей, определенных локально и поддерживаемых в локальной базе данных.
Мне нужно интегрировать наше приложение с "Azure AD" для обеспечения единого входа (SSO), чтобы с тем же именем пользователя мы могли интегрировать и получать доступ к другим приложениям SaaS. Я думаю, что могу достичь этого с помощью "API-интерфейсов Azure ADAL" и "API-интерфейсов Graph".
Однако я хотел бы понять, как определить пользовательские атрибуты и роли для "Azure AD", чтобы они могли делиться атрибутами и ролями с нашим приложением после проверки подлинности. Это требуется для нашего веб-приложения для обеспечения контроля доступа (на основе идентификатора пользователя и роли) без локального определения ролей. Я не уверен, как этого добиться?
Пожалуйста, дайте мне знать, если это возможно и каков наилучший вариант для достижения того же.
2 ответа
Мне бы хотелось понять, как определить пользовательские атрибуты и роли для "Azure AD", чтобы они могли делиться атрибутами и ролями с нашим приложением после проверки подлинности. Это требуется для нашего веб-приложения для обеспечения контроля доступа (на основе идентификатора пользователя и роли) без локального определения ролей.
Чтобы реализовать настраиваемый RBAC, вам нужно взглянуть на функциональность, связанную с ролями приложений в Azure AD. Скорее всего, он должен предоставить вам то, что вы ищете.
Кстати, я видел случаи, когда люди выбирали логику авторизации в зависимости от того, к каким группам принадлежали пользователи. Это просто информация, а не то, что вам нужно сделать.
В этом ответе я делюсь примерами, относящимися как к ролям, так и к группам, но вначале определенно рассмотрим роли приложений, и как только вы их ясно поймете, вы можете решить использовать роли, группы приложений или комбинацию ролей и групп (очень возможно) для вашей стратегии авторизации.
Роли приложений
Документация Microsoft - Роли приложений
Цель. Эти роли определены в манифесте приложения для приложения, которое разрабатывает ваша организация и зарегистрировано в Azure Active Directory. Эти роли очень специфичны для вашего приложения и могут использоваться в коде приложения для реализации логики авторизации для аутентифицированных пользователей.
Пример приложения (которое использует эту концепцию и делает то, что вы ищете) -
Авторизация в веб-приложении с использованием ролей приложений Azure и заявлений о ролях
Быстрое объяснение
1) После регистрации приложения в Azure AD вы можете определить пользовательские роли (специфичные для вашего приложения), отредактировав манифест приложения (JSON) в Azure AD.
Вот пример JSON того, как будет выглядеть определение роли приложения:
"appRoles":
[
{
"allowedMemberTypes": [
"User"
],
"description": "Creators can create Surveys",
"displayName": "SurveyCreator",
"id": "1b4f816e-5eaf-48b9-8613-7923830595ad",
"isEnabled": true,
"value": "SurveyCreator"
},
{
"allowedMemberTypes": [
"User"
],
"description": "Administrators can manage the Surveys in their tenant",
"displayName": "SurveyAdmin",
"id": "c20e145e-5459-4a6c-a074-b942bbd4cfe1",
"isEnabled": true,
"value": "SurveyAdmin"
}
]
2) Вы сможете назначать эти роли пользователям / группам / приложениям через портал Azure или программно. (вы можете контролировать разрешенные типы членов для ролей)
3) Теперь, когда конечные пользователи войдут в ваше приложение, входящий токен Azure AD предоставит вам набор заявок на роли (в зависимости от того, какие роли назначены пользователю), и вы сможете принимать решения об авторизации в своем приложении.
if (context.User.HasClaim(ClaimTypes.Role, "Admin")) { ... }
группы
В группах могут быть несколько пользователей или другие группы. Опять же, управление группами возможно через портал Azure или программно.
ПРИМЕЧАНИЕ. Группы полностью независимы от вашего приложения, т. Е. Группы Azure AD могут существовать и существуют для группирования участников даже без вашего приложения. Роли приложения, с другой стороны, очень специфичны для вашего приложения, они мало что значат для кого-либо, кроме вашего приложения.
Пример приложения, которое принимает решения на основе групп
Авторизация в веб-приложении с использованием групп и утверждений Azure AD
Вы пометили этот SAML, поэтому я предполагаю, что вы хотите сделать это через пользовательское приложение SAML?
Если это так, вам нужно подготовить Azure AD через API Graph из своего пользовательского репозитория.
Если в Azure AD нет нужного атрибута, создайте атрибут расширения.
В соединении SAML вы можете настроить передаваемые атрибуты (включая роли).
Примечание: библиотеки ADAL предназначены для OpenID Connect, а не для SAML.