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

集成 Azure 函数

介绍

本教程提供了有关如何设置 Azure 函数以接收用户相关信息的详细指南。 强烈建议设置 Azure 函数。 它有助于避免 Contoso 应用中的硬编码应用程序参数(例如用户 ID 和用户令牌)。 此信息高度机密。 更重要的是,我们会定期在后端刷新用户令牌。 对用户 ID 和令牌组合进行硬编码需要在每次刷新后编辑值。

先决条件

在开始之前,请确保:

  • 创建具有活动订阅的 Azure 帐户。 有关详细信息,请参阅创建免费账户
  • 安装 Visual Studio Code。

设置函数

  1. 在 Visual Studio Code 中安装 Azure 函数扩展。 可以从 Visual Studio Code 的插件浏览器安装它,也可以通过以下链接安装它
  2. 按照 此链接设置本地 Azure 函数应用。 我们需要在 JavaScript 中使用 HTTP 触发器模板创建本地函数。
  3. 安装 Azure 通信服务库。 我们将使用标识库生成用户访问令牌。 在本地 Azure 函数应用目录中运行 npm install 命令,安装用于 JavaScript 的 Azure 通信服务标识 SDK。
    npm install @azure/communication-identity --save
  1. 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。

  1. 在 Visual Studio Code 中打开本地 Azure Function 文件夹。 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"
    }
  1. 将本地函数部署到云。 可在 本文档中找到更多详细信息。

  2. 测试部署的 Azure 函数。 首先,在 Azure 门户中查找 Azure 函数。 然后,使用“获取函数 URL”按钮获取 Azure 函数终结点。 你看到的结果应类似于步骤 5 中显示的结果。 Azure 函数终结点将在应用中用于初始化应用程序参数。

  3. 实现,该实现 UserTokenClient用于调用目标 Azure 函数资源,并从返回的 JSON 对象获取 Azure 通信服务终结点、用户 ID 和用户令牌。 请参阅示例应用以供使用。

故障排除指南

  1. 如果 Azure 函数扩展未能将本地函数部署到 Azure 云,则可能是因为 Visual Studio Code 的版本和正在使用的 Azure Function 扩展存在 bug。 此版本组合已经过测试,可正常工作:Visual Studio Code 版本 1.68.1 和 Azure 函数扩展版本 1.2.1
  2. 初始化应用程序常量的位置很棘手,但很重要。 请仔细查看聊天 Android 快速入门。 更具体地说,请注意“设置应用程序常量”部分中的重点说明,并与您使用的版本的示例应用程序进行比较。

(可选) 保护 Azure 函数终结点

出于演示目的,此示例默认使用可公开访问的终结点来提取 Azure 通信服务令牌。 对于生产方案,一个选项是使用自己的安全终结点来预配自己的令牌。

通过其他配置,此示例支持连接到受 Microsoft Entra 保护的终结点,因此应用要求用户登录以提取 Azure 通信服务令牌。 需要使用Microsoft帐户登录才能访问应用。 用户在需要登录时,此设置提高了安全级别。 确定是否根据用例启用它。

请注意,我们当前不支持示例代码中的 Microsoft Entra ID。 按照以下链接在应用和 Azure 函数中启用它:

Microsoft Entra ID(使用 Android 平台设置)下注册应用

将应用服务或 Azure Functions 应用配置为使用 Microsoft Entra ID 登录