SSO 与 OAuth2.0 和 OIDC
LangSmith 自托管通过 OAuth2.0 和 OIDC 提供 SSO。这将委派身份验证到您的身份提供商 (IdP),以管理对 LangSmith 的访问。
我们的实现几乎支持任何符合 OIDC 标准的东西,但有一些例外。
配置完成后,您将看到如下所示的登录屏幕
使用客户端密钥(推荐)
默认情况下,LangSmith 自托管支持使用客户端密钥
的 Authorization Code
流。在此版本的流程中,您的客户端密钥安全地存储在 LangSmith 平台中(而不是在前端),并用于身份验证和建立身份验证会话。
要求
目前,LangSmith 在自托管模式下不支持从 SSO 迁移到基本身份验证模式。我们也不支持从带有客户端密钥的 OAuth 模式迁移到不带客户端密钥的 OAuth 模式,反之亦然。最后,我们不支持同时拥有基本身份验证和 OAuth。启用 OAuth 时,请确保禁用基本身份验证配置。
- 您的 IdP 必须支持使用
客户端密钥
的Authorization Code
流。 - 您的 IdP 必须支持使用外部发现/颁发者 URL。我们将使用它来获取您的 IdP 所需的路由和密钥。
- 您必须向 LangSmith 提供
OIDC
、email
和profile
作用域。我们使用这些来获取您的用户所需的用户信息和电子邮件。 - 您需要在您的 IdP 中将回调 URL 设置为
http://<host>/api/v1/oauth/custom-oidc/callback
,其中 host 是您为 LangSmith 实例配置的域名或 IP。这是您的 IdP 在用户完成身份验证后将用户重定向到的位置。 - 您需要在您的
values.yaml
文件中提供oauthClientId
、oauthClientSecret
、hostname
和oauthIssuerUrl
。这是您配置 LangSmith 实例的位置。 - 某些 IdP 可能需要向 LangSmith 提供
offline_access
作用域。这用于在用户令牌过期时刷新令牌。
- Helm
- Docker
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
身份提供商 (IdP) 设置
Google Workspace
您可以使用 Google Workspace 作为单点登录 (SSO) 提供商,使用 OAuth2.0 和 OIDC,无需 PKCE。
您必须拥有组织 Google Cloud Platform (GCP) 帐户的管理员级别访问权限才能创建新项目,或者拥有为现有项目创建和配置 OAuth 2.0 凭据的权限。我们建议您创建一个新项目来管理访问权限,因为每个 GCP 项目都有一个 OAuth 同意屏幕。
- 创建一个新的 GCP 项目,请参阅 Google 文档主题 创建和管理项目
- 创建项目后,打开 Google API 控制台中的 凭据 页面(确保左上角的项目正确)
- 创建新凭据:
创建凭据 → OAuth 客户端 ID
- 选择
Web 应用程序
作为应用程序类型
,并输入应用程序的名称,例如LangSmith
- 在
授权的 Javascript 来源
中,放入您的 LangSmith 实例的域名,例如https://langsmith.yourdomain.com
- 在
授权的重定向 URI
中,放入您的 LangSmith 实例的域名,后跟/api/v1/oauth/custom-oidc/callback
,例如https://langsmith.yourdomain.com/api/v1/oauth/custom-oidc/callback
- 单击
创建
,然后下载 JSON 或复制并保存客户端 ID
(以.apps.googleusercontent.com
结尾)和客户端密钥
到安全的地方。如果需要,您稍后可以访问这些信息。 - 从左侧导航菜单中选择
OAuth 同意屏幕
- 选择应用程序类型为
内部
。如果您选择公共
,则任何拥有 Google 帐户的人都可以登录。 - 输入描述性的
应用程序名称
。此名称在用户登录时在同意屏幕上向用户显示。例如,使用LangSmith
或<组织名称> LangSmith 的 SSO
。 - 验证 Google API 的作用域是否仅列出 email、profile 和 openid 作用域。单点登录仅需要这些作用域。如果您授予其他作用域,则会增加暴露敏感数据的风险。
- 选择应用程序类型为
- (可选)控制您组织内谁可以访问 LangSmith:https://admin.google.com/ac/owl/list?tab=configuredApps。有关更多详细信息,请参阅 Google 的文档。
- 配置 LangSmith 以使用此 OAuth 应用程序。例如,以下是 Kubernetes 配置将使用的
config
值oauthClientId
:客户端 ID
(以.apps.googleusercontent.com
结尾)oauthClientSecret
:客户端密钥
hostname
:您的实例的域名,例如https://langsmith.yourdomain.com
(无尾部斜杠)oauthIssuerUrl
:https://127.0.0.1
oauth.enabled
:true
authType
:mixed
不使用客户端密钥 (PKCE)(已弃用)
如果可能,我们建议使用 客户端密钥
运行(以前我们不支持此方法)。但是,如果您的 IdP 不支持此方法,则可以使用 Authorization Code with PKCE
流。
此流程不需要 客户端密钥
- 有关替代方法,请参阅上方。
要求
使用 OAuth SSO 与 LangSmith 有几个要求
- 您的 IdP 必须支持
Authorization Code with PKCE
流(例如,Google 不支持此流程,但有关 Google 支持的替代配置,请参阅下方)。这通常在您的 OAuth 提供商中显示为配置“单页应用程序 (SPA)” - 您的 IdP 必须支持使用外部发现/颁发者 URL。我们将使用它来获取您的 IdP 所需的路由和密钥。
- 您必须向 LangSmith 提供
OIDC
、email
和profile
作用域。我们使用这些来获取您的用户所需的用户信息和电子邮件。 - 您需要在您的 IdP 中将回调 URL 设置为
http://<host>/oauth-callback
,其中 host 是您为 LangSmith 实例配置的域名或 IP。这是您的 IdP 在用户完成身份验证后将用户重定向到的位置。 - 您需要在您的
values.yaml
文件中提供oauthClientId
和oauthIssuerUrl
。这是您配置 LangSmith 实例的位置。
- Helm
- Docker
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