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

标识模型

Azure 通信服务是一种与标识无关的服务,它提供多种权益:

  • 重用标识管理系统中的现有标识,并将其与 Azure 通信服务标识进行映射。
  • 适用于任何现有标识系统,不依赖于特定的标识提供者。
  • 将用户的数据(如姓名)保密,因为不需要在 Azure 通信服务中复制它。

Azure 通信服务标识模型使用两个关键概念。

用户标识 / 映射

当通过 SDK 或 REST API 创建用户标识时,Azure 通信服务将创建唯一的用户标识符。 电话号码、用户/设备/应用 ID 或用户名等外部标识符不能直接在 Azure 通信服务中使用。 相反,必须使用通信服务标识,并根据需要维护到自己的用户 ID 系统的映射。 可免费创建 Azure 通信服务用户标识,仅当用户使用聊天或通话等通信方式时才会产生费用。 使用生成的通信服务标识的方式取决于应用场景。 例如,可以将标识映射为 1:1、1:N、N:1 或 N:N,并且可以将其用于人类用户或应用。 用户可以同时使用多个设备参与多个通信会话。 管理 Azure 通信服务用户标识和你自己的标识系统之间的映射是你作为开发人员的责任,并且不是内置的。 例如,可以在现有用户表中添加 CommunicationServicesId 列来存储关联的 Azure 通信服务标识。 在客户端-服务器体系架构下更详细地描述了映射设计。

访问令牌

创建用户标识后,用户需要具有特定范围的访问令牌,才能使用聊天或通话参与通信。 例如,只有具有 chat 范围的令牌的用户可以参与聊天,而具有 voip 范围的令牌的用户可以参与 VoIP 呼叫。 用户可以同时具有多个令牌。 Azure 通信服务支持多个令牌范围,以考虑需要完全访问权限和有限访问权限的用户。 访问令牌具有以下属性。

properties 说明
Subject 由令牌表示的用户标识。
过期日期 访问令牌的有效期至少为 1 小时,最多为 24 小时。 过期后,访问令牌无效,无法用于访问服务。 要创建具有自定义过期时间的令牌,请指定所需的有效期,以分钟为单位 (>=60, <1440)。 令牌默认有效期为 24 小时。 建议一次性会议使用短生命周期令牌,使用较长生命周期令牌的用户使用较长时间的应用。
作用域 范围定义了可以使用令牌访问哪些通信基元(聊天/VoIP)。

访问令牌是 JSON Web 令牌 (JWT),具有完整性保护。 即,如果不使访问令牌无效,就无法更改其声明,因为令牌签名不再匹配。 如果通信基元与无效令牌一起使用,则拒绝访问。 即使令牌没有加密或混淆,应用也不应该依赖于令牌格式或其声明。 令牌格式可以更改,并且不是 API 官方合同的一部分。 Azure 通信服务支持以下访问令牌范围。

聊天令牌范围

支持三种不同的聊天令牌范围。 下表描述了每个范围的权限。

  • chat
  • chat.join
  • chat.join.limited
容量 / 令牌范围 聊天 chat.join chat.join.limited
创建聊天线程 Y N N
使用 ID 更新聊天线程 Y N N
使用 ID 删除聊天线程 Y N N
将参与者添加到聊天线程 Y Y N
删除聊天会话中的参与者 Y Y N
获取聊天线程 Y Y Y
获取具有 ID 的聊天线程 Y Y Y
获取 ReadReceipt Y Y Y
创建 ReadReceipt Y Y Y
使用 ID 为聊天线程创建消息 Y Y Y
获取具有消息 ID 的消息 Y Y Y
使用消息 ID 更新自己的消息 Y Y Y
使用消息 ID 删除自己的消息 Y Y Y
发送键入指示符 Y Y Y
获取线程 ID 的参与者 Y Y Y

VoIP 令牌范围

支持两个 VoIP 令牌范围。 下表描述了每个范围的权限。

  • voip
  • voip.join
容量 / 令牌范围 voip voip.join
开始 VoIP 呼叫 Y N
当用户已受邀请到会议室时,在 Virtual Rooms 中启动 VoIP 呼叫 Y Y
加入正在进行的 VoIP 呼叫 Y Y
当用户已受邀请到 Virtual Rooms 时,在虚拟会议室中加入正在进行的 VoIP 呼叫 Y Y
所有其他通话中操作,如静音/取消静音、屏幕共享等。 Y Y
Virtual Rooms 中的所有其他通话中操作,如静音/取消静音、屏幕共享等 由用户角色决定 由用户角色决定

可以将 voip.join 范围与会议室一起使用来创建计划通话,只有受邀用户才能访问,并且禁止用户创建任何其他通话。

撤销或更新访问令牌

  • Azure 通信服务标识库可用于在访问令牌过期之前撤销访问令牌。 令牌吊销不是立即生效的。 传播可能需要 15 分钟。
  • 删除标识、资源或订阅会撤销所有访问令牌。
  • 如果要移除用户访问特定功能的能力,请撤销用户的所有访问令牌。 然后颁发具有一组受限程度更高的范围的新访问令牌。
  • 轮换访问密钥会撤销使用先前的访问密钥创建的所有活动访问令牌。 因此,所有标识都无法访问 Azure 通信服务,需要新的访问令牌。

客户端-服务器体系结构

应该通过受信任的服务创建和管理用户访问令牌,而不是在客户端应用中创建令牌。 创建用户访问令牌所需的连接字符串或 Microsoft Entra 凭据需要受到保护,将它们传递给客户端将有泄露机密的风险。 如果不能正确管理访问令牌,当令牌经自由分配并被其他人滥用时,可能会导致资源产生额外费用。

如果将访问令牌缓存到后备存储,建议对令牌进行加密。 访问令牌允许访问敏感数据,如果不受保护,则可用于恶意活动。 任何拥有用户访问令牌的人都可以访问用户的聊天数据或模拟用户参与通话。

确保在令牌中只包含客户端应用所需的范围,以遵循最小权限的安全原则。

用户访问令牌体系结构图。

  1. 用户启动客户端应用程序。
  2. 客户端应用程序与标识管理服务联系。
  3. 标识管理服务对应用用户进行验证。 对于用户匿名的应用场景,可以跳过身份验证,但要注意在服务中添加其他保护措施,如请求限制和 CORS,以减轻令牌滥用。
  4. 为用户创建或查找通信服务标识。
    1. 稳定的标识应用场景:标识管理服务维护应用标识和通信服务标识之间的映射。 (应用程序标识包括用户和其他可寻址对象,如服务或 bot。)如果应用标识是新的,则创建新的通信标识并存储映射。
    2. 临时标识应用场景:标识管理服务创建新的通信标识。 在此应用场景,同一用户在每个会话中都会使用不同的通信标识。
  5. 标识管理服务为适用的标识颁发用户访问令牌,并将其返回给客户端应用。

Azure 应用服务或 Azure Functions 是运行标识管理服务的两种替代方法。 这些服务可以轻松缩放,并具有内置功能来对用户进行身份验证。 它们与 OpenID 和第三方标识提供者(如 Facebook)集成。

后续步骤