lobehub/docs/self-hosting/environment-variables/auth.zh-CN.mdx
2026-01-23 23:57:08 +08:00

514 lines
15 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: LobeChat 身份验证服务设置
description: 了解如何配置 LobeChat 的身份验证服务环境变量,包括 Better Auth、OAuth SSO、NextAuth 设置等。
tags:
- LobeChat
- 身份验证服务
- Better Auth
- 单点登录
- Next Auth
- Clerk
---
# 身份验证服务
LobeChat 在部署时提供了完善的身份验证服务能力,以下是相关的环境变量,你可以使用这些环境变量轻松定义需要在 LobeChat 中开启的身份验证服务。
## Better Auth
### 通用设置
#### `AUTH_SECRET`
- 类型:必选
- 描述用于加密会话令牌的密钥Better Auth 和 Next Auth 共享。使用以下命令生成:`openssl rand -base64 32`
- 默认值:`-`
- 示例:`Tfhi2t2pelSMEA8eaV61KaqPNEndFFdMIxDaJnS1CUI=`
#### `AUTH_EMAIL_VERIFICATION`
- 类型:可选
- 描述:设置为 `1` 以要求用户在登录前验证邮箱。用户注册后必须验证邮箱地址。
- 默认值:`0`
- 示例:`1`
#### `AUTH_SSO_PROVIDERS`
- 类型:可选
- 描述:启用的 SSO 提供商列表,以逗号分隔。顺序决定了登录页面上提供商的显示顺序。
- 默认值:`-`
- 示例:`google,github,microsoft,cognito`
#### `AUTH_ALLOWED_EMAILS`
- 类型:可选
- 描述:允许注册的邮箱或域名白名单,以逗号分隔。支持完整邮箱地址(如 `user@example.com`)或域名(如 `example.com`)。留空表示允许所有邮箱。
- 默认值:`-`
- 示例:`example.com,admin@other.com`
#### `JWKS_KEY`
- 类型:必选
- 描述:用于签名和验证 JWT 的 JWKSJSON Web Key Set密钥。用于 OIDC JWT token 签名和内部服务调用认证 token。必须是包含 RS256 RSA 密钥对的 JWKS JSON 字符串。
- 默认值:`-`
<GenerateJWKSKey />
#### `INTERNAL_JWT_EXPIRATION`
- 类型:可选
- 描述:内部 JWT 令牌的过期时间,用于 lambda → async 调用。格式数字后跟单位s = 秒m = 分钟h = 小时)。为了安全性应尽可能短,但需要足够长以应对网络延迟和服务器处理时间。
- 默认值:`30s`
- 示例:`30s`、`1m`、`1h`
### 邮件服务SMTP
启用邮箱验证和密码重置功能需要配置以下设置。
#### `SMTP_HOST`
- 类型:必选(用于邮件功能)
- 描述SMTP 服务器主机名。
- 默认值:`-`
- 示例:`smtp.gmail.com`
#### `SMTP_PORT`
- 类型:必选(用于邮件功能)
- 描述SMTP 服务器端口。TLS 通常为 `587`SSL 为 `465`。
- 默认值:`-`
- 示例:`587`
#### `SMTP_SECURE`
- 类型:可选
- 描述:是否使用安全连接。端口 465SSL设置为 `true`,端口 587TLS设置为 `false`。
- 默认值:`false`
- 示例:`false`
#### `SMTP_USER`
- 类型:必选(用于邮件功能)
- 描述SMTP 认证用户名,通常是您的邮箱地址。
- 默认值:`-`
- 示例:`your-email@example.com`
#### `SMTP_PASS`
- 类型:必选(用于邮件功能)
- 描述SMTP 认证密码。Gmail 需使用应用专用密码。
- 默认值:`-`
- 示例:`your-app-specific-password`
#### `SMTP_FROM`
- 类型:可选
- 描述发件人邮箱地址。AWS SES 等服务需要此配置(因为 `SMTP_USER` 不是有效邮箱地址)。若未设置,默认使用 `SMTP_USER`。
- 默认值:`SMTP_USER` 的值
- 示例:`noreply@example.com`
### Google
#### `AUTH_GOOGLE_ID`
- 类型:必选
- 描述Google OAuth 应用的 Client ID。在 [Google Cloud Console](https://console.cloud.google.com/apis/credentials) 获取。
- 默认值:`-`
- 示例:`123456789.apps.googleusercontent.com`
#### `AUTH_GOOGLE_SECRET`
- 类型:必选
- 描述Google OAuth 应用的 Client Secret。
- 默认值:`-`
- 示例:`GOCSPX-xxxxxxxxxxxxxxxxxxxx`
### GitHub
#### `AUTH_GITHUB_ID`
- 类型:必选
- 描述GitHub OAuth 应用的 Client ID。在 [GitHub Developer Settings](https://github.com/settings/developers) 获取。
- 默认值:`-`
- 示例:`Ov23xxxxxxxxxxxxx`
#### `AUTH_GITHUB_SECRET`
- 类型:必选
- 描述GitHub OAuth 应用的 Client Secret。
- 默认值:`-`
- 示例:`xxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
### Microsoft
#### `AUTH_MICROSOFT_ID`
- 类型:必选
- 描述Microsoft Entra IDAzure AD应用的 Client ID。在 [Azure 门户](https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade) 获取。
- 默认值:`-`
- 示例:`xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
#### `AUTH_MICROSOFT_SECRET`
- 类型:必选
- 描述Microsoft Entra ID 应用的 Client Secret。
- 默认值:`-`
- 示例:`xxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
### AWS Cognito
#### `AUTH_COGNITO_ID`
- 类型:必选
- 描述AWS Cognito 用户池应用客户端的 Client ID。在 [AWS Cognito 控制台](https://console.aws.amazon.com/cognito) 获取。
- 默认值:`-`
- 示例:`xxxxxxxxxxxxxxxxxxxxx`
#### `AUTH_COGNITO_SECRET`
- 类型:必选
- 描述AWS Cognito 应用客户端的 Client Secret。
- 默认值:`-`
- 示例:`xxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
#### `AUTH_COGNITO_ISSUER`
- 类型:必选
- 描述Cognito 用户池的颁发者 URL。格式`https://cognito-idp.{region}.amazonaws.com/{userPoolId}`
- 默认值:`-`
- 示例:`https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx`
### 飞书
#### `AUTH_FEISHU_APP_ID`
- 类型:必选
- 描述:飞书应用的 App ID。在 [飞书开放平台](https://open.feishu.cn/app) 获取。
- 默认值:`-`
- 示例:`cli_xxxxxxxxxxxxxxxx`
#### `AUTH_FEISHU_APP_SECRET`
- 类型:必选
- 描述:飞书应用的 App Secret。
- 默认值:`-`
- 示例:`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
### 微信
#### `AUTH_WECHAT_ID`
- 类型:必选
- 描述:微信开放平台应用的 App ID。在 [微信开放平台](https://open.weixin.qq.com/) 获取。
- 默认值:`-`
- 示例:`wxxxxxxxxxxxxxxxxxxx`
#### `AUTH_WECHAT_SECRET`
- 类型:必选
- 描述:微信应用的 App Secret。
- 默认值:`-`
- 示例:`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
<Callout type={'info'}>
其他基于 OIDC 的提供商Auth0、Authelia、Authentik、Casdoor、Cloudflare Zero Trust、Keycloak、Logto、Okta、ZITADEL、Generic OIDC的环境变量配置与 Next Auth 相同。详情请参阅下方的 [Next Auth 章节](#next-auth)。
</Callout>
## Next Auth
### 通用设置
#### `NEXT_PUBLIC_ENABLE_NEXT_AUTH`
- v1.52.0 之后有变更
- 针对使用 Vercel 部署中使用 next-auth 的用户,需要额外添加 NEXT\_PUBLIC\_ENABLE\_NEXT\_AUTH=1 环境变量来确保开启 Next Auth
- 针对使用自构建镜像中使用 clerk 的用户,需要额外配置 NEXT\_PUBLIC\_ENABLE\_NEXT\_AUTH=0 环境变量来关闭 Next Auth
- 其他标准部署场景Vercel 中使用 Clerk 与 Docker 中使用 next-auth )不受影响
#### `NEXT_AUTH_SECRET`
- 类型:必选
- 描述:用于加密 Auth.js 会话令牌的密钥。您可以使用以下命令生成秘钥: `openssl rand -base64 32`.
- 默认值: `-`
- 示例: `Tfhi2t2pelSMEA8eaV61KaqPNEndFFdMIxDaJnS1CUI=`
#### `NEXT_AUTH_SSO_PROVIDERS`
- 类型:可选
- 描述:选择 LoboChat 的单点登录提供商。如果有多个单点登录提供商,请用逗号分隔,例如 `auth0,microsoft-entra-id,authentik`
- 默认值: `auth0`
- 示例: `auth0,microsoft-entra-id,authentik`
#### `NEXTAUTH_URL`
- 类型:可选
- 描述:该 URL 用于指定 Auth.js 在执行 OAuth 验证时的回调地址,在 Vercel 上部署时无需设置。
- 默认值:`-`
- 示例:`https://example.com/api/auth`
### Auth0
#### `AUTH_AUTH0_ID`
- 类型:必选
- 描述: Auth0 应用程序的 Client ID您可以访问[这里](https://manage.auth0.com/dashboard)并导航至应用程序设置来查看
- 默认值: `-`
- 示例: `evCnOJP1UX8FMnXR9Xkj5t0NyFn5p70P`
#### `AUTH_AUTH0_SECRET`
- 类型:必选
- 描述: Auth0 应用程序的 Client Secret
- 默认值: `-`
- 示例: `wnX7UbZg85ZUzF6ioxPLnJVEQa1Elbs7aqBUSF16xleBS5AdkVfASS49-fQIC8Rm`
#### `AUTH_AUTH0_ISSUER`
- 类型:必选
- 描述: Auth0 应用程序的签发人 / 域
- 默认值: `-`
- 示例: `https://example.auth0.com`
### Authelia
#### `AUTH_AUTHELIA_ID`
- 类型:必选
- 描述: Authelia 提供程序的 Client ID
- 默认值: `-`
- 示例: `lobe-chat`
#### `AUTH_AUTHELIA_SECRET`
- 类型:必选
- 描述: Authelia 提供程序的 Client Secret 的明文
- 默认值: `-`
- 示例: `insecure_secret`
#### `AUTH_AUTHELIA_ISSUER`
- 类型:必选
- 描述: Authentik 提供程序的 OpenID Connect 颁发者
- 默认值: `-`
- 示例: `https://sso.example.com`
### Authentik
#### `AUTH_AUTHENTIK_ID`
- 类型:必选
- 描述: Authentik 提供程序的 Client ID
- 默认值: `-`
- 示例: `YNtbIRlYF8Kj66mTLue59nsGLlb7HNyx1qjPH6VS`
#### `AUTH_AUTHENTIK_SECRET`
- 类型:必选
- 描述: Authentik 提供程序的 Client Secret
- 默认值: `-`
- 示例: `h3lMI1vPUzqyqqeIDUbH5UNNOxyQLXk35h89yETeaAwHk7qVXBG3sJQWeqHBU5pyggwhP9u0eaZ1eq6DHUddVPLoS4gncqD37yuCr8jI8dY66WAt45MStDsDcQm0Ygze`
#### `AUTH_AUTHENTIK_ISSUER`
- 类型:必选
- 描述: Authentik 提供程序的 OpenID Connect 颁发者
- 默认值: `-`
- 示例: `https://your-authentik-domain.com/application/o/slug/`
### Casdoor
#### `AUTH_CASDOOR_ID`
- 类型:必选
- 描述: Casdoor 提供程序的 Client ID
- 默认值: `-`
- 示例: `570bfa85a21800a25198`
#### `AUTH_CASDOOR_SECRET`
- 类型:必选
- 描述: Casdoor 提供程序的 Client Secret 的明文
- 默认值: `-`
- 示例: `233a623a15eac2db2e43bb8a323eda729552c405`
#### `AUTH_CASDOOR_ISSUER`
- 类型:必选
- 描述: Casdoor 提供程序的 OpenID Connect 颁发者
- 默认值: `-`
- 示例: `https://lobe-auth-api.example.com/`
### Cloudflare Zero Trust
#### `AUTH_CLOUDFLARE_ZERO_TRUST_ID`
- 类型:必选
- 描述: Cloudflare Zero Trust 提供程序的 Client ID
- 默认值: `-`
- 示例: `711963a58df8c943cfd6c487cac99ce9f6ee0c88c0b7bf94584b8ff052fcb09c`
#### `AUTH_CLOUDFLARE_ZERO_TRUST_SECRET`
- 类型:必选
- 描述: Cloudflare Zero Trust 提供程序的 Client Secret 的明文
- 默认值: `-`
- 示例: `8f26d4ef834a828045b401e032ae128dbb00471bca53f0d25332323f525dfa30`
#### `AUTH_CLOUDFLARE_ZERO_TRUST_ISSUER`
- 类型:必选
- 描述: Cloudflare Zero Trust 提供程序的 OpenID Connect 颁发者
- 默认值: `-`
- 示例: `https://example.cloudflareaccess.com/cdn-cgi/access/sso/oidc/711963a58df8c943cfd6c487cac99ce9f6ee0c88c0b7bf94584b8ff052fcb09c`
### Github
#### `AUTH_GITHUB_ID`
- 类型:必选
- 描述: Github 应用的客户端 ID。您可以在[这里](https://github.com/settings/apps)访问,并导航到应用程序设置以查看。
- 默认值: `-`
- 示例: `abd94200333283550508`
#### `AUTH_GITHUB_SECRET`
- 类型:必选
- 描述: Github 应用的客户端密钥。
- 默认值: `-`
- 示例: `dd262976ac0931d947e104891586a053f3d3750b`
### Logto
#### `AUTH_LOGTO_ID`
- 类型:必选
- 描述Logto 应用程序的 Client ID。您可以在根据部署模式在私有部署的 Logto 控制台或 [Logto Cloud](http://cloud.logto.io/) 中找到。
- 默认值:`-`
- 示例:`123456789012345678@your-project`
#### `AUTH_LOGTO_SECRET`
- 类型:必选
- 描述Logto 应用程序的 Client Secret。
- 默认值:`-`
- 示例:`9QF1n5ATzU7Z3mHp2Iw4gKX8kY6oR7uW1DnKcV3LqX2jF6iG3fBmJ1kV7nS5zE6A`
#### `AUTH_LOGTO_ISSUER`
- 类型:必选
- 描述Logto 应用程序的 OpenID Connect 颁发者issuer。根据部署模式您可以在私有部署的 Logto 控制台或 [Logto Cloud](http://cloud.logto.io/) 中找到。
- 默认值:`-`
- 示例:`https://lobe-auth-api.example.com/oidc`
### Microsoft Entra ID
#### `AUTH_AZURE_AD_ID`
- 类型:必选
- 描述Microsoft Entra ID 应用程序的客户端 ID。
- 默认值:`-`
- 示例:`be8f6da1-58c3-4f16-ff1b-78f5148e10df`
#### `AUTH_AZURE_AD_SECRET`
- 类型:必选
- 描述Microsoft Entra ID 应用程序的客户端密钥。
- 默认值:`-`
- 示例:`~gI8Q.pTiN1vwB6Gl.E1yFT1ojcXABkdACfJXaNj`
#### `AUTH_AZURE_AD_TENANT_ID`
- 类型:必选
- 描述Microsoft Entra ID 应用程序的租户 ID。
- 默认值:`-`
- 示例:`c8ae2f36-edf6-4cda-96b9-d3e198a47cba`
### ZITADEL
#### `AUTH_ZITADEL_ID`
- 类型:必选
- 描述ZITADEL 应用的 Client ID。您可以在 ZITADEL 控制台应用设置中找到 Client ID。
- 默认值:`-`
- 示例:`123456789012345678@your-project`
#### `AUTH_ZITADEL_SECRET`
- 类型:必选
- 描述ZITADEL 应用的 Client Secret。
- 默认值:`-`
- 示例:`9QF1n5ATzU7Z3mHp2Iw4gKX8kY6oR7uW1DnKcV3LqX2jF6iG3fBmJ1kV7nS5zE6A`
#### `AUTH_ZITADEL_ISSUER`
- 类型:必选
- 描述ZITADEL 应用的 OpenID Connect 颁发者issuer通常为 ZITADEL 实例的 URL。您可以在 ZITADEL 控制台应用设置中的 `URLs` 选项卡中找到 issuer。
- 默认值:`-`
- 示例:`https://your-instance-abc123.zitadel.cloud`
### Okta
#### `AUTH_OKTA_ID`
- 类型:必选
- 描述Okta 应用程序的 Client ID。您可以在 Okta 控制台的应用程序设置中找到。
- 默认值:`-`
- 示例:`ac12c950f3ce48c8a45a`
#### `AUTH_OKTA_SECRET`
- 类型:必选
- 描述Okta 应用程序的 Client Secret。您可以在 Okta 控制台的应用程序设置中找到。
- 默认值:`-`
- 示例:`ex1HqvSOOkC5INqo42grOSqNvHoD4p84em1yy5QU7v88IZlaWGywFjYkrkpkSopt`
#### `AUTH_OKTA_ISSUER`
- 类型:必选
- 描述Okta 应用程序的 OpenID Connect 颁发者issuer。这是 Okta 实例的 URL—— 如果设置了品牌化,也可以是您的自定义域名。
- 默认值:`-`
- 示例:`https://your-instance.okta.com`
### Generic OIDC
#### `AUTH_GENERIC_OIDC_ID`
- 类型:必选
- 描述: Generic OIDC 提供程序的 Client ID
- 默认值: `-`
- 示例: `_client_id_for_lobe_chat_`
#### `AUTH_GENERIC_OIDC_SECRET`
- 类型:必选
- 描述: Generic OIDC 提供程序的 Client Secret 的明文
- 默认值: `-`
- 示例: `_client_secret_for_lobe_chat_`
#### `AUTH_GENERIC_OIDC_ISSUER`
- 类型:必选
- 描述: Generic OIDC 提供程序的 OpenID Connect 颁发者
- 默认值: `-`
- 示例: `https://sso.example.com`
<Callout>
如果您需要使用其他身份验证服务提供商,可以提交
[功能请求](https://github.com/lobehub/lobe-chat/issues/new/choose) 或 Pull Request。
</Callout>
## Clerk
### `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY`
- 类型:必选
- 描述: Clerk 应用程序的 Publishable key。您可以在[这里](https://dashboard.clerk.com)访问,并导航到 API Keys 以查看。
- 默认值:`-`
- 示例: `pk_test_Zmxvd4luZy1wdW1hLTIyLmNsXXJrTmFjY291bnRzLmRldiQ` (测试环境) / `pk_live_Y2xlcdsubG9iZWh1Yi1cbmMuY24k` (生产环境)
### `CLERK_SECRET_KEY`
- 类型:必选
- 描述: Clerk 应用程序的 Secret key。您可以在[这里](https://dashboard.clerk.com)访问,并导航到 API Keys 以查看。
- 默认值:`-`
- 示例: `sk_test_513Ma0P7IAWM1XMv4waxZjRYRajWTaCfJLjpEO3SD2` (测试环境) / `sk_live_eMMlHjwJvZFUfczFljSKqZdwQtLvmczmsJSNmdrpeZ`(生产环境)