OAuth
OAuth 允许您使用第三方服务来验证您的用户。
要激活 OAuth 提供商,您需要在代码中定义 OAuth 回调,并设置提供商的环境变量。
提供商
请按照以下指南为您选择的提供商创建 OAuth 应用。然后将信息复制到相应的环境变量中以激活提供商。
如果您的应用部署在反向代理后(例如 Cloud Run),您需要设置 CHAINLIT_URL
环境变量。例如,如果您的应用托管在 https://mydomain.com
,CHAINLIT_URL
应设置为 https://mydomain.com
。
GitHub
转到此页面创建新的 GitHub OAuth 应用。
回调 URL 应为:CHAINLIT_URL/auth/oauth/github/callback
。如果您的 Chainlit 应用托管在 localhost:8000,您应使用 http://localhost:8000/auth/oauth/github/callback
。
您需要设置以下环境变量
OAUTH_GITHUB_CLIENT_ID
:客户端 IDOAUTH_GITHUB_CLIENT_SECRET
:客户端密钥
Gitlab
转到此页面创建新的 GitLab OAuth 应用。创建应用时,您需要允许 openid
、profile
和 email
范围。
回调 URL 应为:CHAINLIT_URL/auth/oauth/gitlab/callback
。如果您的 Chainlit 应用托管在 localhost:8000,您应使用 http://localhost:8000/auth/oauth/gitlab/callback
。
您需要设置以下环境变量
OAUTH_GITLAB_CLIENT_ID
:客户端 IDOAUTH_GITLAB_CLIENT_SECRET
:客户端密钥OAUTH_GITLAB_DOMAIN
:域名(不含协议)
转到此页面创建新的 Google OAuth 应用。
回调 URL 应为:CHAINLIT_URL/auth/oauth/google/callback
。如果您的 Chainlit 应用托管在 localhost:8000,您应使用 http://localhost:8000/auth/oauth/google/callback
。
您需要设置以下环境变量
OAUTH_GOOGLE_CLIENT_ID
:客户端 IDOAUTH_GOOGLE_CLIENT_SECRET
:客户端密钥
Azure Active Directory
按照本指南创建新的 Azure Active Directory OAuth 应用。
回调 URL 应为:CHAINLIT_URL/auth/oauth/azure-ad/callback
。如果您的 Chainlit 应用托管在 localhost:8000,您应使用 http://localhost:8000/auth/oauth/azure-ad/callback
。
您需要设置以下环境变量
OAUTH_AZURE_AD_CLIENT_ID
:客户端 IDOAUTH_AZURE_AD_CLIENT_SECRET
:客户端密钥OAUTH_AZURE_AD_TENANT_ID
:Azure 租户 ID
如果您的应用支持“仅限此组织目录中的帐户”(单租户),您需要明确设置:OAUTH_AZURE_AD_ENABLE_SINGLE_TENANT=true
。否则,完全无需设置此环境变量。
Okta
按照本指南创建 OIDC 应用集成。
回调 URL 应为:CHAINLIT_URL/auth/oauth/okta/callback
。如果您的 Chainlit 应用托管在 localhost:8000,您应使用 http://localhost:8000/auth/oauth/okta/callback
。
您需要设置以下环境变量
OAUTH_OKTA_CLIENT_ID
:客户端 IDOAUTH_OKTA_CLIENT_SECRET
:客户端密钥OAUTH_OKTA_DOMAIN
:Okta 设置的域名 - 例如 https://company.okta.com
配置 Okta OAuth 路由有几种方法
- 使用 Okta 单点登录 设置时,您需要将
OAUTH_OKTA_AUTHORIZATION_SERVER_ID
环境变量设置为false
。 - 将 Okta 用作您的应用或 API 的身份平台时,您可以
- 如果您有开发者帐户,将
OAUTH_OKTA_AUTHORIZATION_SERVER_ID
环境变量设置为default
, - 或将其设置为您的自定义授权服务器的授权服务器 ID。
- 如果您有开发者帐户,将
Descope
前往 Descope 注册页面,开始创建您的帐户并设置您的认证。
回调 URL 应为:CHAINLIT_URL/auth/oauth/descope/callback
。如果您的 Chainlit 应用托管在 localhost:8000,您应使用 http://localhost:8000/auth/oauth/descope/callback
。
您需要设置以下环境变量
OAUTH_DESCOPE_CLIENT_ID
:Descope 项目 ID,可在控制台的项目设置下找到。OAUTH_DESCOPE_CLIENT_SECRET
:Descope 访问密钥,可在控制台的访问密钥下创建。
Auth0
按照本指南创建 Auth0 应用。
回调 URL 应为:CHAINLIT_URL/auth/oauth/auth0/callback
。如果您的 Chainlit 应用托管在 localhost:8000,您应使用 http://localhost:8000/auth/oauth/auth0/callback
。
您需要设置以下环境变量
OAUTH_AUTH0_CLIENT_ID
:客户端 IDOAUTH_AUTH0_CLIENT_SECRET
:客户端密钥OAUTH_AUTH0_DOMAIN
:Auth0 设置的域名
可选环境变量
OAUTH_AUTH0_ORIGINAL_DOMAIN
:Auth0 设置的原始域名(如果您使用自定义域名)
Amazon Cognito
按照本指南创建新的 Amazon Cognito 用户池。
回调 URL 应为:CHAINLIT_URL/auth/oauth/aws-cognito/callback
。如果您的 Chainlit 应用托管在 localhost:8000,您应使用 http://localhost:8000/auth/oauth/aws-cognito/callback
。
您需要设置以下环境变量
OAUTH_COGNITO_CLIENT_ID
:客户端 IDOAUTH_COGNITO_CLIENT_SECRET
:客户端密钥OAUTH_COGNITO_DOMAIN
:Cognito 域名
Keycloak
按照此文档在您的 realm 中创建新客户端。
您可以选择更改 Keycloak 提供商的 id
,默认 ID 为 keycloak
。如果您想在登录页面上显示更合适的名称,这将非常有用。使用 OAUTH_KEYCLOAK_NAME
环境变量来设置名称。不要选择与任何其他 OAuth 提供商冲突的 ID。
客户端的回调 URL 应为:CHAINLIT_URL/auth/oauth/${OAUTH_KEYCLOAK_NAME}/callback
。如果您的 Chainlit 应用托管在 localhost:8000,您应使用 http://localhost:8000/auth/oauth/${OAUTH_KEYCLOAK_NAME}/callback
。
您需要设置以下环境变量
OAUTH_KEYCLOAK_CLIENT_ID
:客户端 IDOAUTH_KEYCLOAK_CLIENT_SECRET
:客户端密钥OAUTH_KEYCLOAK_REALM
:包含您的客户端的 realm。OAUTH_KEYCLOAK_BASE_URL
:您的 Keycloak URL。OAUTH_KEYCLOAK_NAME
:可选,见上文。
自定义提供商
使用 Chainlit 可以接入任何 OAuth 提供商。所需步骤是
- 在运行时修改
providers
变量 - 实现带有方法和字段的
CustomOAuthProvider(OAuthProvider)
类get_token(self, code, url)
get_user_info(self, token)
authorize_params
env
- 提供 env 中描述的环境变量,例如
YOUR_PROVIDER_CLIENT_ID
YOUR_PROVIDER_CLIENT_SECRET
本 cookbook 示例描述了如何实现,也可查看基类作为参考。
Prompt 配置
从 1.3.0 版本开始,Chainlit 允许您通过 prompt
参数配置 OAuth 提供商如何处理重新认证。这对于控制用户退出登录时的行为特别有用。
您可以使用以下两个环境变量来配置此行为
OAUTH_PROMPT
:设置所有 OAuth 提供商的默认 prompt 行为OAUTH_<PROVIDER>_PROMPT
:设置特定提供商的 prompt 行为(例如,OAUTH_GITHUB_PROMPT
)
这些变量支持的值包括
none
:无需交互(未设置时的默认值)login
:强制重新认证consent
:请求批准所需的范围select_account
:允许用户选择不同的帐户
例如
注意:不同 OAuth 提供商对不同 prompt 值的行为和支持可能有所不同。例如
- GitHub 对
prompt=consent
响应良好 - 某些提供商(如 Descope)仅支持
prompt=login
此功能在您想要实现以下目的时特别有用
- 允许用户正确退出登录并切换帐户
- 出于安全目的强制重新认证
- 允许用户选择他们批准的范围
- 阻止退出登录后自动重新认证
prompt 参数在 OpenID Connect Core 1.0 规范中定义。更多技术细节,请参考 OpenID Connect 文档。