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

快速入门:创建和管理访问令牌

访问令牌让 Azure 通信服务 SDK 直接针对 Azure 通信服务作为特定身份进行身份验证。 如果希望用户加入应用程序内的呼叫或聊天会话,则需要创建访问令牌。

在本快速入门中,你将了解如何使用 Azure 通信服务 SDK 来创建标识并管理你的访问令牌。 对于生产用例,我们建议你在服务器端服务上生成访问令牌。

先决条件

设置

添加扩展

使用 az extension 命令为 Azure CLI 添加 Azure 通信服务扩展。

az extension add --name communication

登录 Azure CLI

需要登录到 Azure CLI。 可以从终端运行 az login 命令并提供凭据进行登录。

(可选)使用 Azure CLI 标识操作,而无需传入连接字符串

可以配置 AZURE_COMMUNICATION_CONNECTION_STRING 环境变量来使用 Azure CLI 标识操作,而无需使用 --connection_string 来传入连接字符串。 若要配置环境变量,请打开控制台窗口,然后从以下选项卡中选择操作系统。 将 <yourConnectionString> 替换为实际的连接字符串。

打开控制台窗口并输入以下命令:

setx AZURE_COMMUNICATION_CONNECTION_STRING "<yourConnectionString>"

添加环境变量后,可能需要重启任何正在运行的、需要读取环境变量的程序(包括控制台窗口)。 例如,如果使用 Visual Studio 作为编辑器,请在运行示例之前重启 Visual Studio。

在环境变量中存储你的访问令牌

若要配置环境变量,请打开控制台窗口,然后从以下选项卡中选择操作系统。 将 <yourAccessToken> 替换为你的实际访问令牌。

打开控制台窗口并输入以下命令:

setx AZURE_COMMUNICATION_ACCESS_TOKEN "<yourAccessToken>"

添加环境变量后,可能需要重启任何正在运行的、需要读取环境变量的程序(包括控制台窗口)。 例如,如果使用 Visual Studio 作为编辑器,请在运行示例之前重启 Visual Studio。

Operations

创建标识

若要创建访问令牌,需要一个标识。 为此,Azure 通信服务维护了一个轻量级标识目录。 使用 user create 命令可在目录中创建具有唯一 Id 的新条目。 稍后颁发访问令牌时需要该标识。

az communication identity user create --connection-string "<yourConnectionString>"
  • <yourConnectionString> 替换为你的连接字符串。

在同一请求中创建标识并颁发访问令牌

运行以下命令创建通信服务标识并为它颁发访问令牌。 scopes 参数定义了一组访问令牌权限和角色。 有关详细信息,请参阅向 Azure 通信服务进行身份验证中列出的支持的操作。

az communication identity token issue --scope chat --connection-string "<yourConnectionString>"

在代码中进行此替换:

  • <yourConnectionString> 替换为你的连接字符串。

颁发访问令牌

运行以下命令为你的通信服务标识颁发访问令牌。 scopes 参数定义了一组访问令牌权限和角色。 有关详细信息,请参阅向 Azure 通信服务进行身份验证中列出的支持的操作。

az communication identity token issue --scope chat --user "<userId>" --connection-string "<yourConnectionString>"

在代码中进行此替换:

  • <yourConnectionString> 替换为你的连接字符串。
  • <userId> 替换为你的 userId。

访问令牌是短期凭据,需要重新颁发。 如果不重新颁发,可能会导致应用程序用户的体验中断。 expires_on 响应属性指示访问令牌的生存期。

颁发具有多个范围的访问令牌

运行以下命令为你的通信服务标识颁发具有多个范围的访问令牌。 scopes 参数定义了一组访问令牌权限和角色。 有关详细信息,请参阅标识模型中受支持的操作列表。

az communication identity token issue --scope chat voip --user "<userId>" --connection-string "<yourConnectionString>"

在代码中进行此替换:

  • <yourConnectionString> 替换为你的连接字符串。
  • <userId> 替换为你的 userId。

访问令牌是短期凭据,需要重新颁发。 如果不重新颁发,可能会导致应用程序用户的体验中断。 expires_on 响应属性指示访问令牌的生存期。

将 Teams 用户的 Microsoft Entra 访问令牌交换为通信标识访问令牌

使用 token get-for-teams-user 命令为 Teams 用户颁发可与 Azure 通信服务 SDK 一起使用的访问令牌。

az communication identity token get-for-teams-user --aad-token "<yourAadToken>" --client "<yourAadApplication>" --aad-user "<yourAadUser>" --connection-string "<yourConnectionString>"

在代码中进行此替换:

  • <yourConnectionString> 替换为你的连接字符串。
  • <yourAadUser> 替换为 Microsoft Entra userId。
  • <yourAadApplication> 替换为 Microsoft Entra 应用程序 ID。
  • <yourAadToken> 替换为 Microsoft Entra 访问令牌。

撤销访问令牌

你有时可能需要显式撤销访问令牌。 例如,当应用程序用户更改了自身用于向你的服务进行身份验证的密码时,你可能要执行此操作。 token revoke 命令使颁发给标识的所有活动访问令牌无效。

az communication identity token revoke --user "<userId>" --connection-string "<yourConnectionString>"

在代码中进行此替换:

  • <yourConnectionString> 替换为你的连接字符串。
  • <userId> 替换为你的 userId。

删除标识

当你删除一个标识时,你将撤销所有活动的访问令牌并阻止进一步为该标识颁发访问令牌。 还会删除与该标识关联的所有持久内容。

az communication identity user delete --user "<userId>" --connection-string "<yourConnectionString>"

在代码中进行此替换:

  • <yourConnectionString> 替换为你的连接字符串。
  • <userId> 替换为你的 userId。

先决条件

最终代码

GitHub 上查找此快速入门的最终代码。

设置你的环境

新建 C# 应用程序

在命令提示符窗口(例如 cmd、PowerShell 或 Bash)中,运行 dotnet new 命令创建名为 AccessTokensQuickstart 的新控制台应用。 此命令将创建包含单个源文件 (Program.cs) 的简单“Hello World”C# 项目。

dotnet new console -o AccessTokensQuickstart

将目录更改为新建的应用文件夹,并使用 dotnet build 命令编译应用程序。

cd AccessTokensQuickstart
dotnet build

应该显示一个简单的“Hello World”输出。 如果显示了以上输出,则你的设置工作正常,你可以开始编写 Azure 通信服务特定的代码。

安装包

仍在应用程序目录中时,使用 dotnet add package 命令安装适用于 .NET 的 Azure 通信服务标识库包。

dotnet add package Azure.Communication.Identity

设置应用框架

在项目目录中执行以下操作:

  1. 在文本编辑器中,打开“Program.cs” 文件。
  2. 添加 using 指令以包括 Azure.Communication.Identity 命名空间。
  3. 更新 Main 方法声明以支持异步代码。

若要开始,请运行以下代码:

using System;
using Azure;
using Azure.Core;
using Azure.Communication.Identity;

namespace AccessTokensQuickstart
{
    class Program
    {
        static async System.Threading.Tasks.Task Main(string[] args)
        {
            Console.WriteLine("Azure Communication Services - Access Tokens Quickstart");

            // Quickstart code goes here
        }
    }
}

验证客户端

使用连接字符串初始化 CommunicationIdentityClient。 你添加到 Main 方法中的以下代码将从名为 COMMUNICATION_SERVICES_CONNECTION_STRING 的环境变量中检索资源的连接字符串。

有关详细信息,请参阅创建和管理通信服务资源的“存储连接字符串”部分。

// This code demonstrates how to retrieve your connection string
// from an environment variable.
string connectionString = Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_CONNECTION_STRING");
var client = new CommunicationIdentityClient(connectionString);

或者,你可以通过运行以下代码来分离终结点和访问密钥:

// This code demonstrates how to fetch your endpoint and access key
// from an environment variable.
string endpoint = Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_ENDPOINT");
string accessKey = Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_ACCESSKEY");
var client = new CommunicationIdentityClient(new Uri(endpoint), new AzureKeyCredential(accessKey));

如果已设置 Microsoft Entra 应用程序,则可以使用 Microsoft Entra ID 进行身份验证

TokenCredential tokenCredential = new DefaultAzureCredential();
var client = new CommunicationIdentityClient(new Uri(endpoint), tokenCredential);

创建标识

若要创建访问令牌,需要一个标识。 为此,Azure 通信服务维护了一个轻量级标识目录。 使用 createUser 方法可在目录中创建具有唯一 Id 的新项。 稍后颁发访问令牌时需要该标识。

var identityResponse = await client.CreateUserAsync();
var identity = identityResponse.Value;
Console.WriteLine($"\nCreated an identity with ID: {identity.Id}");

存储接收到的标识并映射到应用程序的用户(例如,通过将其存储在应用程序服务器数据库中)。

发布访问令牌

拥有通信服务身份后,使用 GetToken 方法为其颁发访问令牌。 scopes 参数定义了一组访问令牌权限和角色。 有关详细信息,请参阅标识模型中受支持的操作列表。 还可以基于 Azure 通信服务标识的字符串表示构造 communicationUser 的一个新实例。

// Issue an access token with a validity of 24 hours and the "voip" scope for an identity
var tokenResponse = await client.GetTokenAsync(identity, scopes: new [] { CommunicationTokenScope.VoIP });

// Get the token from the response
var token =  tokenResponse.Value.Token;
var expiresOn = tokenResponse.Value.ExpiresOn;
Console.WriteLine($"\nIssued an access token with 'voip' scope that expires at {expiresOn}:");
Console.WriteLine(token);

访问令牌是短期凭据,需要重新颁发。 如果不重新颁发,可能会导致应用程序用户的体验中断。 expiresOn 属性指示访问令牌的生存期。

设置自定义令牌过期时间

默认令牌过期时间为 24 小时,但可以通过为可选参数 tokenExpiresIn 提供一个介于一小时到 24 小时之间的值来配置它。 请求新令牌时,建议为令牌过期时间指定通信会话的预期典型时长。

// Issue an access token with a validity of an hour and the "voip" scope for an identity 
TimeSpan tokenExpiresIn = TimeSpan.FromHours(1);
CommunicationTokenScope[] scopes = new[] { CommunicationTokenScope.VoIP };
var tokenResponse = await client.GetTokenAsync(identity, scopes, tokenExpiresIn);

在同一请求中创建标识并颁发令牌

可以使用 CreateUserAndTokenAsync 方法来同时创建通信服务标识并为其颁发访问令牌。 scopes 参数定义了一组访问令牌权限和角色。 有关详细信息,请参阅向 Azure 通信服务进行身份验证中列出的支持的操作。

// Issue an identity and an access token with a validity of 24 hours and the "voip" scope for the new identity
var identityAndTokenResponse = await client.CreateUserAndTokenAsync(scopes: new[] { CommunicationTokenScope.VoIP });

// Retrieve the identity, token, and expiration date from the response
var identity = identityAndTokenResponse.Value.User;
var token = identityAndTokenResponse.Value.AccessToken.Token;
var expiresOn = identityAndTokenResponse.Value.AccessToken.ExpiresOn;
Console.WriteLine($"\nCreated an identity with ID: {identity.Id}");
Console.WriteLine($"\nIssued an access token with 'voip' scope that expires at {expiresOn}:");
Console.WriteLine(token);

刷新访问令牌

若要刷新访问令牌,请将 CommunicationUserIdentifier 对象的实例传递到 GetTokenAsync。 如果已存储此 Id 并且需要新建 CommunicationUserIdentifier,可以通过将存储的 Id 传递到 CommunicationUserIdentifier 构造函数中来实现,如下所示:

var identityToRefresh = new CommunicationUserIdentifier(identity.Id);
var tokenResponse = await client.GetTokenAsync(identityToRefresh, scopes: new [] { CommunicationTokenScope.VoIP });

撤销访问令牌

你有时可能需要显式撤销访问令牌。 例如,当应用程序用户更改了自身用于向你的服务进行身份验证的密码时,你可能要执行此操作。 RevokeTokensAsync 方法使颁发给标识的所有活动访问令牌无效。

await client.RevokeTokensAsync(identity);
Console.WriteLine($"\nSuccessfully revoked all access tokens for identity with ID: {identity.Id}");

删除标识

当你删除一个标识时,你将撤销所有活动的访问令牌并阻止进一步为该标识颁发访问令牌。 还会删除与该标识关联的所有持久内容。

await client.DeleteUserAsync(identity);
Console.WriteLine($"\nDeleted the identity with ID: {identity.Id}");

运行代码

完成创建访问令牌后,你可以使用 dotnet run 命令从应用程序目录运行应用程序。

dotnet run

应用的输出描述了每个已完成的操作:

Azure Communication Services - Access Tokens Quickstart

Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

Issued an access token with 'voip' scope that expires at 10/11/2022 7:34:29 AM +00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw

Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-1ce9-31b4-54b7-a43a0d006a52

Issued an access token with 'voip' scope that expires at 10/11/2022 7:34:29 AM +00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw

Successfully revoked all access tokens for identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

Deleted the identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

先决条件

最终代码

GitHub 上查找此快速入门的最终代码。

设置你的环境

创建新的 Node.js 应用程序

在终端或命令提示符窗口中,为你的应用创建一个新目录,然后打开此目录。

mkdir access-tokens-quickstart && cd access-tokens-quickstart

运行 npm init -y 以使用默认设置创建 package.json 文件。

npm init -y

安装包

使用 npm install 命令安装适用于 JavaScript 的 Azure 通信服务标识 SDK。

npm install @azure/communication-identity@latest --save

--save 选项将该库作为 package.json 文件中的依赖项列出。

设置应用框架

  1. 在项目目录中创建一个名为 issue-access-token.js 的文件,并添加以下代码:

    const { CommunicationIdentityClient } = require('@azure/communication-identity');
    
    const main = async () => {
      console.log("Azure Communication Services - Access Tokens Quickstart")
    
      // Quickstart code goes here
    };
    
    main().catch((error) => {
      console.log("Encountered an error");
      console.log(error);
    })
    

验证客户端

使用连接字符串实例化 CommunicationIdentityClient。 你添加到 Main 方法中的以下代码将从名为 COMMUNICATION_SERVICES_CONNECTION_STRING 的环境变量中检索资源的连接字符串。

有关详细信息,请参阅创建和管理通信服务资源的“存储连接字符串”部分。

// This code demonstrates how to fetch your connection string
// from an environment variable.
const connectionString = process.env['COMMUNICATION_SERVICES_CONNECTION_STRING'];

// Instantiate the identity client
const identityClient = new CommunicationIdentityClient(connectionString);

或者,你可以通过运行以下代码来分离终结点和访问密钥:

// This code demonstrates how to fetch your endpoint and access key
// from an environment variable.
const endpoint = process.env["COMMUNICATION_SERVICES_ENDPOINT"];
const accessKey = process.env["COMMUNICATION_SERVICES_ACCESSKEY"];

// Create the credential
const tokenCredential = new AzureKeyCredential(accessKey);

// Instantiate the identity client
const identityClient = new CommunicationIdentityClient(endpoint, tokenCredential)

如果已设置 Microsoft Entra 应用程序,则可以使用 Microsoft Entra ID 进行身份验证

const endpoint = process.env["COMMUNICATION_SERVICES_ENDPOINT"];
const tokenCredential = new DefaultAzureCredential();
const identityClient = new CommunicationIdentityClient(endpoint, tokenCredential);

创建标识

若要创建访问令牌,需要一个标识。 为此,Azure 通信服务维护了一个轻量级标识目录。 使用 createUser 方法可在目录中创建具有唯一 Id 的新项。 稍后颁发访问令牌时需要该标识。

let identityResponse = await identityClient.createUser();
console.log(`\nCreated an identity with ID: ${identityResponse.communicationUserId}`);

存储接收到的标识并映射到应用程序的用户(例如,通过将其存储在应用程序服务器数据库中)。

发布访问令牌

使用 getToken 方法为你的通信服务标识颁发访问令牌。 scopes 参数定义了一组访问令牌权限和角色。 有关详细信息,请参阅标识模型中受支持的操作列表。 还可以基于 Azure 通信服务标识的字符串表示构造 communicationUser 的一个新实例。

// Issue an access token with a validity of 24 hours and the "voip" scope for an identity
let tokenResponse = await identityClient.getToken(identityResponse, ["voip"]);

// Get the token and its expiration date from the response
const { token, expiresOn } = tokenResponse;
console.log(`\nIssued an access token with 'voip' scope that expires at ${expiresOn}:`);
console.log(token);

访问令牌是短期凭据,需要重新颁发。 如果不重新颁发,可能会导致应用程序用户的体验中断。 expiresOn 属性指示访问令牌的生存期。

设置自定义令牌过期时间

默认令牌过期时间为 24 小时(1440 分钟),但可以通过为可选参数 tokenExpiresInMinutes 提供一个介于 60 分钟到 1440 分钟之间的值来配置它。 请求新令牌时,建议为令牌过期时间指定通信会话的预期典型时长。

// Issue an access token with a validity of an hour and the "voip" scope for an identity
const tokenOptions: GetTokenOptions = { tokenExpiresInMinutes: 60 };
let tokenResponse = await identityClient.getToken
(identityResponse, ["voip"], tokenOptions);

在一个方法调用中创建标识并颁发令牌

可以使用 createUserAndToken 方法来同时创建通信服务标识并为其颁发访问令牌。 scopes 参数定义了一组访问令牌权限和角色。 同样,你使用 voip 范围创建标识。

// Issue an identity and an access token with a validity of 24 hours and the "voip" scope for the new identity
let identityTokenResponse = await identityClient.createUserAndToken(["voip"]);

// Get the token, its expiration date, and the user from the response
const { token, expiresOn, user } = identityTokenResponse;
console.log(`\nCreated an identity with ID: ${user.communicationUserId}`);
console.log(`\nIssued an access token with 'voip' scope that expires at ${expiresOn}:`);
console.log(token);

刷新访问令牌

令牌过期后,需要定期刷新令牌。 刷新很容易,只需使用与发行令牌相同的身份再次调用 getToken 即可。 还需要提供已刷新令牌的 scopes

// Value of identityResponse represents the Azure Communication Services identity stored during identity creation and then used to issue the tokens being refreshed
let refreshedTokenResponse = await identityClient.getToken(identityResponse, ["voip"]);

撤销访问令牌

你有时可能需要撤销访问令牌。 例如,当应用程序用户更改了自身用于向你的服务进行身份验证的密码时,你可能要执行此操作。 revokeTokens 方法使颁发给标识的所有活动访问令牌无效。

await identityClient.revokeTokens(identityResponse);

console.log(`\nSuccessfully revoked all access tokens for identity with ID: ${identityResponse.communicationUserId}`);

删除标识

当你删除一个标识时,你将撤销所有活动的访问令牌并阻止进一步为该标识颁发访问令牌。 还会删除与该标识关联的所有持久内容。

await identityClient.deleteUser(identityResponse);

console.log(`\nDeleted the identity with ID: ${identityResponse.communicationUserId}`);

运行代码

在控制台提示符下,转到包含 issue-access-token.js 文件的目录,然后执行以下 node 命令来运行应用:

node ./issue-access-token.js

应用的输出描述了每个已完成的操作:

Azure Communication Services - Access Tokens Quickstart

Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

Issued an access token with 'voip' scope that expires at 2022-10-11T07:34:29.9028648+00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw

Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-1ce9-31b4-54b7-a43a0d006a52

Issued an access token with 'voip' scope that expires at 2022-10-11T07:34:29.9028648+00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw

Successfully revoked all access tokens for identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

Deleted the identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

先决条件

最终代码

GitHub 上查找此快速入门的最终代码。

设置你的环境

创建新的 Python 应用程序

  1. 在终端或命令提示符窗口中,为你的应用创建一个新目录,然后打开此目录。

    mkdir access-tokens-quickstart && cd access-tokens-quickstart
    
  2. 使用文本编辑器在项目根目录中创建名为 issue-access-tokens.py 的文件,并添加程序的结构,包括基本异常处理。 将在以下部分中将此快速入门的所有源代码添加到此文件。

    import os
    from datetime import timedelta
    from azure.communication.identity import CommunicationIdentityClient, CommunicationUserIdentifier
    
    try:
       print("Azure Communication Services - Access Tokens Quickstart")
       # Quickstart code goes here
    except Exception as ex:
       print("Exception:")
       print(ex)
    

安装包

如果你仍在应用程序目录中,可以使用 pip install 命令安装适用于 Python 包的 Azure 通信服务标识 SDK。

pip install azure-communication-identity

验证客户端

使用连接字符串实例化 CommunicationIdentityClient。 你添加到 try 块中的以下代码将从名为 COMMUNICATION_SERVICES_CONNECTION_STRING 的环境变量中检索资源的连接字符串。

有关详细信息,请参阅创建和管理通信服务资源的“存储连接字符串”部分。

# This code demonstrates how to retrieve your connection string
# from an environment variable.
connection_string = os.environ["COMMUNICATION_SERVICES_CONNECTION_STRING"]

# Instantiate the identity client
client = CommunicationIdentityClient.from_connection_string(connection_string)

或者,如果已设置 Microsoft Entra 应用程序,则可以使用 Microsoft Entra ID 进行身份验证

endpoint = os.environ["COMMUNICATION_SERVICES_ENDPOINT"]
client = CommunicationIdentityClient(endpoint, DefaultAzureCredential())

创建标识

若要创建访问令牌,需要一个标识。 为此,Azure 通信服务维护了一个轻量级标识目录。 使用 create_user 方法可在目录中创建具有唯一 Id 的新项。 稍后颁发访问令牌时需要该标识。

identity = client.create_user()
print("\nCreated an identity with ID: " + identity.properties['id'])

存储接收到的标识并映射到应用程序的用户(例如,通过将其存储在应用程序服务器数据库中)。

发布访问令牌

使用 get_token 方法为你的通信服务标识颁发访问令牌。 scopes 参数定义了一组访问令牌权限和角色。 有关详细信息,请参阅标识模型中受支持的操作列表。 还可以基于 Azure 通信服务标识的字符串表示构造参数 CommunicationUserIdentifier 的一个新实例。

# Issue an access token with a validity of 24 hours and the "voip" scope for an identity
token_result = client.get_token(identity, ["voip"])
print("\nIssued an access token with 'voip' scope that expires at " + token_result.expires_on + ":")
print(token_result.token)

访问令牌是短期凭据,需要重新颁发。 如果不重新颁发,可能会导致应用程序用户的体验中断。 expires_on 响应属性指示访问令牌的生存期。

设置自定义令牌过期时间

默认令牌过期时间为 24 小时,但可以通过为可选参数 token_expires_in 提供一个介于一小时到 24 小时之间的值来配置它。 请求新令牌时,建议为令牌过期时间指定通信会话的预期典型时长。

# Issue an access token with a validity of an hour and the "voip" scope for an identity
token_expires_in = timedelta(hours=1)
token_result = client.get_token(identity, ["voip"], token_expires_in=token_expires_in)

在同一请求中创建标识并颁发访问令牌

可以使用 create_user_and_token 方法来同时创建通信服务标识并为其颁发访问令牌。 scopes 参数定义了一组访问令牌权限和角色。 有关详细信息,请参阅向 Azure 通信服务进行身份验证中列出的支持的操作。

# Issue an identity and an access token with a validity of 24 hours and the "voip" scope for the new identity
identity_token_result = client.create_user_and_token(["voip"])

# Get the token details from the response
identity = identity_token_result[0]
token = identity_token_result[1].token
expires_on = identity_token_result[1].expires_on
print("\nCreated an identity with ID: " + identity.properties['id'])
print("\nIssued an access token with 'voip' scope that expires at " + expires_on + ":")
print(token)

刷新访问令牌

要刷新访问令牌,请使用 CommunicationUserIdentifier 对象通过传入现有身份重新颁发令牌:

# The existingIdentity value represents the Communication Services identity that's stored during identity creation
identity = CommunicationUserIdentifier(existingIdentity)
token_result = client.get_token(identity, ["voip"])

撤销访问令牌

你有时可能需要显式撤销访问令牌。 例如,当应用程序用户更改了自身用于向你的服务进行身份验证的密码时,你可能要执行此操作。 revoke_tokens 方法使颁发给标识的所有活动访问令牌无效。

client.revoke_tokens(identity)
print("\nSuccessfully revoked all access tokens for identity with ID: " + identity.properties['id'])

删除标识

当你删除一个标识时,你将撤销所有活动的访问令牌并阻止进一步为该标识颁发访问令牌。 还会删除与该标识关联的所有持久内容。

client.delete_user(identity)
print("\nDeleted the identity with ID: " + identity.properties['id'])

运行代码

在控制台提示符下,转到包含 issue-access-token.py 文件的目录,然后执行以下 python 命令来运行应用。

python ./issue-access-tokens.py

应用的输出描述了每个已完成的操作:

Azure Communication Services - Access Tokens Quickstart

Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

Issued an access token with 'voip' scope that expires at 2022-10-11T07:34:29.9028648+00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw

Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-1ce9-31b4-54b7-a43a0d006a52

Issued an access token with 'voip' scope that expires at 2022-10-11T07:34:29.9028648+00:00:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw

Successfully revoked all access tokens for identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

Deleted the identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

先决条件

最终代码

GitHub 上查找此快速入门的最终代码。

设置你的环境

创建新的 Java 应用程序

在终端或命令提示符窗口中,转到要创建 Java 应用程序的目录。 要从 maven-archetype-quickstart 模板生成 Java 项目,请运行以下命令:

mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

你会注意到,generate 任务创建了与 artifactId 名称相同的目录。 在此目录下,src/main/java 目录包含项目源代码,src/test/java 目录包含测试源,pom.xml 文件是项目的项目对象模型 (POM)。 此文件用于项目配置参数。

安装通信服务包

在文本编辑器中打开 pom.xml 文件。 将以下依赖项元素添加到依赖项组:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-communication-identity</artifactId>
    <version>[1.4.0,)</version>
</dependency>

此代码指示 Maven 安装通信服务标识 SDK,稍后将使用该 SDK。

设置应用框架

在项目目录中执行以下操作:

  1. 转到 /src/main/java/com/communication/quickstart 目录。
  2. 在编辑器中打开 App.java 文件。
  3. 替换 System.out.println("Hello world!"); 语句。
  4. 添加 import 指令。

使用以下代码以开始执行以下操作:

package com.communication.quickstart;

import com.azure.communication.common.*;
import com.azure.communication.identity.*;
import com.azure.communication.identity.models.*;
import com.azure.core.credential.*;

import java.io.IOException;
import java.time.*;
import java.util.*;

public class App
{
    public static void main( String[] args ) throws IOException
    {
        System.out.println("Azure Communication Services - Access Tokens Quickstart");
        // Quickstart code goes here
    }
}

验证客户端

使用资源的访问密钥和终结点将 CommunicationIdentityClient 实例化。 有关详细信息,请参阅创建和管理通信服务资源的“存储连接字符串”部分。

你还可以用任何实现 com.azure.core.http.HttpClient 接口的自定义 HTTP 客户端对此客户端进行初始化。

在 App.java 文件中,将以下代码添加到 main 方法中:

// You can find your endpoint and access key from your resource in the Azure portal
String endpoint = "https://<RESOURCE_NAME>.communication.azure.com";
String accessKey = "SECRET";

CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClientBuilder()
        .endpoint(endpoint)
        .credential(new AzureKeyCredential(accessKey))
        .buildClient();

你可以使用 connectionString() 方法提供整个连接字符串,而不是提供终结点和访问密钥。

// You can find your connection string from your Communication Services resource in the Azure portal
String connectionString = "<connection_string>";

CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClientBuilder()
    .connectionString(connectionString)
    .buildClient();

如果已设置 Microsoft Entra 应用程序,则可以使用 Microsoft Entra ID 进行身份验证

String endpoint = "https://<RESOURCE_NAME>.communication.azure.com";
TokenCredential credential = new DefaultAzureCredentialBuilder().build();

CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClientBuilder()
        .endpoint(endpoint)
        .credential(credential)
        .buildClient();

创建标识

若要创建访问令牌,需要一个标识。 为此,Azure 通信服务维护了一个轻量级标识目录。 使用 createUser 方法可在目录中创建具有唯一 Id 的新项。

CommunicationUserIdentifier user = communicationIdentityClient.createUser();
System.out.println("\nCreated an identity with ID: " + user.getId());

稍后颁发访问令牌时需要之前创建的标识。 存储接收到的标识并映射到应用程序的用户(例如,通过将其存储在应用程序服务器数据库中)。

发布访问令牌

使用 getToken 方法为你的通信服务标识颁发访问令牌。 scopes 参数定义了一组访问令牌权限和角色。 有关详细信息,请参阅标识模型中受支持的操作列表。

在以下代码中,使用你在上一步中创建的用户变量来获取令牌。

// Issue an access token with a validity of 24 hours and the "voip" scope for a user identity
List<CommunicationTokenScope> scopes = new ArrayList<>(Arrays.asList(CommunicationTokenScope.VOIP));
AccessToken accessToken = communicationIdentityClient.getToken(user, scopes);
OffsetDateTime expiresAt = accessToken.getExpiresAt();
String token = accessToken.getToken();
System.out.println("\nIssued an access token with 'voip' scope that expires at: " + expiresAt + ": " + token);

访问令牌是短期凭据,需要重新颁发。 如果不重新颁发,可能会导致应用程序用户的体验中断。 expiresAt 属性指示访问令牌的生存期。

设置自定义令牌过期时间

默认令牌过期时间为 24 小时,但可以通过为可选参数 tokenExpiresIn 提供一个介于一小时到 24 小时之间的值来配置它。 请求新令牌时,建议为令牌过期时间指定通信会话的预期典型时长。

// Issue an access token with a validity of an hour and the "voip" scope for a user identity
List<CommunicationTokenScope> scopes = new ArrayList<>(Arrays.asList(CommunicationTokenScope.VOIP));
Duration tokenExpiresIn = Duration.ofHours(1);
AccessToken accessToken = communicationIdentityClient.getToken(user, scopes, tokenExpiresIn);

在一个请求中创建标识并颁发令牌

另外,还可以使用“createUserAndToken”方法以同时在目录中创建一个具有唯一 Id 的新条目,并颁发一个访问令牌。

//Create an identity and issue token with a validity of 24 hours in one call
List<CommunicationTokenScope> scopes = Arrays.asList(CommunicationTokenScope.CHAT);
CommunicationUserIdentifierAndToken result = communicationIdentityClient.createUserAndToken(scopes);
CommunicationUserIdentifier user = result.getUser();
System.out.println("\nCreated a user identity with ID: " + user.getId());
AccessToken accessToken = result.getUserToken();
OffsetDateTime expiresAt = accessToken.getExpiresAt();
String token = accessToken.getToken();
System.out.println("\nIssued an access token with 'chat' scope that expires at: " + expiresAt + ": " + token);

刷新访问令牌

若要刷新访问令牌,请使用 CommunicationUserIdentifier 对象重新颁发:

// existingIdentity represents the Communication Services identity that's stored during identity creation
CommunicationUserIdentifier identity = new CommunicationUserIdentifier(existingIdentity.getId());
AccessToken response = communicationIdentityClient.getToken(identity, scopes);

撤销访问令牌

你有时可能需要显式撤销访问令牌。 例如,当应用程序用户更改了自身用于向你的服务进行身份验证的密码时,你可能要执行此操作。 revokeTokens 方法使特定用户的所有活动访问令牌无效。 在下面的代码中,可以使用以前创建的用户。

communicationIdentityClient.revokeTokens(user);
System.out.println("\nSuccessfully revoked all access tokens for user identity with ID: " + user.getId());

删除标识

当你删除一个标识时,你将撤销所有活动的访问令牌并阻止进一步为该标识颁发访问令牌。 还会删除与该标识关联的所有持久内容。

communicationIdentityClient.deleteUser(user);
System.out.println("\nDeleted the user identity with ID: " + user.getId());

运行代码

转到包含 pom.xml 文件的目录,并使用以下 mvn 命令编译该项目:

mvn compile

然后生成包:

mvn package

运行以下 mvn 命令以执行应用:

mvn exec:java -Dexec.mainClass="com.communication.quickstart.App" -Dexec.cleanupDaemonThreads=false

应用的输出描述了每个已完成的操作:

Azure Communication Services - Access Tokens Quickstart

Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

Issued an access token with 'voip' scope that expires at 2022-10-11T07:34:29.902864800Z:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw

Created an identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-1ce9-31b4-54b7-a43a0d006a52

Issued an access token with 'chat' scope that expires at 2022-10-11T07:34:29.902864800Z:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMF8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJzY3AiOjE3OTIsImNzaSI6IjE2NjUzODcyNjkiLCJleHAiOjE2NjUzOTA4NjksImFjc1Njb3BlIjoidm9pcCIsInJlc291cmNlSWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY1Mzg3MjY5fQ.kTXpQQtY7w6O82kByljZXrKtBvNNOleDE5m06LapzLeoWfRZCCpJQcDzBoLRA146mOhNzLZ0b5WMNTa5tD-0hWCiicDwgKLMASEGY9g0EvNQOidPff47g2hh6yqi9PKiDPp-t5siBMYqA6Nh6CQ-Oeh-35vcRW09VfcqFN38IgSSzJ7QkqBiY_QtfXz-iaj81Td0287KO4U1y2LJIGiyJLWC567F7A_p1sl6NmPKUmvmwM47tyCcQ1r_lfkRdeyDmcrGgY6yyI3XJZQbpxyt2DZqOTSVPB4PuRl7iyXxvppEa4Uo_y_BdMOOWFe6YTRB5O5lhI8m7Tf0LifisxX2sw

Successfully revoked all access tokens for identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

Deleted the identity with ID: 8:acs:4ccc92c8-9815-4422-bddc-ceea181dc774_00000006-19e0-2727-80f5-8b3a0d003502

先决条件

创建访问令牌

Azure 门户中,导航到通信服务资源中的“标识和用户访问令牌”

选择访问令牌的作用域。 可全部不选,或选择一个、多个。 单击“生成” 。

选择标识和访问令牌的作用域。

你会看到生成的标识和对应的用户访问令牌。 可以复制这些字符串,将其用于示例应用和其他测试场景。

将生成标识和访问令牌并显示到期日期。

先决条件

创建用户

使用 Azure 通信服务标识连接器在工作流中添加新步骤,在 Power Automate 中按照这些步骤操作,并在编辑模式下打开 Power Automate 流。

  1. 在设计器中,在要添加新操作的步骤下,选择“新建步骤”。 或者,若要在步骤之间添加新操作,请将指针移到这些步骤之间的箭头上方,选择加号 (+),然后选择“添加操作”。

  2. 在“选择操作”搜索框中,输入通信服务标识。 从操作列表中,选择“创建用户”。

    显示 Azure 通信服务标识连接器“创建用户”操作的屏幕截图。

  3. 提供连接字符串。 这可以在 Microsoft Azure 中找到,位于 Azure 通信服务资源左侧菜单“密钥”选项上的“连接字符串”中

    显示 Azure 通信服务资源中的“密钥”页面的屏幕截图。

  4. 提供连接名称

  5. 单击“创建”

    此操作将输出一个用户 ID,即通信服务用户标识。 此外,如果单击“显示高级选项”并选择令牌范围,该操作还将输出指定范围内的访问令牌及其到期时间。

    显示 Azure 通信服务连接器“创建用户”操作的屏幕截图。

    显示 Azure 通信服务连接器“创建用户操作”高级选项的屏幕截图。

颁发用户访问令牌

拥有通信服务标识后,可以使用“颁发用户访问令牌”操作来颁发访问令牌。 以下步骤将展示如何:

  1. 添加新操作并在搜索框中输入通信服务标识。 从操作列表中,选择“颁发用户访问令牌”。

    显示 Azure 通信服务标识连接器“颁发访问令牌操作”的屏幕截图。

  2. 然后,可以使用上一个创建用户步骤的用户 ID 输出。

  3. 指定令牌范围:VoIP 或聊天。 了解有关令牌和身份验证的详细信息

    显示 Azure 通信服务标识连接器“颁发访问令牌”操作的屏幕截图,其中指定了令牌范围。

这将在指定范围内输出访问令牌及其到期时间。

调用用户访问令牌

获得通信服务标识后,可以使用“颁发用户访问令牌”操作来撤销访问令牌。 以下步骤将展示如何:

  1. 添加新操作并在搜索框中输入通信服务标识。 从操作列表中,选择“撤销用户访问令牌”。

    显示 Azure 通信服务标识连接器“撤销访问令牌”操作的屏幕截图。

  2. 指定用户 ID

    显示 Azure 通信服务标识连接器“撤销访问令牌”操作输入的屏幕截图。

这将撤销指定用户的所有用户访问令牌,此操作没有输出。

删除用户

拥有通信服务标识后,可以使用“颁发用户访问令牌”操作删除访问令牌。 以下步骤将展示如何:

  1. 添加新操作并在搜索框中输入通信服务标识。 从操作列表中,选择“删除用户”。

    显示 Azure 通信服务标识连接器“删除用户”操作的屏幕截图。

  2. 指定用户 ID

    显示 Azure 通信服务标识连接器“删除用户”操作输入的屏幕截图。

    这将删除用户并撤销指定用户的所有用户访问令牌,此操作没有输出。

测试逻辑应用

若要手动启动工作流,请在设计器工具栏中选择“运行”。 工作流应创建用户,为该用户颁发访问令牌,然后将其删除并删除该用户。 有关详细信息,请查看如何运行工作流。 可以在工作流成功运行后检查这些操作的输出。

使用标识来获取监视和指标数据

用户 ID 可充当主键,用于获取通过 Azure Monitor 收集的日志和指标。 例如,要查看特定用户所有通话的视图,则可以以将一个或多个特定 Azure 通信服务标识映射到单个用户的方式来设置身份验证。

详细了解身份验证概念,通过 Log Analytics 调用诊断,以及可用的指标

清理资源

若要清理并删除通信服务订阅,请删除资源或资源组。 删除资源组时也会删除与之关联的任何其他资源: 有关详细信息,请参阅创建和管理通信服务资源的“清理资源”部分。

要清理逻辑应用工作流和相关资源,请参阅如何清理 Azure 逻辑应用资源

后续步骤

在此快速入门中,读者学习了如何:

  • 颁发访问令牌
  • 管理标识

你可能还需要:

后续步骤

在本快速入门中,你了解了如何使用 Azure 通信服务标识连接器创建用户、删除用户、向用户颁发访问令牌以及删除用户访问令牌。 要了解详细信息,请查看 Azure 通信服务标识连接器文档。

要了解其他连接器如何使用令牌,请查看如何使用 Azure 通信服务从 Power Automate 发送聊天消息

要详细了解如何使用 Azure 通信服务电子邮件连接器发送电子邮件,请查看使用 Azure 通信服务在 Power Automate 中发送电子邮件