Auth 对象和资源级访问控制,但把身份验证升级为使用 Supabase 作为身份提供商。教程虽然以 Supabase 为例,但概念同样适用于任意 OAuth2 提供商。你将学到如何:
- 用真实的 JWT 令牌替换测试令牌
- 与 OAuth2 提供商集成,实现安全的用户身份验证
- 在保留现有授权逻辑的同时处理用户会话和元数据
背景知识
OAuth2 涉及三个核心角色:- 授权服务器:负责身份验证并签发令牌的身份提供商(例如 Supabase、Auth0、Google 等)
- 应用后端:指你的 LangGraph 应用,它负责校验令牌并提供受保护的资源(会话数据)
- 客户端应用:用户与服务交互的 Web 或移动端应用
前提条件
在开始之前,请确认你已经:- 成功运行第二个教程中的机器人且无报错。
- 拥有一个 Supabase 项目,以便使用其身份验证服务。
1. 安装依赖
在custom-auth 目录中安装所需依赖,并确保已经安装 langgraph-cli:
2. 配置身份验证提供商
接下来,需要获取身份验证服务器的 URL 和用于验证的私钥。既然我们使用 Supabase,可以在其控制台中完成:- 在左侧边栏点击 “⚙ Project Settings”,然后选择 “API”
- 复制项目 URL,并写入
.env文件
- 复制你的服务角色密钥(service role key),写入
.env
- 复制 “anon public” 密钥备用,稍后配置客户端代码时会用到
3. 实现令牌校验
在之前的教程中,你通过Auth 对象实现了校验硬编码令牌和添加资源归属信息。
现在我们将身份验证升级为验证 Supabase 提供的真实 JWT 令牌。主要改动集中在使用 @auth.authenticate 装饰器的函数中:
- 不再检查硬编码令牌列表,而是向 Supabase 发送 HTTP 请求验证令牌
- 从已验证的令牌中提取真实的用户信息(ID、邮箱)
- 现有的资源授权逻辑保持不变
src/security/auth.py,代码如下:
src/security/auth.py
4. 测试身份验证流程
接下来验证新的身份验证流程。可以在脚本或 Notebook 中执行以下代码,需要提前准备:/login 请求。
接下来验证用户只能访问自己的数据。继续前请确保服务器已启动(运行 langgraph dev)。下面的代码需要使用你在配置身份提供商时复制的 “anon public” 密钥。
- 用户必须登录才能访问机器人
- 每位用户只能看到自己的线程
后续步骤
你已经为 LangGraph 应用构建了一套可用于生产环境的身份验证系统!回顾一下完成的工作:- 配置了身份验证提供商(本例中为 Supabase)
- 新增了基于邮箱/密码的真实用户账号
- 将 JWT 令牌校验集成进 Agent Server
- 实现了正确的授权逻辑,保证用户只能访问自己的数据
- 打下了应对后续身份验证需求的基础 🚀
- 使用你偏好的框架构建 Web UI(可参考 Custom Auth 模板)
- 在身份验证概念指南中了解更多身份验证与授权的细节
- 阅读参考文档,进一步定制处理器与配置