前提条件
在开始本教程之前,请确保你正在运行 第一个教程中的机器人 且没有错误。1. 添加资源授权
回想一下,在上一个教程中,Auth 对象让你注册一个 身份验证函数,LangSmith 用它来验证传入请求中的承载令牌。现在你将使用它来注册一个 授权 处理程序。
授权处理程序是在身份验证成功 之后 运行的函数。这些处理程序可以向资源添加 元数据(例如谁拥有它们)并过滤每个用户可以看到的内容。
更新你的 src/security/auth.py 文件,并添加一个授权处理程序来处理每个请求:
src/security/auth.py
ctx(AuthContext):包含当前user的信息、用户的permissions、resource(“threads”、“crons”、“assistants”)以及正在执行的action(“create”、“read”、“update”、“delete”、“search”、“create_run”)。value(dict):正在被创建或访问的数据。此字典的内容取决于被访问的资源和操作。有关如何获取更细粒度的访问控制,请参阅下面的 添加作用域授权处理程序。
- 将用户的 ID 添加到资源的元数据中。
- 返回一个元数据过滤器,使用户只能看到他们拥有的资源。
2. 测试私密对话
测试你的授权。如果你设置正确,你将看到所有 ✅ 消息。请确保你的开发服务器正在运行(运行langgraph dev):
- 每个用户可以在自己的对话线程中创建和聊天。
- 用户无法看到彼此的对话线程。
- 列出对话线程时只显示自己的。
3. 添加作用域授权处理程序
宽泛的@auth.on 处理程序匹配所有 授权事件。这很简洁,但它意味着 value 字典的内容没有明确定义作用域,并且相同的用户级访问控制应用于每个资源。如果你想要更细粒度的控制,也可以控制资源上的特定操作。
更新 src/security/auth.py 以添加针对特定资源类型的处理程序:
- 创建线程
- 读取线程
- 访问助手
@auth.on.assistants 和 @auth.on.store)匹配 assistants 和 store 资源上的 任何 操作。对于每个请求,LangGraph 将运行与正在访问的资源和操作最匹配的特定处理程序。这意味着上面的四个处理程序将运行,而不是宽泛作用域的 “@auth.on” 处理程序。
存储授权的工作方式与线程和助手不同。有关存储隔离模式和权衡,请参阅 按用户隔离存储。
尝试将以下测试代码添加到你的测试文件中:
下一步
现在你可以控制对资源的访问,你可能希望:Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

