Agent Auth 处于测试版并正在积极开发中。要提供反馈或体验此功能,请联系 LangChain 团队

安装

从 PyPI 安装 Agent Auth 客户端库:
pip install langchain-auth

快速入门

1. 初始化客户端

from langchain_auth import Client

client = Client(api_key="your-langsmith-api-key")

2. 配置 OAuth 提供商

在智能体开始认证之前,需要根据以下流程配置 OAuth 提供商:
  1. 为 OAuth 提供商选择一个在 LangChain 平台使用的唯一标识(例如 github-local-devgoogle-workspace-prod)。
  2. 前往 OAuth 提供商的开发者控制台,创建新的 OAuth 应用。
  3. 将 LangChain 的 API 设为可用的回调 URL,结构如下:
    https://api.host.langchain.com/v2/auth/callback/{provider_id}
    
    例如,当 provider_idgithub-local-dev 时,使用:
    https://api.host.langchain.com/v2/auth/callback/github-local-dev
    
  4. 使用 client.create_oauth_provider() 方法,将 OAuth 应用凭据录入 LangChain:
new_provider = await client.create_oauth_provider(
    provider_id="{provider_id}",  # 任意唯一 ID,与提供商本身无强绑定
    name="{provider_display_name}",  # 任意展示名称
    client_id="{your_client_id}",
    client_secret="{your_client_secret}",
    auth_url="{auth_url_of_your_provider}",
    token_url="{token_url_of_your_provider}",
)

3. 在智能体中发起认证

客户端的 authenticate() API 用于从预先配置的提供商获取 OAuth Token。首次调用会引导调用方完成 OAuth 2.0 流程。

在 LangGraph 上下文中

默认情况下,令牌会通过 Assistant ID 参数绑定到调用的智能体。
auth_result = await client.authenticate(
    provider="{provider_id}",
    scopes=["scopeA"],
    user_id="your_user_id"  # 任意唯一标识,用于将令牌绑定到人工调用者
)

# 如果希望获得可被任意智能体使用的令牌,将 agent_scoped 设置为 False
auth_result = await client.authenticate(
    provider="{provider_id}",
    scopes=["scopeA"],
    user_id="your_user_id",
    agent_scoped=False
)
执行过程中,如需认证,SDK 会抛出一个 interrupt。智能体会暂停执行,并向用户展示 OAuth URL: Studio interrupt showing OAuth URL 当用户完成 OAuth 认证并且平台收到提供商回调后,将展示认证成功页面。 GitHub OAuth success page 随后智能体会从暂停位置恢复执行,令牌可用于后续任意 API 调用。我们会存储并刷新 OAuth 令牌,使用户或智能体在未来再次调用该服务时无需重复 OAuth 流程。
token = auth_result.token

在 LangGraph 外部上下文中

对于带外(out-of-band)的 OAuth 流程,将 auth_url 提供给用户。
# 默认情况:生成 user-scoped 令牌(同一用户下的任意智能体均可使用)
auth_result = await client.authenticate(
    provider="{provider_id}",
    scopes=["scopeA"],
    user_id="your_user_id"
)

if auth_result.needs_auth:
    print(f"Complete OAuth at: {auth_result.auth_url}")
    # 等待用户完成授权
    completed_auth = await client.wait_for_completion(auth_result.auth_id)
    token = completed_auth.token
else:
    token = auth_result.token

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.