你当前正在访问 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 函数文件夹。 打开 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 函数扩展版本存在 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 登录