你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
授权使用 Microsoft Entra 托管标识Azure SignalR 服务资源的请求
Azure SignalR 服务支持使用 Microsoft Entra ID 为来自Microsoft Entra 托管标识的请求授权。
本文介绍如何配置Azure SignalR 服务资源和代码,以授权从托管标识向资源发出的请求。
配置托管标识
第一步是配置托管标识。
此示例演示如何使用Azure 门户在虚拟机(VM)上配置系统分配的托管标识:
在Azure 门户中,搜索并选择 VM。
在“设置”下选择“标识”。
在“系统分配”选项卡中,将“状态”切换为“启用” 。
选择“保存”按钮以确认更改。
若要了解如何创建用户分配的托管标识,请参阅 创建用户分配的托管标识。
若要详细了解如何配置托管标识,请参阅以下文章之一:
- 使用 Azure 门户在 VM 上配置 Azure 资源托管标识
- 使用 PowerShell 在 Azure VM 上配置 Azure 资源的托管标识
- 使用 Azure CLI 为 Azure VM 上的 Azure 资源配置托管标识
- 使用模板在 Azure VM 上配置 Azure 资源的托管标识
- 使用 Azure SDK 为 VM 配置具有 Azure 资源托管标识
若要了解如何为 Azure App 服务 和 Azure Functions 配置托管标识,请参阅如何对 App 服务 和 Azure Functions 使用托管标识。
在Azure 门户中添加角色分配
以下步骤介绍如何通过Azure SignalR 服务资源将 SignalR 应用服务器角色分配给系统分配的标识。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色。
注意
可以将角色分配给任何范围,包括管理组、订阅、资源组或单个资源。 若要了解有关范围的详细信息,请参阅 了解 Azure RBAC 的范围。
在Azure 门户中,转到Azure SignalR 服务资源。
选择“访问控制 (IAM)”。
选择“添加”>“添加角色分配”。
在“角色”选项卡上,选择“SignalR 应用服务器”。
在 “成员 ”选项卡上,选择“ 托管标识”,然后选择“ 选择成员”。
选择 Azure 订阅。
选择 系统分配的托管标识,搜索要向其分配角色的虚拟机,然后选择它。
在“查看 + 分配”选项卡上,选择“查看 + 分配”,以分配角色 。
重要
Azure 角色分配可能需要长达 30 分钟才能传播。
若要详细了解如何分配和管理 Azure 角色,请参阅以下文章:
- 使用 Azure 门户分配 Azure 角色
- 使用 REST API 分配 Azure 角色
- 使用 Azure PowerShell 分配 Azure 角色
- 使用 Azure CLI 分配 Azure 角色
- 使用 Azure 资源管理器模板分配 Azure 角色
配置应用程序
应用服务器
使用系统分配的标识
可以使用 DefaultAzureCredential 或 ManagedIdentityCredential 来配置Azure SignalR 服务终结点。 最佳做法是直接使用 ManagedIdentityCredential
。
系统分配的托管标识默认使用,但请确保不要配置 EnvironmentCredential 保留的任何环境变量(如果使用DefaultAzureCredential
)。 否则,Azure SignalR 服务回退以用于EnvironmentCredential
发出请求,这通常会导致Unauthorized
响应。
services.AddSignalR().AddAzureSignalR(option =>
{
option.Endpoints = new ServiceEndpoint[]
{
new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential()),
};
});
使用用户分配的标识
在创建 ManagedIdentityCredential
对象时提供 ClientId
。
重要
使用客户端 ID,而不是对象(主体)ID,即使它们都是 GUID。
services.AddSignalR().AddAzureSignalR(option =>
{
option.Endpoints = new ServiceEndpoint[]
{
var clientId = "<your identity client id>";
new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential(clientId)),
};
Azure Functions 中的Azure SignalR 服务绑定
azure Functions 中的Azure SignalR 服务绑定在本地使用门户或 local.settings.json 中的应用程序设置来配置托管标识以访问Azure SignalR 服务资源。
可能需要一组键/值对来配置标识。 所有键/值对的键必须以 连接名称前缀 (默认为 AzureSignalRConnectionString
)和分隔符开头。 分隔符是门户中的下划线(__
)和本地冒号(:
)。 可以使用绑定属性 ConnectionStringSetting
自定义前缀。
使用系统分配的标识
如果仅配置服务 URI,则使用 DefaultAzureCredential
类。 当你希望在 Azure 和本地开发环境中共享相同的配置时,此类非常有用。 若要了解其工作原理,请参阅 DefaultAzureCredential。
在Azure 门户中,使用以下示例配置 DefaultAzureCredential
。 如果未配置这些环境变量中的任何一个,则系统分配的标识用于身份验证。
<CONNECTION_NAME_PREFIX>__serviceUri=https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
下面是 local.settings.json 文件中的配置DefaultAzureCredential
示例。 在本地范围内,没有托管标识。 按顺序尝试通过 Visual Studio、Azure CLI 和 Azure PowerShell 帐户进行身份验证。
{
"Values": {
"<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net"
}
}
如果要独立使用系统分配的标识,而不影响 其他环境变量,请将 credential
具有连接名称前缀的密钥设置为 managedidentity
。 下面是应用程序设置的示例:
<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
使用用户分配的标识
如果要使用用户分配的标识,则除了具有连接名称前缀外,还需要分配 clientId
serviceUri
credential
密钥。 下面是应用程序设置的示例:
<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
<CONNECTION_NAME_PREFIX>__clientId = <CLIENT_ID>
后续步骤
请参阅以下相关文章: