今天,我们推出了 LangGraph Cloud 和自托管环境中 Python 部署的自定义身份验证和资源级访问控制。此功能使您可以集成自己的身份验证提供程序,并在 LangGraph 应用程序中直接实现细粒度的访问模式。
快速链接
- 视频教程:为 LangGraph 添加自定义身份验证
- 身份验证教程系列
- 概念指南:身份验证和访问控制
- 快速指南,了解如何实现自定义身份验证
Auth
参考文档
为什么需要自定义身份验证?
虽然 LangGraph Cloud 提供了内置的 API 密钥身份验证,但生产环境部署通常需要与现有身份验证系统进行更深入的集成。团队经常需要:
- 使用他们自己的身份验证提供程序验证凭据
- 将对话范围限定为特定用户
- 为最终用户身份验证添加 OAuth 支持
- 实施基于角色的访问控制 (RBAC)
自定义身份验证提供了与任何身份验证系统集成的底层原语,同时保持了 LangGraph 的简洁性。一个典型的流程如下所示:

您的 LangGraph 中的 @auth.authenticate
处理程序处理步骤 4-6,而您的 @auth.on
处理程序实现步骤 7。继续阅读以了解更多信息!
添加到您的应用程序
该系统围绕 Auth
对象构建,该对象提供两个关键功能:
- 身份验证:验证凭据并识别用户。身份验证处理程序(由
@auth.authenticate
标记)接收每个请求并返回一个包含用户身份的MinimalUserDict
from langgraph_sdk import Auth
auth = Auth()
@auth.authenticate
async def get_current_user(authorization: str | None) -> Auth.types.MinimalUserDict:
"""Validate JWT tokens and extract user information."""
assert authorization
scheme, token = authorization.split()
assert scheme.lower() == "bearer"
# Validate with your auth provider
user = await validate_token(token)
return {
"identity": user["id"],
"email": user["email"],
"is_authenticated": True
}
仅凭身份验证,未提供凭据的请求将被拒绝。但是,经过身份验证的用户仍然能够访问所有资源,因为我们尚未引入任何资源所有权。这是下面授权处理程序的作用。

- 授权:控制对特定资源的访问。授权处理程序接收一个包含用户信息(来自您上面的
@auth.authenticate
函数)的AuthContext
,并且可以向资源添加元数据以指示所有权和/或返回控制资源访问的过滤器
@auth.on
async def add_owner(ctx: Auth.types.AuthContext, value: dict):
"""Make resources private to their creator."""
filters = {"owner": ctx.user.identity}
metadata = value.setdefault("metadata", {})
metadata.update(filters)
return filters
既然已经实现了授权处理程序,资源的元数据将被标记上 “owner
” ID,以限制仅对用户创建的线程的访问。

授权事件处理程序有三个主要任务:
- 向正在创建的资源添加元数据。
- 返回过滤器,以便用户只能访问匹配的资源
- 拒绝来自没有此资源或操作权限的用户的请求。
要在您的部署中使用自定义身份验证,请将身份验证配置添加到您的 langgraph.json
,指向您的应用程序部署中的 auth
变量名和路径。
{
"auth": {
"path": "src/security/auth.py:auth"
}
}
资源级控制
授权系统提供对 threads
、assistants
和 crons
的细粒度控制(对 store
操作的授权支持即将发布)。您可以为不同的操作实现自定义逻辑,而不是使用单个全局处理程序。
@auth.on.threads.create
async def on_thread_create(ctx: Auth.types.AuthContext, value: Auth.types.on.threads.create.value):
"""Custom logic for thread creation"""
if not has_permission(ctx.user, "threads:create"):
raise Auth.exceptions.HTTPException(status_code=403)
return {"owner": ctx.user.identity}
@auth.on.assistants
async def on_assistants(ctx: Auth.types.AuthContext, value: Auth.types.on.assistants.value):
"""Restrict access to assistants resource"""
if not is_admin(ctx.user):
raise Auth.exceptions.HTTPException(status_code=403)
LangGraph 将使用与正在访问的资源和操作最匹配的特定处理程序,并在需要时回退到更广泛的处理程序。对于给定的事件,最多调用一个处理程序。
当前支持
自定义身份验证目前仅适用于 Python 部署。对 JavaScript 部署的支持即将推出。
下一步
最快的入门方法是查看关于实现自定义身份验证的 快速操作指南。我们还提供以下资源:
- 视频教程:为 LangGraph 添加自定义身份验证
- 身份验证教程系列
要了解更多信息,请查看关于自定义身份验证和访问控制的 概念指南,以及关于 auth 对象的 参考文档。
另请查看将您的 LangGraph 聊天机器人与 react 前端连接的 全栈模板(演示)。
试用一下,并在 GitHub 上分享您的反馈。这是支持更复杂的部署模式的又一步 - 我们很高兴看到您构建的内容!