开发工具/API 参考/API 教程/如何实现会话隔离
如何实现会话隔离
更新于: 2026-06-25 19:29:14
使用扣子编程 OpenAPI 或 SDK 和扣子智能体或应用对话时,扣子编程会将使用同一个访问密钥的对话看做同一个用户。如果业务侧不同的用户使用同一个扣子编程访问密钥鉴权,用户看到的对话记录中可能会夹杂其他用户的对话历史。
但是在实际业务场景中,往往需要将不同业务侧用户的会话互相隔离开来,每个用户只能看到自己和智能体的对话历史。扣子编程 OAuth JWT 鉴权方式中,支持通过 session_name 参数实现会话隔离,避免智能体不同账号的消息内容互相可见。
目前仅 OAuth JWT 鉴权方式支持会话隔离。如果不同的用户使用同一个访问密钥,且需要在一个扣子账号下维护多个用户的对话,建议使用 JWT 方式鉴权,并设置会话隔离。
|
会话隔离级别 |
绑定到扣子账号下 |
绑定到扣子账号下的子级下 |
|---|---|---|
|
区别 |
一个扣子账号内无法隔离会话。 |
支持在一个扣子的账号下维护多个子用户的会话。 |
|
适用场景 |
访问产品的用户本身拥有扣子账号。 |
|
|
鉴权方式 |
可使用扣子编程目前支持的所有鉴权方式。详细信息可参考鉴权方式概述。 |
仅 OAuth 的 JWT 鉴权方式可实现会话隔离。但必须在 payload 中添加 session_name 字段。 |
|
隔离级别 |
渠道(默认) + 扣子账号 + Bot |
渠道(默认) + 扣子账号 + Bot + session_name |
如需实现会话隔离,需要在调用扣子编程 OpenAPI 或 SDK 时,使用 OAuth JWT 鉴权方式,并在签署 JWT 时,在 payload 字段中添加 session_name 字段。session_name 中应指定用户在业务侧的 UID,String 类型。UID 由业务侧自行定义,扣子编程仅透传这个字段并用于签署 JWT、区分不同 session_name 的会话。
签署 JWT 并设置 session_name 的具体步骤可参考3 签署 JWT。
开发者搭建了一个智能体,并通过 Chat SDK 的方式嵌入到自建网站中,供网站的访问者使用。如果未设置会话隔离,那么网站中不同的访问者 A 和 B 在智能体对话框中可以查看到其他用户和智能体的对话记录。
开发者可以采用 JWT 方式实现会话隔离,并在 Chat SDK 中使用 JWT 访问密钥鉴权即可。
获取业务侧的用户 UID。
从网站的账号系统中,获取网站用户 A 和 B 的 UID。此处我们假设 UID 分别为 USER_A 和 USER_B。
获取 JWT Token。
参考OAuth JWT 授权(开发者)文档实现 OAuth JWT 授权,并分别为用户 A 和 B 申请 JWT Token。在步骤3 签署 JWT 中,Payload 中添加 session_name 字段,并将其设置为网站用户 A 或 B 的 UID。
用户 A 和 B 分别对应的 JWT Token:
// 用户 A 的 JWT Token
czs_RQOhsc7vmUzK4bNgb7hn4wqOgRBYAO6xvpFHNbnl6RiQJX3cSXSguIahiuhwfw****
// 用户 B 的 JWT Token
czs_DJWOEF7vmUzK4bNgb7hn4wqOgRBYAO6xvpFHNbnl6RiQJX3cSXSguIhFDzgy****
设置 Chat SDK 鉴权参数。
参考安装并使用 Chat SDK接入 Chat SDK 时,在步骤四:配置聊天框中,auth 的 token 参数设置为网站用户对应的 Token,确保用户 A 和 用户 B 在和智能体对话时,分别使用的是自己的 JWT Token。
可能原因:
这通常是由于在代码中手动传入了相同的 conversationID 参数导致的。
解决方案:
为确保会话 ID 的唯一性与隔离性,建议由系统自动生成会话 ID,避免手动在代码中设置 conversationID 参数。
会。设置 session_name 变量后,扣子编程会按照会话隔离的方式进行区分。不同会话间设置的用户变量将被自动隔离,互不影响。即使不同用户使用了相同的账号密钥,用户 A 与用户 B 的变量也会被独立存储,确保每个会话的用户变量完全隔离。