你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将应用角色添加到应用程序中并在令牌中接收它们

基于角色的访问控制 (RBAC) 是一种常用的机制,用于在应用程序中强制进行授权。 使用 RBAC 时,管理员将权限授予角色而不是单个用户或组。 然后,管理员再将角色分配给不同的用户和组,以便控制用户对特定内容和功能的访问。

将 RBAC 与应用程序角色和角色声明配合使用,开发人员就可以安全地在应用中强制实施授权,相当轻松。

另一种方法是使用 Azure AD 组和组声明,如 GitHub 上的 active-directory-aspnetcore-webapp-openidconnect-v2 代码示例中所示。 Azure AD 组和应用程序角色不会互相排斥;它们可以配合使用,进行更精细的访问控制。

为应用程序声明角色

应用注册过程中,你将使用 Azure 门户定义应用角色。 应用角色在表示服务、应用或 API 的应用程序注册上定义。 当用户登录到应用程序时,Azure AD 会针对每个角色发出一个 roles 声明。这些角色包括单独授予用户或服务主体的,以及授予组成员身份的。 这可用于实现基于声明的授权。 应用角色可以分配给一个用户或一组用户。 应用角色也可以分配给另一个应用程序的服务主体,或者分配给托管标识的服务主体

重要

目前,如果将服务主体添加到组,然后将应用角色分配给该组,则 Azure AD 不会将 roles 声明添加到它颁发的令牌中。

应用角色是通过 Azure 门户中的应用角色 UI 使用应用角色来声明的:

你添加的角色数量计入 Azure Active Directory 强制实施的应用程序清单限制。 有关这些限制的信息,请参阅 Azure Active Directory 应用程序清单参考清单限制部分。

应用角色 UI

若要使用 Azure 门户的用户界面创建应用角色,请执行以下操作:

  1. 登录到 Azure 门户

  2. 在顶部菜单中选择“目录 + 订阅”筛选器,然后选择包含要向其添加应用角色的应用注册的 Azure Active Directory 租户。

  3. 搜索并选择“Azure Active Directory” 。

  4. 在“管理”下,选择“应用注册”,然后选择要在其中定义应用角色的应用程序 。

  5. 选择“应用角色”,然后选择“创建应用角色”。

    An app registration's app roles pane in the Azure portal

  6. 在“创建应用角色”窗格中,输入角色的设置。 图像下面的表格描述每个设置及其参数。

    An app registration's app roles create context pane in the Azure portal

    字段 说明 示例
    显示名称 管理员同意和应用分配体验中显示的应用角色显示名称。 此值可以包含空格。 Survey Writer
    允许的成员类型 指定是否可以将此应用角色分配给用户和/或应用程序。

    当应用角色可用于 applications 时,它将在应用注册的“管理”部分 >“API 权限”>“添加权限”>“我的 API”>“选择 API”>“应用程序权限”中显示为应用程序权限。
    Users/Groups
    指定应用程序在令牌中所需的角色声明的值。 该值应与应用程序代码中引用的字符串完全匹配。 该值不能包含空格。 Survey.Create
    说明 在管理应用分配和同意体验期间显示的应用角色的更详细说明。 Writers can create surveys.
    要启用此应用角色吗? 指定是否启用应用角色。 若要删除应用角色,请取消选中此复选框,并在尝试删除操作之前应用更改。 已选中
  7. 选择“应用”以保存所做的更改。

将用户和组分配到角色

在应用程序中添加应用角色以后,即可将此角色分配给用户和组。 可以通过门户的 UI 为用户或组分配角色,也可以使用 Microsoft Graph 以编程方式进行分配。 当分配到各种应用角色的用户登录到应用程序时,其令牌会在 roles 声明中具有其分配的角色。

若要使用 Azure 门户将用户和组分配给角色,请执行以下操作:

  1. 登录到 Azure 门户
  2. 在 Azure Active Directory 的左侧导航菜单中选择“企业应用程序” 。
  3. 选择“所有应用程序”,查看所有应用程序的列表。 如果应用程序未显示在列表中,请使用“所有应用程序”列表顶部的筛选器来限制此列表,或者在列表中向下滚动寻找你的应用程序。
  4. 选择一个应用程序,以便在其中为角色分配用户或安全组。
  5. 在“管理”下,选择“用户和组”。
  6. 选择“添加用户”,打开“添加分配”窗格 。
  7. 在“添加分配”窗格中,选择“用户和组”选择器。 随即显示用户和安全组的列表。 可以搜索特定用户或组,并选择列表中显示的多个用户和组。
  8. 选择用户和组后,请选择“选择”按钮以继续。
  9. 在“添加分配”窗格中选择“选择角色” 。 随即显示已为应用程序定义的所有角色。
  10. 选择一个角色,然后选择“选择”按钮。
  11. 选择“分配”按钮可完成将用户和组分配到应用的操作。

确认已添加的用户和组显示在“用户和组”列表中。

向应用程序分配应用角色

在应用程序中添加应用角色后,可以使用 Azure 门户或以编程方式使用 Microsoft Graph 将应用角色分配给客户端应用。

将应用角色分配给应用程序时,将创建应用程序权限。 应用程序权限通常由需要进行身份验证和经授权的 API 调用的守护程序应用或后端服务使用,而无需用户的交互。

若要使用 Azure 门户将应用角色分配给应用程序,请执行以下操作:

  1. 登录到 Azure 门户
  2. 在 Azure Active Directory 的左侧导航菜单中,选择“应用注册” 。
  3. 选择“所有应用程序”,查看所有应用程序的列表。 如果应用程序未显示在列表中,请使用“所有应用程序”列表顶部的筛选器来限制此列表,或者在列表中向下滚动寻找你的应用程序。
  4. 选择要向其分配应用角色的应用程序。
  5. 选择“API 权限”>“添加权限” 。
  6. 选择“我的 API”选项卡,然后选择为其定义了应用角色的应用。
  7. 选择“应用程序权限”。
  8. 选择要分配的角色。
  9. 选择“添加权限”按钮完成角色添加。

新添加的角色应显示在应用注册的“API 权限”窗格中。

由于这些是应用程序权限,而不是委派的权限,因此管理员必须授予同意,才能使用分配给应用程序的应用角色。

  1. 在应用注册的“API 权限”窗格中,选择“为 <租户名称> 授予管理员同意”。
  2. 当系统提示授予所请求权限的同意时,选择“是”。

“状态”列应反映已为 <租户名称> 授予同意。

应用角色的使用方案

如果是在应用程序方案中实现使用户登录的应用角色业务逻辑,请首先在“应用注册”中定义应用角色。 然后,管理员将它们分配给“企业应用程序”窗格中的用户和组。 这些分配的应用角色包含在为应用程序颁发的任何令牌中,可以是访问令牌(当应用是某个应用正在调用的 API 时)或 ID 令牌(当应用使用户登录时)。

如果是在应用调用 API 方案中实现应用角色业务逻辑,则有两个应用注册。 一个应用注册用于应用,另一个应用注册用于 API。 在这种情况下,请定义应用角色,并将其分配给 API 的应用注册中的用户或组。 当用户使用应用进行身份验证并请求访问令牌以调用 API 时,访问令牌中会包含角色声明。 下一步是将代码添加到 Web API,以在调用 API 时检查这些角色。

若要了解如何将授权添加到 Web API,请参阅受保护的 Web API:验证范围和应用角色

应用角色和组

尽管可以使用应用角色或组进行授权,但它们之间的关键差异可能会影响你将哪一种用于你的场景的决定。

应用角色
它们特定于应用程序,并在应用注册中定义。 它们随应用程序一起移动。 它们不是特定于应用,而是特定于 Azure AD 租户。
删除应用注册时,应用角色会被删除。 即使删除了应用,组也会保持不变。
roles 声明中提供。 groups 声明中提供。

开发人员可以使用应用角色来控制用户是否可以登录到应用,或者应用是否可以获取 Web API 的访问令牌。 为了将此安全控件扩展到组,开发人员和管理员还可以将安全组分配给应用角色。

当开发人员想要描述和控制其应用中的授权参数时,应用角色是首选。 例如,使用组进行授权的应用将在下一个租户中中断,因为组 ID 和名称可能不同。 使用应用角色的应用处于安全状态。 事实上,由于相同的原因,将组分配给应用角色对 SaaS 应用而言很常见,因为它允许在多个租户中预配 SaaS 应用。

后续步骤

通过以下资源详细了解应用角色。