使用 OAuth2.0 和 OIDC 的 SSO
LangSmith 自托管通过 OAuth2.0 和 OIDC 提供 SSO。这会将身份验证委托给您的身份提供商 (IdP) 来管理对 LangSmith 的访问。
我们的实施几乎支持任何符合 OIDC 标准的产品,但有少数例外。 配置完成后,您将看到如下所示的登录屏幕:

使用 Client Secret (Recommended)
默认情况下,LangSmith 自托管支持Authorization Codeflow 替换为Client Secret.
在此版本的流程中,您的客户端密钥安全地存储在 LangSmith 平台(而不是前端)中,并用于身份验证和建立身份验证会话。
要求
LangSmith 目前不支持在自托管模式下从 SSO 迁移到基本身份验证模式。 我们也不支持从具有客户端密钥的 OAuth 模式迁移到没有客户端密钥的 OAuth 模式,反之亦然。 最后,我们不支持同时拥有基本身份验证和 OAuth。确保在启用 OAuth 时禁用基本身份验证配置。
- 您的 IdP 必须支持
Authorization Codeflow 替换为Client Secret. - 您的 IdP 必须支持使用外部发现/颁发者 URL。我们将使用它来获取 IdP 所需的路由和密钥。
- 您必须提供
OIDC,email和profile范围添加到 LangSmith 中。我们使用这些内容为您的用户获取必要的用户信息和电子邮件。 - 您需要将 IdP 中的回调 URL 设置为
http://<host>/api/v1/oauth/custom-oidc/callback,其中 host 是您为 LangSmith 实例预置的域或 IP。这是 IdP 在用户进行身份验证后重定向用户的位置。 - 您需要提供
oauthClientId,oauthClientSecret,hostname和oauthIssuerUrl在values.yaml文件。您将在此处配置 LangSmith 实例。
- 掌舵
- 码头工人
config:
authType: mixed
hostname: https://langsmith.example.com
oauth:
enabled: true
oauthClientId: <YOUR CLIENT ID>
oauthClientSecret: <YOUR CLIENT SECRET>
oauthIssuerUrl: <YOUR DISCOVERY URL>
oauthScopes: "email,profile,openid"
# In your .env file
AUTH_TYPE=mixed
LANGSMITH_URL=https://langsmith.example.com
OAUTH_CLIENT_ID=your-client-id
OAUTH_CLIENT_SECRET=your-client-secret
OAUTH_ISSUER_URL=https://your-issuer-url
OAUTH_SCOPES=email,profile,openid
会话长度控制
本节中的所有环境变量都用于platform-backendservice 的 API 中,可以使用platformBackend.deployment.extraEnv在 Helm 中。
- 默认情况下,会话长度由身份提供商返回的身份令牌的过期时间控制
- 大多数设置应使用刷新令牌来启用超出身份令牌过期的会话长度扩展,最长可达
OAUTH_SESSION_MAX_SEC,这可能需要包括offline_access范围添加到oauthScopes(helm) 或OAUTH_SCOPES(码头工人) OAUTH_SESSION_MAX_SEC(默认为 1 天)最多可覆盖一周 (604800)- 对于不支持刷新令牌的身份提供程序设置,将
OAUTH_OVERRIDE_TOKEN_EXPIRY="true"将采取OAUTH_SESSION_MAX_SEC作为会话长度,忽略身份令牌过期
身份提供程序 (IdP) 设置
Google 工作区
您可以将 Google Workspace 用作使用 OAuth2.0 和 OIDC 的单点登录 (SSO) 提供商,而无需 PKCE。
您必须具有对组织的 Google Cloud Platform (GCP) 帐户的管理员级别访问权限才能创建新项目,或者具有为现有项目创建和配置 OAuth 2.0 凭据的权限。我们建议您创建一个新项目来管理访问权限,因为每个 GCP 项目都有一个 OAuth 同意屏幕。
- 创建新的 GCP 项目,请参阅 Google 文档主题创建和管理项目
- 创建项目后,打开 Google API 控制台中的 Credentials 页面(确保左上角的项目正确无误)
- 创建新凭证:
Create Credentials → OAuth client ID - 选择
Web application作为Application type并输入应用程序的名称,例如LangSmith - 在
Authorized Javascript origins放置 LangSmith 实例的域,例如https://langsmith.yourdomain.com - 在
Authorized redirect URIs将 LangSmith 实例的域放入/api/v1/oauth/custom-oidc/callback例如https://langsmith.yourdomain.com/api/v1/oauth/custom-oidc/callback - 点击
Create,然后下载 JSON 或复制并保存Client ID(结尾为.apps.googleusercontent.com) 和Client secret安全的地方。如果需要,您稍后将能够访问这些内容。 - 选择
OAuth consent screen从左侧的导航菜单- 选择 Application type (应用程序类型) 作为
Internal.如果您选择Public,则任何拥有 Google 帐户的人都可以登录。 - 输入描述性
Application name.当用户登录时,此名称会在同意屏幕上显示给用户。例如,使用LangSmith或<organization_name> SSO for LangSmith. - 验证 Google API 的范围是否仅列出电子邮件、配置文件和 openid 范围。单点登录只需要这些范围。如果您授予其他范围,则会增加暴露敏感数据的风险。
- 选择 Application type (应用程序类型) 作为
- (可选)控制您组织中的哪些人有权访问 LangSmith:https://admin.google.com/ac/owl/list?tab=configuredApps。有关更多详细信息,请参阅 Google 的文档。
- 将 LangSmith 配置为使用此 OAuth 应用程序。例如,以下是
config值中,这些值将用于 Kubernetes 配置:oauthClientId:Client ID(结尾为.apps.googleusercontent.com)oauthClientSecret:Client secrethostname:实例的域,例如https://langsmith.yourdomain.com(无尾部斜杠)oauthIssuerUrl:https://accounts.google.comoauth.enabled:trueauthType:mixed
无客户端密钥 (PKCE)(已弃用)
我们建议使用Client Secret如果可能(以前我们不支持此功能)。但是,如果您的 IdP 不支持此功能,您可以使用Authorization Code with PKCE流。
此流程不需要Client Secret- 请参阅上面的流程,了解这样做的替代方案。
要求
将 OAuth SSO 与 LangSmith 结合使用有几个要求:
- 您的 IdP 必须支持
Authorization Code with PKCE流(例如,Google 不支持此流,但请参阅 Google 支持的替代配置)。这通常在您的 OAuth 提供者中显示为配置“单页应用程序 (SPA)” - 您的 IdP 必须支持使用外部发现/颁发者 URL。我们将使用它来获取 IdP 所需的路由和密钥。
- 您必须提供
OIDC,email和profile范围添加到 LangSmith 中。我们使用这些内容为您的用户获取必要的用户信息和电子邮件。 - 您需要将 IdP 中的回调 URL 设置为
http://<host>/oauth-callback,其中 host 是您为 LangSmith 实例预置的域或 IP。这是 IdP 在用户进行身份验证后重定向用户的位置。 - 您需要提供
oauthClientId和oauthIssuerUrl在values.yaml文件。您将在此处配置 LangSmith 实例。
- 掌舵
- 码头工人
config:
oauth:
enabled: true
oauthClientId: <YOUR CLIENT ID>
oauthIssuerUrl: <YOUR DISCOVERY URL>
# In your .env file
AUTH_TYPE=oauth
OAUTH_CLIENT_ID=your-client-id
OAUTH_ISSUER_URL=https://your-issuer-url