你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
集成 Azure 函数
简介
本教程提供有关如何设置 Azure 函数以接收用户相关信息的详细指导。 强烈建议设置 Azure 函数。 它有助于避免在 Contoso 应用中对应用程序参数(例如用户 ID 和用户令牌)进行硬编码。 此类信息是高度保密的。 更重要的是,我们会在后端定期刷新用户令牌。 对用户 ID 和令牌组合进行硬编码需要在每次刷新后编辑值。
先决条件
在开始之前,请务必:
- 创建活动订阅的 Azure 帐户。 有关详细信息,请参阅创建免费账户。
- 安装 Visual Studio Code。
设置函数
- 在 Visual Studio Code 中安装 Azure 函数扩展。 可以从 Visual Studio Code 的插件浏览器或通过此链接安装该扩展
- 通过此链接设置本地 Azure 函数应用。 我们需要使用 JavaScript 中的 HTTP 触发器模板创建本地函数。
- 安装 Azure 通信服务库。 我们将使用标识库生成用户访问令牌。 在本地 Azure 函数应用目录中运行 npm install 命令,以安装适用于 JavaScript 的 Azure 通信服务标识 SDK。
npm install @azure/communication-identity --save
- 如以下代码所示修改
index.js
文件:
const { CommunicationIdentityClient } = require('@azure/communication-identity');
const connectionString = '<your_connection_string>'
const acsEndpoint = "<your_ACS_endpoint>"
module.exports = async function (context, req) {
let tokenClient = new CommunicationIdentityClient(connectionString);
const userIDHolder = await tokenClient.createUser();
const userId = userIDHolder.communicationUserId
const userToken = await (await tokenClient.getToken(userIDHolder, ["chat"])).token;
context.res = {
body: {
acsEndpoint,
userId,
userToken
}
};
}
上述代码的解释:第一行导入 CommunicationIdentityClient
的接口。 可以在 Azure 门户上的 Azure 通信服务资源中找到第二行中的连接字符串。 ACSEndpoint
是已创建的 Azure 通信服务资源的 URL。
- 在 Visual Studio Code 中打开本地 Azure 函数文件夹。 打开
index.js
并运行本地 Azure 函数。 将在终端中创建并输出本地 Azure 函数终结点。 输出的消息类似于:
Functions:
HttpTrigger1: [GET,POST] http://localhost:7071/api/HttpTrigger1
在浏览器中打开链接。 结果类似于以下示例:
{
"acsEndpoint": "<Azure Function endpoint>",
"userId": "8:acs:a636364c-c565-435d-9818-95247f8a1471_00000014-f43f-b90f-9f3b-8e3a0d00c5d9",
"userToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjEwNiIsIng1dCI6Im9QMWFxQnlfR3hZU3pSaXhuQ25zdE5PU2p2cyIsInR5cCI6IkpXVCJ9.eyJza3lwZWlkIjoiYWNzOmE2MzYzNjRjLWM1NjUtNDM1ZC05ODE4LTk1MjQ3ZjhhMTQ3MV8wMDAwMDAxNC1mNDNmLWI5MGYtOWYzYi04ZTNhMGQwMGM1ZDkiLCJzY3AiOjE3OTIsImNzaSI6IjE2Njc4NjI3NjIiLCJleHAiOjE2Njc5NDkxNjIsImFjc1Njb3BlIjoiY2hhdCIsInJlc291cmNlSWQiOiJhNjM2MzY0Yy1jNTY1LTQzNWQtOTgxOC05NTI0N2Y4YTE0NzEiLCJyZXNvdXJjZUxvY2F0aW9uIjoidW5pdGVkc3RhdGVzIiwiaWF0IjoxNjY3ODYyNzYyfQ.t-WpaUUmLJaD0V2vgn3M5EKdJUQ_JnR2jnBUZq3J0zMADTnFss6TNHMIQ-Zvsumwy14T1rpw-1FMjR-zz2icxo_mcTEM6hG77gHzEgMR4ClGuE1uRN7O4-326ql5MDixczFeIvIG8s9kAeJQl8N9YjulvRkGS_JZaqMs2T8Mu7qzdIOiXxxlmcl0HeplxLaW59ICF_M4VPgUYFb4PWMRqLXWjKyQ_WhiaDC3FvhpE_Bdb5U1eQXDw793V1_CRyx9jMuOB8Ao7DzqLBQEhgNN3A9jfEvIE3gdwafpBWlQEdw-Uuf2p1_xzvr0Akf3ziWUsVXb9pxNlQQCc19ztl3MIQ"
}
将本地函数部署到云。 可在此文档中找到更多详细信息。
测试已部署的 Azure 函数。 首先,在 Azure 门户中找到你的 Azure 函数。 然后,使用“获取函数 URL”按钮获取 Azure 函数终结点。 你看到的结果应类似于步骤 5 中显示的结果。 Azure 函数终结点将在应用中用于初始化应用程序参数。
实现
UserTokenClient
,它用于调用目标 Azure 函数资源并从返回的 JSON 对象中获取 Azure 通信服务终结点、用户 ID 和用户令牌。 请参阅示例应用了解用法。
故障排除指南
- 如果 Azure 函数扩展无法将本地函数部署到 Azure 云,则原因可能是使用的 Visual Studio Code 和 Azure 函数扩展版本存在 bug。 以下版本组合经测试可以正常工作:Visual Studio Code 版本
1.68.1
和 Azure 函数扩展版本1.2.1
。 - 初始化应用程序常量的位置难以确定,但非常重要。 请仔细查看聊天 Android 快速入门。 更具体地讲,请查看“设置应用程序常量”部分突出显示的注释,并与所用版本的示例应用进行比较。
(可选)保护 Azure 函数终结点
出于演示目的,此示例在默认情况下使用可公开访问的终结点来获取 Azure 通信服务令牌。 对于生产方案,一种做法是使用你自己的受保护终结点来预配自己的令牌。
通过其他配置,此示例支持连接到受 Microsoft Entra 保护的终结点,因此应用要求用户登录以提取 Azure 通信服务令牌。 用户必须使用 Microsoft 帐户登录才能访问应用。 此设置提高了安全级别,同时要求用户登录。 请根据用例确定是否启用此设置。
请注意,目前不支持示例代码中的 Microsoft Entra ID。 请通过以下链接在应用和 Azure 函数中启用它: