本文介绍如何使用 Azure Functions 生成受信任的用户访问服务。
重要
本教程中创建的终结点不安全。 请务必阅读 Azure Functions 安全 文章中的安全详细信息。 需要向终结点添加安全措施,以确保恶意操作者无法发行令牌。
本文介绍如何:
- 设置函数。
- 生成访问令牌。
- 测试函数。
- 部署并运行函数。
下载代码
在 GitHub 上查找此快速入门的最终代码。
先决条件
- 具有活动订阅的 Azure 帐户。 如果没有 Azure 订阅,可以 免费创建帐户。
- 在某个受支持的平台上运行Visual Studio Code。
- Node.js,活动 LTS 和维护 LTS 版本(建议使用 10.14.1)。 可以使用
node --version
命令检查你的版本。 - Visual Studio Code 的 Azure Functions 扩展。
- 活动的通信服务资源和连接字符串。 有关详细信息,请参阅快速入门:创建和管理通信服务资源。
概述
在本教程中,你将创建一个充当受信任的令牌预配服务的函数应用。 你可以使用本教程来启动自己的令牌预配服务。
此服务负责向通信服务验证用户。 通信服务应用程序的用户需要访问令牌才能参与聊天线程和 VoIP 呼叫。 该函数充当用户与通信服务之间的受信任中间人。 可以在不向用户公开资源连接字符串的情况下预配访问令牌。
有关详细信息,请参阅客户端-服务器体系结构以及身份验证和授权概念文档。
设置函数
本部分介绍设置函数的过程。
Azure Functions 设置
让我们首先为函数设置基本结构。 有关设置的分步说明,请参阅 快速入门:使用 Visual Studio Code 在 Azure 中创建 C# 函数。
该函数需要以下配置:
- 语言:JavaScript
- 模板:HTTP 触发器
- 授权级别:匿名(如果你更喜欢其他授权模型,可以稍后切换)
- 函数名称:用户定义的
完成遵循《快速入门:使用 Visual Studio Code 在 Azure 中创建 C# 函数》中说明并配置后,您应该在 Visual Studio Code 中拥有一个项目,其中包含函数本身的 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
};
}
下一步是安装通信服务库。
安装通信服务库
使用 Identity
库生成用户访问令牌。
使用 npm install
命令来安装 JavaScript 的通信服务身份 SDK。
npm install @azure/communication-identity --save
--save
选项在 package.json 文件中列出作为依赖项的库。
在 index.js
文件的顶部,导入 CommunicationIdentityClient
这个参数的接口。
const { CommunicationIdentityClient } = require('@azure/communication-identity');
生成访问令牌
若要允许函数生成用户访问令牌,首先需要为通信服务资源使用连接字符串。
有关如何检索连接字符串的详细信息,请参阅 快速入门:创建和管理通信服务资源。
const connectionString = 'INSERT YOUR RESOURCE CONNECTION STRING'
接下来,修改原始函数以生成用户访问令牌。
若要生成用户访问令牌,请使用 createUser
该方法创建用户。 创建用户后,使用 getToken
方法为该用户生成令牌,函数将返回该令牌。
在此示例中,您将令牌范围配置为 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
参数,可以跳过创建步骤并生成访问令牌。 有关详细信息,请参阅创建和管理访问令牌。
测试函数
使用 F5
.. 在本地运行函数。 此操作在本地初始化函数,并使其可通过http://localhost:7071/api/FUNCTION_NAME
访问。 有关在本地运行的详细信息,请参阅 快速入门:使用 Visual Studio Code 在 Azure 中创建 C# 函数。
在浏览器中打开 URL,会看到包含通信用户 ID、令牌和令牌过期的响应正文。
将函数部署到 Azure
若要部署函数,请按照快速入门中的分步说明作 :使用 Visual Studio Code 在 Azure 中创建 C# 函数。
总之,需要:
- 从 Visual Studio 登录到 Azure。
- 将项目发布到 Azure 帐户。 此处需要选择现有订阅。
- 使用 Visual Studio 向导或现有资源创建新的函数资源。 对于新资源,需要将其配置为所需的区域、运行时和唯一标识符。
- 等待部署完成。
- 运行函数。
运行函数
使用 URL http://<function-appn-ame>.azurewebsites.net/api/<function-name>
运行函数。
若要查找 URL,请在 Visual Studio Code 中右键单击该函数并复制函数 URL。
有关如何运行函数的详细信息,请参阅 快速入门:使用 Visual Studio Code 在 Azure 中创建 C# 函数。
保护终结点
作为设置一个受信任的服务以为用户提供访问令牌的一部分,您需要考虑该终结点的安全性,以确保没有恶意行为者可以随意为您的服务创建令牌。 Azure Functions 提供内置安全功能,可用于使用不同类型的身份验证策略来保护终结点。 有关详细信息,请参阅 Azure Functions 安全性。
清理资源
如果要清理并移除 Azure 通信服务订阅,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。 可以详细了解如何 清理通信服务资源 并 清理 Azure Functions 资源。