使用 Microsoft Entra ID 对应用程序进行身份验证以访问事件中心资源
Azure 基于 Microsoft Entra ID 针对资源和应用程序提供集成的访问控制管理。 将 Microsoft Entra ID 与 Azure 事件中心配合使用的主要优势在于,不再需要将凭据存储在代码中。 你可以从 Microsoft 标识平台请求 OAuth 2.0 访问令牌。 请求令牌的资源名称为 https://eventhubs.chinacloudapi.cn/
,所有云/租户都是如此(对于 Kafka 客户端,请求令牌的资源为 https://<namespace>.servicebus.chinacloudapi.cn
)。 Microsoft Entra 对运行应用程序的安全主体(用户、组、服务主体或托管标识)进行身份验证。 如果身份验证成功,Microsoft Entra ID 会将访问令牌返回应用程序,应用程序可随之使用访问令牌对 Azure 事件中心资源请求授权。
将角色分配到 Microsoft Entra 安全主体后,Azure 会向该安全主体授予对这些资源的访问权限。 访问权限的范围可限定为订阅、资源组、事件中心命名空间级别或其下的任何资源。 Microsoft Entra 安全主体可向用户、组、应用程序服务主体或 Azure 资源的托管标识分配角色。
注意
角色定义是权限的集合。 Azure 基于角色的访问控制 (Azure RBAC) 控制如何通过角色分配实施这些权限。 角色分配包含三个要素:安全主体、角色订阅和范围。 有关详细信息,请参阅了解不同的角色。
Azure 事件中心的内置角色
Azure 提供了以下 Azure 内置角色,用于通过 Microsoft Entra ID 和 OAuth 授予对事件中心数据的访问权限:
- Azure 事件中心数据所有者:使用此角色可以授予对事件中心资源的完全访问权限。
- Azure 事件中心数据发送方:分配给此角色的安全主体可以将事件发送到特定事件中心或命名空间中的所有事件中心。
- Azure 事件中心数据接收方:分配给此角色的安全主体可以从特定事件中心或命名空间中的所有事件中心接收事件。
重要
预览版支持向“所有者”或“参与者”角色添加事件中心数据访问特权。 但是,不再授予“所有者”和“参与者”角色的数据访问特权。 如果使用“所有者”或“参与者”角色,请改用“Azure 事件中心数据所有者”角色。
通过应用程序进行身份验证
将 Microsoft Entra ID 与 Azure 事件中心配合使用的主要优势之一在于,不再需要在代码中存储凭据。 可以从 Microsoft 标识平台请求 OAuth 2.0 访问令牌。 Microsoft Entra 对运行应用程序的安全主体(用户、组或服务主体)进行身份验证。 如果身份验证成功,Microsoft Entra ID 会将访问令牌返回应用程序,应用程序可随之使用访问令牌对 Azure 事件中心请求授权。
以下部分介绍如何配置本机应用程序或 Web 应用程序,以便在 Microsoft 标识平台 2.0 中进行身份验证。 有关 Microsoft 标识平台 2.0 的详细信息,请参阅 Microsoft 标识平台 (v2.0) 概述。
有关 OAuth 2.0 代码授权流的概述,请参阅使用 OAuth 2.0 代码授权流来授权访问 Microsoft Entra Web 应用程序。
在 Microsoft Entra 租户中注册应用程序
使用 Microsoft Entra ID 授权访问事件中心资源的第一步是,通过 Azure 门户在 Microsoft Entra 租户中注册客户端应用程序。 按照快速入门:向 Microsoft 标识平台注册应用程序中的步骤,在 Microsoft Entra ID 中注册一个代表尝试访问 Azure 事件中心资源的应用程序。
注册客户端应用程序时,需要提供关于应用程序的信息。 Microsoft Entra ID 随后会提供客户端 ID(也称为应用程序 ID)。在运行时,可以使用该 ID 将应用程序与 Microsoft Entra 关联。 若要了解有关客户端 ID 的详细信息,请参阅 Microsoft Entra ID 中的应用程序对象和服务主体对象。
注意
如果将应用程序注册为本机应用程序,可以为重定向 URI 指定任何有效的 URI。 对于本机应用程序,此值不一定要是实际的 URL。 对于 Web 应用程序,重定向 URI 必须是有效的 URI,因为它指定了要向哪个 URL 提供令牌。
注册应用程序后,可在“设置”下看到“应用程序(客户端) ID”:
创建客户端机密
请求令牌时,应用程序需要使用客户端机密来证明其身份。 按照添加客户端密码中的步骤在 Microsoft Entra ID 中为应用创建客户端密码。
使用 Azure 门户分配 Azure 角色
将其中一个事件中心角色分配给所需范围(事件中心命名空间、资源组、订阅)中应用程序的服务主体。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色。
定义角色及其范围后,可以使用此 GitHub 位置提供的示例测试此行为。 若要详细了解如何使用 Azure 基于角色的访问控制 (RBAC) 和 Azure 门户管理对 Azure 资源的访问,请参阅这篇文章。
用于获取令牌的客户端库
注册应用程序并向其授予在 Azure 事件中心发送/接收数据的权限后,可将代码添加到应用程序,以便对安全主体进行身份验证并获取 OAuth 2.0 令牌。 若要进行身份验证并获取令牌,可以使用 Microsoft 标识平台身份验证库,或者其他支持 OpenID 或 Connect 1.0 的开源库。 然后,应用程序可以使用访问令牌来授权针对 Azure 事件中心发出的请求。
有关支持获取令牌的方案,请参阅适用于 .NET 的 Microsoft 身份验证库 (MSAL) GitHub 存储库的方案部分。
示例
- 使用旧版 .NET Microsoft.Azure.EventHubs 包的 RBAC 示例 我们正在努力使用最新的 Azure.Messaging.EventHubs 包创建此示例的新版本。 请参阅已转换的托管标识。
- 使用旧版 Java com.microsoft.azure.eventhubs 包的 RBAC 示例 可以使用迁移指南来迁移此示例以使用新包 (
com.azure.messaging.eventhubs
)。 若要从总体上了解有关使用此新包的详细信息,请参阅 此处的示例。
相关内容
- 若要详细了解 Azure RBAC,请参阅什么是 Azure 基于角色的访问控制 (Azure RBAC)?
- 若要了解如何使用 Azure PowerShell、Azure CLI 或 REST API 分配和管理 Azure 角色分配,请参阅以下文章:
请参阅以下相关文章: