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

如何将托管标识与 Azure 通信服务配合使用

Azure 通信服务是一个完全托管的通信平台,利用该平台,开发人员可在其应用程序中生成实时通信功能。 通过对 Azure 通信服务使用托管标识,可以简化应用程序的身份验证过程,同时提高其安全性。 本文档介绍如何对 Azure 通信服务使用托管标识。

对 Azure 通信服务使用托管标识

Azure 通信服务支持使用托管标识向服务进行身份验证。 通过使用托管标识,无需管理自己的访问令牌和凭据。

可以向 Azure 通信服务资源分配两种类型的标识:

  1. 系统分配的标识,该标识与资源关联,如果删除资源,会同时删除该标识。 资源只能有一个系统分配的标识。
  2. 用户分配的标识,该标识是可以分配给 Azure 通信服务资源的 Azure 资源。 删除资源时,不会删除该标识。 资源可以有多个用户分配的标识。

要将托管标识用于 Azure 通信服务,请执行以下步骤:

  1. 向托管标识授予对通信服务资源的访问权限。 此分配可以通过 Azure 门户、Azure CLI 和 Azure 通信管理 SDK 进行。
  2. 使用托管标识向 Azure 通信服务进行身份验证。 可以通过支持托管标识的 Azure SDK 或 REST API 完成身份验证。

添加系统分配的标识

  1. 在应用页面的左侧导航中,向下滚动到“设置”组。

  2. 选择“标识”。

  3. 在“系统分配的”选项卡中,将“状态”切换为“启用” 。 选择“保存”。 屏幕截图显示如何启用系统分配的托管标识。

添加用户分配的标识

要将用户分配的标识分配给 Azure 通信服务资源,需要先创建标识,然后将其资源标识符添加到通信服务资源。

首先,需要创建用户分配的托管标识资源。

  1. 根据这些说明创建用户分配的托管标识资源。

  2. 在应用页面的左侧导航中,向下滚动到“设置”组。

  3. 选择“标识”。

  4. 选择“用户分配的>添加”。

  5. 搜索之前创建的标识,选中它,然后选择“添加”。 屏幕截图显示如何启用用户分配的托管标识。

使用 Azure 通信服务管理 SDK 的托管标识

还可以使用 Azure 通信管理 SDK 将托管标识分配给 Azure 通信服务资源。 可以通过在创建时或在更新资源时在资源定义中引入标识属性来实现此分配。

可以通过设置 CommunicationServiceResourceData 上的 Identity 属性,使用适用于 .NET 的 Azure 通信管理 SDK 将托管标识分配给 Azure 通信服务资源。

例如:

public async Task CreateResourceWithSystemAssignedManagedIdentity()
{
    ArmClient armClient = new ArmClient(new DefaultAzureCredential());
    SubscriptionResource subscription = await armClient.GetDefaultSubscriptionAsync();

    //Create Resource group
    ResourceGroupCollection rgCollection = subscription.GetResourceGroups();
    // With the collection, we can create a new resource group with an specific name
    string rgName = "myRgName";
    AzureLocation location = AzureLocation.WestUS2;
    ArmOperation<ResourceGroupResource> lro = await rgCollection.CreateOrUpdateAsync(WaitUntil.Completed, rgName, new ResourceGroupData(location));
    ResourceGroupResource resourceGroup = lro.Value;

    // get resource group collection
    CommunicationServiceResourceCollection collection = resourceGroup.GetCommunicationServiceResources();
    string communicationServiceName = "myCommunicationService";
    
    // Create Communication Service Resource
    var identity = new ManagedServiceIdentity(ManagedServiceIdentityType.SystemAssigned);
    CommunicationServiceResourceData data = new CommunicationServiceResourceData("global")
    {
        DataLocation = "UnitedStates",
        Identity = identity
    };
    var communicationServiceLro = await collection.CreateOrUpdateAsync(WaitUntil.Completed, communicationServiceName, data);
    var resource = communicationServiceLro.Value;
}

有关使用 .NET 管理 SDK 的详细信息,请参阅适用于 .NET 的 Azure 通信管理 SDK

有关管理资源实例的详细信息,请参阅管理通信服务资源实例

注意

一个资源可同时具有系统分配的标识和用户分配的标识。 在这种情况下,type 属性将为 SystemAssigned,UserAssigned

还可以通过将 type 属性指定为 None 来从资源中移除所有托管标识分配。

后续步骤

现在,你已了解如何对 Azure 通信服务启用托管标识。 请考虑在自己的应用程序中实现此功能,以简化身份验证过程并提高安全性。