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

使用 Azure Functions 生成受信任的用户访问服务

本文介绍如何使用 Azure Functions 生成受信任的用户访问服务。

重要

在本教程中最终创建的终结点并不安全。 请务必阅读 Azure Functions 安全性一文中的安全详细信息。 需将安全措施添加到终结点,确保恶意行动者无法预配令牌。

下载代码

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

先决条件

概述

可信服务体系结构的关系图

对于本教程,我们将创建一个 Azure 函数,它将用作可信令牌预配服务。 你可以使用本教程来启动自己的令牌预配服务。

此服务负责对 Azure 通信服务的用户进行身份验证。 通信服务应用程序的用户需要 Access Token 才能参与聊天线程和 VoIP 呼叫。 Azure 函数将充当用户与通信服务之间的可信中转站。 这样,你便可以预配访问令牌,而无需向用户公开资源连接字符串。

有关详细信息,请参阅客户端-服务器体系结构以及身份验证和授权概念文档。

设置

Azure Functions 设置

首先设置 Azure 函数的基本结构。 可在此处可以找到有关设置的分步说明:使用 Visual Studio Code 创建函数

我们的 Azure 函数需要以下配置:

  • Language:JavaScript
  • 模板:HTTP 触发器
  • 授权级别:匿名(如果你更偏好不同的授权模型,则可以在以后进行切换)
  • 函数名称:用户定义

按照 Azure Functions 说明进行以上配置之后,你应在 Visual Studio Code 中获得一个用于 Azure 函数的项目,以及包含函数本身的 index.js 文件。 此文件内的代码应如下所示:


module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    const name = (req.query.name || (req.body && req.body.name));
    const responseMessage = name
        ? "Hello, " + name + ". This HTTP triggered function executed successfully."
        : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };
}

现在,我们将继续安装 Azure 通信服务库。

安装通信服务库

我们将使用 Identity 库生成 User Access Tokens

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


npm install @azure/communication-identity --save

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

index.js 文件的顶部,导入 CommunicationIdentityClient 的接口

const { CommunicationIdentityClient } = require('@azure/communication-identity');

访问令牌生成

若要允许我们的 Azure 函数生成 User Access Tokens,首先需要使用通信服务资源的连接字符串。

有关检索连接字符串的详细信息,请访问资源预配快速入门

const connectionString = 'INSERT YOUR RESOURCE CONNECTION STRING'

接下来,我们将修改原始函数以生成 User Access Tokens

User Access Tokens 通过从 createUser 方法创建用户来生成。 创建用户后,便可以使用 getToken 方法为该用户生成 Azure 函数返回的令牌。

对于此示例,我们将令牌范围配置为 voip。 你的应用程序可能需要其他范围。 详细了解范围

module.exports = async function (context, req) {
    let tokenClient = new CommunicationIdentityClient(connectionString);

    const user = await tokenClient.createUser();

    const userToken = await tokenClient.getToken(user, ["voip"]);

    context.res = {
        body: userToken
    };
}

对于现有通信服务 CommunicationUser,可以跳过创建步骤,只生成访问令牌。 可在创建用户访问令牌快速入门中找到更多详细信息。

测试 Azure 函数

使用 F5 在本地运行 Azure 函数。 这会在本地初始化 Azure 函数并使其可通过以下方式进行访问:http://localhost:7071/api/FUNCTION_NAME。 查看有关在本地运行的其他文档

在浏览器中打开 URL,应会看到包含通信用户 ID、令牌和令牌过期时间的响应正文。

显示创建的 Azure 函数的响应示例的屏幕截图。

将函数部署到 Azure

若要部署 Azure 函数,可以按照分布说明进行操作

总的来说,你需要:

  1. 从 Visual Studio 登录 Azure
  2. 将项目发布到 Azure 帐户。 此处需要选择现有订阅。
  3. 使用 Visual Studio 向导创建新 Azure 函数资源,或是使用现有资源。 对于新资源,需要将其配置到所需区域、运行时和唯一标识符。
  4. 等待部署完成
  5. 运行函数 🎉

运行 Azure 函数

使用 url http://<function-appn-ame>.azurewebsites.net/api/<function-name> 运行 Azure 函数

可以通过在 Visual Studio Code 中右键单击函数并复制函数 URL 来找到 URL。

有关运行 Azure 函数的详细信息

保护 Azure Functions

在设置受信任服务以便为用户预配访问令牌的过程中,我们需要考虑到该终结点的安全性,以确保恶意行动者无法为该服务随机创建令牌。 Azure Functions 提供内置安全功能,可让你使用不同类型的身份验证策略来保护终结点。 阅读有关 Azure Functions 安全性的详细信息

清理资源

如果想要清理并删除通信服务订阅,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。 你将能够深入了解如何清理 Azure 通信服务资源以及如何清理 Azure Function 资源

后续步骤

你可能还想要: