【问题标题】:Azure Active Directory Integration with Custom RBACAzure Active Directory 与自定义 RBAC 的集成
【发布时间】:2019-02-23 04:27:49
【问题描述】:

我们有自己的 Web 应用程序,它根据本地定义并在本地数据库中维护的用户名和相关角色执行访问控制

我需要将我们的应用程序与“Azure AD”集成以利用单点登录 (SSO)以便使用相同的用户名,我们也可以集成和访问其他 SaaS 应用程序。我想我可以通过“Azure ADAL APIs”和“Graph APIs”来实现这一点。

但是,我想了解如何为“Azure AD”定义自定义用户属性和角色,以便在身份验证时与我们的应用程序共享属性和角色。这是我们的 Web 应用程序在不本地定义角色的情况下提供访问控制(基于用户 ID 和角色)所必需的。我不确定如何实现这一目标?

请让我知道这是否可行以及实现相同目标的最佳选择是什么。

【问题讨论】:

    标签: active-directory single-sign-on azure-active-directory saml rbac


    【解决方案1】:

    我想了解如何定义自定义用户属性和 “Azure AD”的角色与我们的共享属性和角色 认证后申请。这是我们的网络所必需的 提供访问控制的应用程序(基于用户 ID 和角色) 无需在本地定义角色。

    您需要使用 Azure AD 查看与应用程序角色相关的功能,以实现您的自定义 RBAC。它很可能应该为您提供您正在寻找的东西。

    在旁注中,我看到人们根据用户所属的组选择执行一些授权逻辑的情况。这只是信息,而不是您需要做的事情。

    我在这个答案中分享了与角色和组相关的示例,但一定要先查看应用程序角色,一旦你清楚地理解它们,你就可以决定使用应用程序角色、组或角色和组的组合(很有可能)为您的授权策略。

    应用程序角色

    微软文档 - Application Roles

    用途 - 这些角色在应用程序清单中为您的组织正在开发并在您的 Azure Active Directory 中注册的应用程序定义。这些角色非常特定于您的应用程序,可以在应用程序代码中用于为经过身份验证的用户实现授权逻辑。

    示例应用程序(使用此概念并满足您的需求)-

    Authorization in a web app using Azure AD application roles & role claims

    快速说明

    1) 向 Azure AD 注册应用程序后,您可以通过在 Azure AD 中编辑应用程序清单 (JSON) 来定义自定义角色(特定于您的应用程序)。
    以下是应用程序角色定义的示例 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 组也可以而且确实存在用于对成员进行分组的目的。另一方面,应用程序角色非常特定于您的应用程序,除了您的应用程序之外,它们对任何人都没有多大意义。

    基于组做出决策的示例应用

    Authorization in a web app using Azure AD groups & group claims

    【讨论】:

    • 非常感谢。我会试试这个。
    【解决方案2】:

    您已标记此 SAML,所以我假设您想通过自定义 SAML 应用程序执行此操作?

    如果是这样,您需要通过自定义存储库中的图形 API 预配 Azure AD。

    如果 Azure AD 没有您需要的属性,请创建一个extension attribute

    在 SAML 连接中,您可以配置传递哪些属性(这包括角色)。

    注意:ADAL 库适用于 OpenID Connect,而不适用于 SAML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 2019-09-14
      • 2018-01-24
      相关资源
      最近更新 更多