IBM Cloud Docs
在 Web 聊天中认证用户

在 Web 聊天中认证用户

在启用 Web 聊天安全性的情况下,您可以通过用户标识安全地认证客户。

Web 聊天集成的缺省行为是通过设置作为每条消息的一部分发送到助手的 user_id 属性的值来识别唯一用户。 有关更多信息,请参阅 在 Web 聊天中管理用户身份信息

此方法足以用于跟踪唯一用户以进行计费,但它不安全,不应用于访问控制。 如果启用 Web 聊天安全性,请使用 JSON Web 令牌 (JWT) 来安全地认证用户并控制对需要授权的助手功能的访问。

使用 sub 声明进行认证

要使用此方法来认证用户,必须首先启用 Web 聊天安全功能。 有关更多信息,请参阅 启用 Web 聊天安全性

为 Web 聊天创建 JWT 时,必须为 sub (主题) 声明指定用于标识用户的值。 对于匿名用户,您可以使用生成的唯一标识。

为匿名用户生成用户标识时,请确保将生成的标识保存在 cookie 中,以防止针对同一客户多次计费。

当 Web 聊天集成接收到此 JWT 签名的消息时,它会将 sub 声明中的用户标识作为 system_integrations.channel.private.user.id 存储在操作中,并将 integrations.channel.private.user.id 存储在对话中。 有关更多信息,请参阅 集成变量

如果需要客户在启动 Web 聊天会话之前登录,那么您可以在创建 JWT 时使用已认证的用户标识作为 sub 声明的值。 由于 Web 聊天集成会验证 JWT 并使用 sub 声明来设置用户标识,因此助手现在可以依靠操作中的 system_integrations.channel.private.user.id 和对话中的 integrations.channel.private.user.id 来安全地访问控制需要授权的功能。

为 Web 聊天指定 JWT 后,无法在会话期间更改为具有其他 sub 声明的 JWT。 如果需要在会话中间添加已认证的登录信息,那么可以将其存储为用户有效内容的一部分。 有关如何执行此操作的示例,请参阅 教程: 在会话中间认证用户

计费和隐私

对于基于用户的计划,用户 ID 用于计费目的。 (如果启用了 Web 聊天安全性,那么无法使用 updateUserID() 实例方法来设置用户标识。) 同一用户标识也用作客户标识,可用于发出删除用户数据的请求。 由于客户标识是在头字段中发送的,因此您指定的标识必须满足 RFC 7230中定义的头字段的要求。

如果要求您遵守 GDPR 要求,那么可能需要持久存储任何生成的匿名用户标识,尤其是对于稍后使用用户凭证登录的匿名用户。 通过存储这些用户标识,您可以在以后根据请求删除与单个客户关联的所有数据。

有关基于用户的计费的更多信息,请参阅 基于用户的套餐说明。 有关删除用户数据的更多信息,请参阅 标记和删除数据

注销

要注销客户,必须销毁 Web 聊天。

如果在客户注销时重新装入页面,请调用 destroySession() 实例方法以从浏览器的 cookie 和存储器中除去对当前会话的任何引用。 如果不调用此方法,那么受 JWT 保护的信息没有风险,但 Web 聊天将尝试连接到先前会话并失败。

如果在客户注销时未执行完整页面重新装入,请调用 destroy() 实例方法。 destroy 方法从 DOM 和浏览器内存中除去为当前 userID 配置的 Web 聊天的当前实例。 接下来,调用 destroySession() 实例方法。