你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Important
Azure 通信服务的这一功能目前以预览版提供。 预览版中的功能已公开发布,可供所有新客户和现有Microsoft客户使用。
预览版 API 和 SDK 在没有服务级别协议的情况下提供。 建议不要将它们用于生产工作负荷。 某些功能可能不受支持,或者功能可能受到限制。
有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款。
本快速入门演示如何在控制台应用程序中使用通信服务通用 SDK 和 Azure 标识 SDK 对Microsoft Entra ID 用户进行身份验证并获取 Azure 通信服务访问令牌。 生成的 Azure 通信服务访问令牌允许你使用通信服务呼叫 SDK 集成呼叫功能。 公共预览版不支持通过 Microsoft Entra ID 集成进行消息传送(聊天)。
Prerequisites
- 拥有有效订阅的 Azure 帐户。 免费创建帐户。
- 一个有效的 Azure 通信服务资源和终结点 URI。 有关详细信息,请参阅创建 Azure 通信服务资源。
- Microsoft Entra ID 实例。 有关详细信息,请参阅 Microsoft Entra ID 概述。
Introduction
应用程序可以支持来自同一租户或不同租户的用户。 在本快速入门中,你将探索一个涉及虚构公司 Contoso 和 Fabrikam 的用户、开发人员和管理员的多租户场景。 在此示例中,Contoso 正在为 Fabrikam 提供软件即服务(SaaS)解决方案。
以下部分将指导你完成管理员、开发人员和用户所需的步骤。 所包含的图表说明了多租户场景。 如果在单租户环境中工作,请完成同一租户中 Contoso 和 Fabrikam 的所有步骤。
管理员操作
管理员角色在 Microsoft Entra ID 中拥有扩展权限。 此角色的成员可以设置和管理资源。 在下图中,可以看到必须由管理员执行的所有操作。
- Contoso 管理员在 Contoso Microsoft Entra ID 租户中为通信服务客户端应用程序创建服务主体。 此步骤是允许 Contoso 应用程序访问通信服务客户端应用程序 API 权限所必需的。
- Contoso 管理员在 Microsoft Entra ID 中创建或选择现有应用程序。 属性“支持的帐户类型”定义不同租户中的用户是否可以向应用程序进行身份验证。 属性“重定向 URI”将成功的身份验证请求重定向到 Contoso 客户端应用程序。
- Contoso 管理员从通信服务客户端应用程序添加所需的 API 权限。 有关权限的完整列表,请参阅 具有 Microsoft Entra ID 的访问令牌。 (在公共预览版中,仅提供与 VoIP 相关的权限;尚不支持聊天权限。
- Contoso 管理员创建或选择现有的通信服务。 Contoso 管理员授予 Fabrikam Entra ID 用户对 Contoso Azure 通信服务资源的访问权限。 Azure 通信服务 Common SDK 将用于Microsoft Entra ID 用户身份验证,并在后台无缝获取 Microsoft Entra ID 用户的 Azure 通信服务访问令牌。
- Fabrikam 管理员向 Contoso 应用程序授予管理员同意,这是应用程序获得通讯服务客户端应用程序 API 访问权限所需要的。
步骤 1:为 Azure 通信服务客户端应用程序创建服务主体
若要使 Contoso 应用程序能够访问 Azure 通信服务客户端应用程序 API 权限,Contoso 管理员必须在 Contoso Microsoft Entra ID 租户中创建 Azure 通信服务客户端应用程序的服务主体。 Contoso 管理员可以通过以下方式之一在 Contoso 租户中创建服务主体:
- 使用 Microsoft Graph REST API 运行以下请求:
POST https://graph.microsoft.com/v1.0/servicePrincipals
Content-Type: application/json
{
"appId": "2a04943b-b6a7-4f65-8786-2bb6131b59f6"
}
此请求也可以在 Graph 浏览器中执行。 请确保在 URL https://developer.microsoft.com/graph/graph-explorer?tenant={tenant domain} 中包含完整的租户域,然后登录并给予 Application.ReadWrite.All 權限同意。
- 使用 Azure CLI 运行以下命令:
az ad sp create --id 2a04943b-b6a7-4f65-8786-2bb6131b59f6
步骤 2:创建Microsoft Entra 应用程序注册,或选择Microsoft Entra 应用程序
必须使用 Azure 通信服务客户端应用程序 API 权限对 Microsoft Entra 应用程序进行身份验证。 如果你没有要用于本快速入门的现有应用程序,可以创建新的应用程序注册。
以下应用程序设置会影响体验:
- “支持的帐户类型”属性定义应用程序是单租户(“仅此组织目录中的帐户”)还是多租户(“任何组织目录中的帐户”)。 对于本方案,可以使用多租户。
- “重定向 URI”定义在完成身份验证后要将身份验证请求重定向到的 URI。
有关详细信息,请参阅将应用程序注册到 Microsoft 标识平台。
步骤 3:在应用程序中添加 Azure 通信服务客户端权限
应用程序必须声明 Azure 通信服务客户端才能访问 Azure 通信服务功能。 Microsoft Entra ID 用户将请求具有这些权限的 Microsoft Entra 用户令牌。
Important
消息传送 (聊天) API 权限 (Chat, , Chat.JoinChat.Join.Limited) 在 Microsoft Entra ID 公共预览版中不可用。 在此预览期间,只能通过 Entra ID 集成授予和使用与 VoIP 相关的权限(VoIP, VoIP.Join)。
- 在 Azure 门户中导航到 Microsoft Entra 应用,然后选择“API 权限”
- 选择“添加权限”
- 在“添加权限”菜单中,选择组织使用的 API
- 搜索并选择 Azure 通信服务客户端
- 根据需要选择 VoIP 权限(以及任何其他与 VoIP 相关的权限(如 VoIP.Join),然后选择“添加权限”
- 对委托的所有权限授予管理员同意。
步骤 4:创建或选择通信服务资源,并向 Entra ID 用户授予其访问权限
Azure 通信服务资源用于对来自 Microsoft Entra ID 用户的所有请求进行身份验证,并向其授予对资源的访问权限。
如果要创建新的通信服务资源,请参阅创建和管理通信服务资源。
Contoso 管理员可以通过 Azure 门户或使用 Entra ID 分配 REST API 为 Fabrikam Entra ID 用户提供对 Contoso Azure 通信服务资源的访问权限。
目前,通过 Azure 门户分配对 Azure 通信服务资源的访问权限是一项预览功能。 若要访问它,请使用此 URL 启动 Azure 门户 - 已启用访问分配预览的 Azure 门户。 在 Azure 门户中,请执行以下步骤:
- 转到通信服务资源。
- 在左窗格中,选择Entra ID 的用户访问权限在设置组下。
- 单击“添加”按钮,提供对 Entra 用户、组或整个租户的访问权限。
- 在“主体类型”中,选择正确的值。 在此方案中,Contoso Admin 为 Fabrikam 租户中的组提供访问权限,并选择“组”。
- 在“对象 ID”字段中,输入 Fabrikam Microsoft Entra 租户中组的对象 ID。
- 在“租户 ID”字段中,输入 Fabrikam Microsoft Entra 租户的租户 ID。
- 在“客户端 ID”字段中,输入步骤 2 中的 Contoso 应用程序的客户端 ID。
- 单击“ 保存”并退出 以应用更改。
步骤 5:向管理员提供对 Azure 通信服务客户端应用程序的管理员同意和组访问权限
Microsoft Entra 租户可以配置为需要 Microsoft Entra 管理员同意才能获得 Azure 通信服务客户端应用程序 API 权限。 在这种情况下,Microsoft Entra Administrator 必须向 Contoso 应用程序授予 Azure 通信服务客户端 API 权限的权限。 Fabrikam Microsoft Entra 管理员通过唯一的 URL 提供同意。
以下角色可代表公司同意:
- 全局管理员
- 应用程序管理员
- 云应用程序管理员
如需在 Azure 门户中查看角色,请参阅列出 Azure 角色分配。
若要构造管理员同意 URL,Fabrikam Microsoft Entra 管理员需执行以下步骤:
- 在 URL
https://login.microsoftonline.com/{Tenant_ID}/adminconsent?client_id={Application_ID}中,管理员将 {Tenant_ID} 替换为 Fabrikam 租户 ID,并将 {Application_ID} 替换为 Contoso 应用程序 ID。 - 管理员登录并代表组织授予权限。
如果授予了同意,则会在 Fabrikam 租户中创建 Contoso 应用程序的服务主体。 Fabrikam 的管理员可以通过执行以下步骤来审查 Microsoft Entra ID 中的同意:
- 以管理员身份登录到 Azure 门户。
- 转到“Microsoft Entra ID”。
- 在“企业应用程序”窗格中,将“应用程序类型”筛选器设置为“所有应用程序”。
- 在用于筛选应用程序的字段中,输入 Contoso 应用程序的名称。
- 选择应用。
- 使用所需的名称选择服务主体。
- 转到“权限”窗格。
您可以看到,通信服务客户端应用程序的 API 权限状态为 已授予 {Directory_name}。
如果遇到问题:“应用正在尝试访问服务 2a04943b-b6a7-4f65-8786-2bb6131b59f6(Azure 通信服务客户端),但您的组织 {GUID} 缺少服务主体。” 需要按照步骤 1 中的说明为租户创建服务 主体:为 Azure 通信服务客户端应用程序创建服务主体。
仅当 Contoso 管理员在上一步中提供了对 Contoso Azure 通信服务资源的组访问权限时,才应提供对 Azure 通信服务客户端应用程序的组访问权限。 对于用户或整个租户对 Azure 通信服务资源的访问权限,Fabrikam 管理员可以跳过此步骤。
基于组的分配需要使用 Microsoft Entra ID P1 或 P2 版本。 Fabrikam 管理员可以使用 Microsoft Entra 管理中心从 Fabrikam 租户提供对组的访问权限。 若要提供对组的访问权限,Fabrikam 管理员将执行以下步骤:
- 使用全局管理员或租户管理员角色登录到 Microsoft Entra 管理中心。
- 在左侧面板菜单中导航到 Identity > Applications > Enterprise 应用程序 。
- 在搜索框中,输入 Azure 通信服务客户端,然后从搜索结果中选择应用程序。
- 在左侧面板菜单中,选择 “用户和组 ”,然后选择“ 添加用户/组”。
- 在“添加分配”窗格中,选择“用户和组”下的“未选择任何内容”。
- 搜索并选择要分配给应用程序的组。
- 单击“选择”,然后选择“分配”以将组分配到应用程序。
开发人员操作
Contoso 开发人员需要设置客户端应用程序来对用户进行身份验证。 在客户端应用程序中,开发人员使用通信通用 SDK 创建凭据,并创建来自 Azure 标识 SDK 的 TokenCredential 的任何实现,该实现能够针对 Microsoft Entra ID 应用程序对用户进行身份验证。
下图显示了开发人员所需的操作:
- Contoso 开发人员初始化来自 Azure 标识 SDK 的
TokenCredential的任何实现,该实现能够获取 Contoso 管理员之前创建的应用程序 Microsoft Entra 用户令牌。 - Contoso 开发人员初始化来自通信服务 Common SDK 中的
AzureCommunicationTokenCredential以及在第 1 步创建的TokenCredential。AzureCommunicationTokenCredential在后台流畅地获取了 Microsoft Entra ID 用户适用的 Azure 通信服务访问令牌。
Note
以下部分介绍如何创建 AzureCommunicationTokenCredential。
设置先决条件
- 适用于操作系统的最新版本 .NET SDK。
- 用于 .NET 的 Azure 标识 SDK ,以便使用 Microsoft Entra ID 进行身份验证。
- 用于 .NET 的 Azure 通信服务通用 SDK ,用于获取 Microsoft Entra ID 用户的 Azure 通信服务访问令牌。
最终代码
在 GitHub 上查找此快速入门的最终代码。
设置
新建 C# 应用程序
在控制台窗口(例如 cmd、PowerShell 或 Bash)中,使用 dotnet new 命令创建名为 EntraIdUsersSupportQuickstart 的新控制台应用。 此命令使用单个源文件创建一个简单的“Hello World”C# 项目: Program.cs。
dotnet new console -o EntraIdUsersSupportQuickstart
将目录更改为新创建的应用文件夹,并使用 dotnet build 命令编译应用程序。
cd EntraIdUsersSupportQuickstart
dotnet build
安装软件包
在应用程序目录中,使用 dotnet add package 命令安装用于 .NET 包的 Azure 标识和 Azure 通信服务通用库。 Azure 通信服务通用 SDK 版本应为 1.4.0 或更高版本。
dotnet add package Azure.Identity
dotnet add package Azure.Communication.Common
实现凭据流
从项目目录中执行以下操作:
- 在文本编辑器中打开 Program.cs 文件
- 将 Program.cs 的内容替换为以下代码:
using Azure.Communication;
using Azure.Identity;
namespace EntraIdUsersSupportQuickstart
{
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("Azure Communication Services - Obtain Access Token for Entra ID User Quickstart");
// Quickstart code goes here
}
}
}
步骤 1:从 Azure 标识 SDK 初始化 TokenCredential 的实现
为 Entra ID 用户获取通信服务访问令牌的第一步是使用 Azure 标识 SDK 为 Entra ID 使用者获取 Entra ID 访问令牌。 下面的代码从名为 ENTRA_CLIENT_ID 和 ENTRA_TENANT_ID 的环境变量中检索 Contoso Entra 客户端 ID 和 Fabrikam 租户 ID。 若要为跨多个租户的用户启用身份验证,请初始化 InteractiveBrowserCredential 类别并将授权设置为 https://login.microsoftonline.com/organizations。 有关详细信息,请参阅颁发机构。
// This code demonstrates how to fetch your Microsoft Entra client ID and tenant ID from environment variables.
string clientId = Environment.GetEnvironmentVariable("ENTRA_CLIENT_ID");
string tenantId = Environment.GetEnvironmentVariable("ENTRA_TENANT_ID");
//Initialize InteractiveBrowserCredential for use with CommunicationTokenCredential.
var options = new InteractiveBrowserCredentialOptions
{
TenantId = tenantId,
ClientId = clientId,
};
var entraTokenCredential = new InteractiveBrowserCredential(options);
步骤 2:初始化 CommunicationTokenCredential
用上面创建的 TokenCredential 以及通信服务资源终结点 URI,将 CommunicationTokenCredential 实例化。 以下代码从名为COMMUNICATION_SERVICES_RESOURCE_ENDPOINT的环境变量中检索资源的端点。
将以下代码添加到 Main 方法中:
// This code demonstrates how to fetch your Azure Communication Services resource endpoint URI
// from an environment variable.
string resourceEndpoint = Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_RESOURCE_ENDPOINT");
// Set up CommunicationTokenCredential to request a Communication Services access token for a Microsoft Entra ID user.
var entraTokenCredentialOptions = new EntraCommunicationTokenCredentialOptions(
resourceEndpoint: resourceEndpoint,
entraTokenCredential: entraTokenCredential)
{
Scopes = new[] { "https://communication.azure.com/clients/VoIP" }
};
var credential = new CommunicationTokenCredential(entraTokenCredentialOptions);
指定范围是一个选项。 如果未指定,https://communication.azure.com/clients/.default 范围会被自动使用,请求已注册在客户端应用程序上的通信服务客户端的所有 API 权限。
步骤 3:获取 Microsoft Entra ID 用户的 Azure 通信服务访问令牌
使用 GetTokenAsync 方法获取 Entra ID 用户的访问令牌。
CommunicationTokenCredential 可与 Azure 通信服务 SDK 一起使用。
// To obtain a Communication Services access token for Microsoft Entra ID call GetTokenAsync() method.
var accessToken = await credential.GetTokenAsync();
Console.WriteLine($"Token: {accessToken.Token}");
运行代码
从应用程序目录使用 dotnet run 命令运行应用程序。
dotnet run
设置先决条件
- Node.js
- 用于 JavaScript 的 Azure 标识 SDK ,使用 Microsoft Entra ID 进行身份验证。
- 用于 JavaScript 的 Azure 通信服务通用 SDK ,以获取 Microsoft Entra ID 用户的 Azure 通信服务访问令牌。
最终代码
在 GitHub 上查找此快速入门的最终代码。
设置
创建新的 Node.js 应用程序
打开终端或命令窗口,为应用创建一个新目录,并导航到该目录。
mkdir entra-id-users-support-quickstart && cd entra-id-users-support-quickstart
运行 npm init -y 以使用默认设置创建 package.json 文件。
npm init -y
安装软件包
npm install使用命令安装适用于 JavaScript 的 Azure 标识和 Azure 通信服务通用 SDK。 Azure 通信服务通用 SDK 版本应为 2.4.0 或更高版本。
npm install @azure/communication-common --save
npm install @azure/identity --save
npm install react react-dom --save
npm install vite --save
--save 选项将该库作为 package.json 文件中的依赖项列出。
将这些脚本添加到 package.json:
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
}
实现凭据流
在本快速入门中,你将创建一个简单的 React 应用程序,该应用程序使用 Azure Common SDK 获取Microsoft Entra ID 用户的访问令牌。
从项目目录中执行以下操作:
创建包含以下内容的
index.html文件:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Entra ID Support Client</title> </head> <body> <div id="root"></div> <script type="module" src="/src/main.jsx"></script> </body> </html>创建目录
src并在其中创建main.jsx包含以下内容的文件:import React from "react"; import ReactDOM from "react-dom/client"; import App from "./App"; ReactDOM.createRoot(document.getElementById("root")).render(<App />);创建一个
src/App.jsx文件,包含以下内容,并分别从 Azure Communication Common 和 Azure Identity SDK 导入AzureCommunicationTokenCredential和InteractiveBrowserCredential类。 另外,请确保使用 Microsoft Entra 客户端 ID、租户 ID 和 Azure 通信服务资源终结点 URI 更新变量clientId、tenantId和resourceEndpoint:import React, { useState } from "react"; import { AzureCommunicationTokenCredential } from "@azure/communication-common"; import { InteractiveBrowserCredential } from "@azure/identity"; function App() { // Set your Microsoft Entra client ID and tenant ID, Azure Communication Services resource endpoint URI. const clientId = 'YOUR_ENTRA_CLIENT_ID'; const tenantId = 'YOUR_ENTRA_TENANT_ID'; const resourceEndpoint = 'YOUR_COMMUNICATION_SERVICES_RESOURCE_ENDPOINT'; const [accessToken, setAccessToken] = useState(""); const [error, setError] = useState(""); const handleLogin = async () => { try { // Quickstart code goes here setError(""); } catch (err) { console.error("Error obtaining token:", err); setError("Failed to obtain token: " + err.message); } }; return ( <div> <h2>Obtain Access Token for Entra ID User</h2> <button onClick={handleLogin}>Login and Get Access Token</button> {accessToken && ( <div> <h4>Access Token:</h4> <textarea value={accessToken} readOnly rows={6} cols={60} /> </div> )} {error && <div style={{ color: "red" }}>{error}</div>} </div> ); } export default App;可以从适用于 JavaScript 的 Azure 标识 SDK 导入 TokenCredential 接口的任何实现,以使用 Microsoft Entra ID 进行身份验证。 在本快速入门中,我们使用
InteractiveBrowserCredential适用于浏览器基本身份验证方案的类。 有关所提供凭据的完整列表,请参阅凭据类。
步骤 1:从 Azure 标识 SDK 初始化 TokenCredential 的实现
为 Entra ID 用户获取通信服务访问令牌的第一步是使用 Azure 标识 SDK 为 Entra ID 使用者获取 Entra ID 访问令牌。 若要为跨多个租户的用户启用身份验证,请初始化 InteractiveBrowserCredential 类别并将授权设置为 https://login.microsoftonline.com/organizations。 有关详细信息,请参阅颁发机构。
// Initialize InteractiveBrowserCredential for use with AzureCommunicationTokenCredential.
const entraTokenCredential = new InteractiveBrowserCredential({
tenantId: tenantId,
clientId: clientId,
authorityHost: "https://login.microsoftonline.com/organizations",
});
步骤 2:初始化 AzureCommunicationTokenCredential
用上面创建的 TokenCredential 以及通信服务资源终结点 URI,将 AzureCommunicationTokenCredential 实例化。
// Set up AzureCommunicationTokenCredential to request a Communication Services access token for a Microsoft Entra ID user.
const entraCommunicationTokenCredential = new AzureCommunicationTokenCredential({
resourceEndpoint: resourceEndpoint,
tokenCredential: entraTokenCredential,
});
指定范围是一个选项。 如果未指定,https://communication.azure.com/clients/.default 范围会被自动使用,请求已注册在客户端应用程序上的通信服务客户端的所有 API 权限。
步骤 3:获取 Microsoft Entra ID 用户的 Azure 通信服务访问令牌
使用 getToken 方法获取 Entra ID 用户的访问令牌。
AzureCommunicationTokenCredential 可与 Azure 通信服务 SDK 一起使用。
// To obtain a Communication Services access token for Microsoft Entra ID call getToken() function.
let accessToken = await entraCommunicationTokenCredential.getToken();
setAccessToken(accessToken.token);
运行代码
在控制台提示符下,导航到目录 entra-id-users-support-quickstart,然后执行以下命令 npm 来运行应用。
npm run dev
用户操作
用户表示 Contoso 应用程序的 Fabrikam 用户。 下图显示了用户体验:
- Fabrikam 用户使用 Contoso 客户端应用程序,并会被提示进行身份验证。
- Contoso 客户端应用程序使用 Azure 标识 SDK 将用户身份向具有通信服务客户端权限的 Contoso 应用程序的 Fabrikam Microsoft Entra 租户进行用户身份验证。 身份验证将根据 Contoso 应用程序的“重定向 URI”属性中的定义重定向到客户端应用程序。
- 通信通用 SDK 在后台流畅获取 Fabrikam Entra ID 用户的 Azure 通信服务访问令牌。
开发人员可以通过提供 AzureCommunicationTokenCredential来集成通信服务呼叫 SDK。 (在公共预览版后添加消息支持时,可通过 Entra ID 进行聊天 SDK 集成。
后续步骤
在此快速入门中,读者学习了如何:
- 在 Microsoft Entra ID 中创建和配置应用程序。
- 使用通信服务通用 SDK 和 Azure 标识 SDK 将 Microsoft Entra ID 用户集成到 Azure 通信服务。 了解以下概念: