概述
Chainlit
应用程序默认为公开。要启用身份验证并将您的应用程序设为私有,您需要:
定义一个
CHAINLIT_AUTH_SECRET
环境变量。这是一个用于签署身份验证令牌的秘密字符串。您可以随时更改它,但它会注销所有用户。您可以使用 轻松生成一个
chainlit create-secret
。
向您的应用添加一个或多个身份验证回调:
- 密码验证 使用登录名/密码验证用户。
- OAuth授权 使用您自己的
OAuth
应用程序(如Google
等)对用户进行身份验证。 - header验证 根据自定义标头对用户进行身份验证。
每个回调接受不同的输入并可选地返回一个
cl.User
对象。如果回调返回
None
,则认为身份验证失败。
确保每个用户都有一个唯一的标识符,以防止他们共享其数据。
获取当前已认证的用户
您可以通过用户会话访问当前经过身份验证的用户。
@cl.on_chat_startasyncdefon_chat_start():
app_user = cl.user_session.get("user")await cl.Message(f"Hello {app_user.identifier}").send()
密码验证
@cl.password_auth_callback
从登录表单接收用户名和密码。返回一个对象cl.User将对用户进行身份验证,否则None将导致身份验证失败。
您可以根据您想要的任何服务(您自己的数据库、私人
Google
表格等)验证凭据。
这里适用通常的最佳安全做法,即在存储密码之前对其进行哈希处理。
例子
from typing import Optional
import chainlit as cl
@cl.password_auth_callbackdefauth_callback(username:str, password:str):# Fetch the user matching username from your database# and compare the hashed password with the value stored in the databaseif(username, password)==("admin","admin"):return cl.User(
identifier="admin", metadata={"role":"admin","provider":"credentials"})else:returnNone
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: 客户端 ID
OAUTH_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: 客户端 ID
OAUTH_GITLAB_CLIENT_SECRET: 客户端密匙
OAUTH_GITLAB_DOMAIN:域名(不带协议)
google 谷歌
转到此页面创建一个新的 Google OAuth 应用程序。
回调 URL 应为:
CHAINLIT_URL/auth/oauth/google/callback
。如果您的
Chainlit
应用托管在
localhost:8000
,则应使用
http://localhost:8000/auth/oauth/google/callback
。
您需要设置以下环境变量:
OAUTH_GOOGLE_CLIENT_ID: 客户端 ID
OAUTH_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: 客户端 ID
OAUTH_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: 客户端 ID
OAUTH_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 Access Key,可以在控制台的Access Keys下创建。
Auth0
按照本指南创建 Auth0 应用程序。
回调 URL 应为:
CHAINLIT_URL/auth/oauth/auth0/callback
。如果您的
Chainlit
应用托管在
localhost:8000
,则应使用
http://localhost:8000/auth/oauth/auth0/callback
。
您需要设置以下环境变量:
OAUTH_AUTH0_CLIENT_ID: 客户端 ID
OAUTH_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: 客户端 ID
OAUTH_COGNITO_CLIENT_SECRET: 客户端密匙
OAUTH_COGNITO_DOMAIN: Cognito 域
示例
允许所有通过
oauth
认证的用户。
from typing import Dict, Optional
import chainlit as cl
@cl.oauth_callbackdefoauth_callback(
provider_id:str,
token:str,
raw_user_data: Dict[str,str],
default_user: cl.User,)-> Optional[cl.User]:return default_user
仅允许来自特定
Google 域
的用户。
from typing import Dict, Optional
import chainlit as cl
@cl.oauth_callbackdefoauth_callback(
provider_id:str,
token:str,
raw_user_data: Dict[str,str],
default_user: cl.User,)-> Optional[cl.User]:if provider_id =="google":if raw_user_data["hd"]=="example.org":return default_user
returnNone
header验证
Header auth
是一种使用标头对用户进行身份验证的简单方法。它通常用于将身份验证委托给反向代理。
例子
from typing import Optional
import chainlit as cl
@cl.header_auth_callbackdefheader_auth_callback(headers: Dict)-> Optional[cl.User]:# Verify the signature of a token in the header (ex: jwt token)# or check that the value is matching a row from your databaseif headers.get("test-header")=="test-value":return cl.User(identifier="admin", metadata={"role":"admin","provider":"header"})else:returnNone
版权归原作者 泰山AI 所有, 如有侵权,请联系我们删除。