告别 Auth0 卡顿!手把手教你部署 Casdoor:最适合国人的开源身份认证中心(完美适配 LobeChat)**
---
###
前言:为什么我们需要 Casdoor?
如果你正在自托管 LobeChat、NextChat 或者其他现代 Web 应用,你一定遇到过“鉴权”的烦恼。
官方默认推荐的 Auth0 虽然强大,但在国内环境简直是“水土不服”:
1. **访问慢**:登录界面加载半天,体验极差。
2. **不仅是墙的问题**:Auth0 的免费额度虽然够用,但数据都在海外。
3. **UI 英文**:对普通用户不够友好。
今天给大家安利一个**国产开源之光——Casdoor**。它基于 Go 语言开发,轻量、极速,而且 UI 界面原生支持中文,更重要的是,它能配置出非常漂亮的**“微信/手机号/邮箱”**三合一登录界面,完美替代 Auth0!
---
###
准备工作
* 一台云服务器(VPS)或者本地 NAS
* 安装好 Docker 和 Docker Compose
* 一个域名(建议配置好 Nginx 反代,虽然 IP 也能用,但为了回调正常,推荐域名)
---
###
第一步:Docker Compose 一键部署
为了数据安全,我们采用 **Casdoor + MySQL** 分离部署的模式。
创建一个文件夹 `casdoor`,在里面新建 `docker-compose.yml` 文件:
```yaml
version: '3'
services:
# 数据库服务
casdoor-db:
image: mysql:8.0
container_name: casdoor-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_password # 【请修改】数据库Root密码
MYSQL_DATABASE: casdoor
MYSQL_USER: casdoor
MYSQL_PASSWORD: casdoor_password # 【请修改】Casdoor专用密码
volumes:
- ./db_data:/var/lib/mysql
networks:
- casdoor-net
# Casdoor 主程序
casdoor:
image: casbin/casdoor:latest
container_name: casdoor
restart: always
ports:
- "8000:8000" # 宿主机端口映射
environment:
RUN_MODE: dev
driverName: mysql
# 下面这行连接字符串对应上面的数据库配置
dataSourceName: casdoor:casdoor_password@tcp(casdoor-db:3306)/
# 如果想用默认的 SQLite (不推荐生产环境),把上面两行删掉即可
depends_on:
- casdoor-db
networks:
- casdoor-net
networks:
casdoor-net:
driver: bridge
```
启动服务:
```bash
docker-compose up -d
```
等待几秒钟,访问 `http://你的IP:8000`,你就能看到 Casdoor 的登录界面了!
* **默认账号**:`admin`
* **默认密码**:`123`
---
###
第二步:Casdoor 初始化配置
登录后台后,不要被菜单吓到,我们只需要动这几个地方:
**1. 修改组织 (Organization)**
点击顶部菜单 `Identity` -> `Organizations`。
默认有一个 `built-in` 组织,你可以点击 `Edit` 修改它,或者新建一个。比如叫 `MyHomeLab`。
* 在这里可以配置**密码规则**、**默认语言**(选 zh-CN)等。
**2. 配置应用 (Application)**
点击 `Identity` -> `Applications`。这是最关键的一步。
* 点击 `Add` 创建新应用,例如叫 `LobeChat-App`。
* **Organization**: 选择刚才的 `MyHomeLab`。
* **Redirect URLs (回调地址)**: 这里非常重要!如果你是部署 LobeChat,请填入:
```
http://你的LobeChat域名或IP:端口/api/auth/callback/casdoor
```
*(注意:如果是本地测试,IP地址后要把路径写全)*
* **Client ID & Client Secret**: 页面上会自动生成,**记下来**,后面要用!
**3. 开启注册/登录方式**
在 Application 的编辑页面往下翻,找到 `Providers`。
* 如果你想用**邮箱+密码**:确保添加了 `Email`。
* 如果你想用**微信扫码**:需要添加 `WeChat` Provider(注意:需要微信开放平台企业认证)。
* 如果你没有企业资质,建议配置 **SMTP** 服务,使用邮箱验证码登录,体验也很棒。
---
###
第三步:对接 LobeChat
回到你的 LobeChat 部署文件(`docker-compose.yml`),添加以下环境变量,让 LobeChat 知道“我要用 Casdoor 登录”:
```yaml
environment:
# 开启鉴权
- ENABLE_OAUTH_SSO=1
- ACCESS_CODE=你的LobeChat访问密码 # 即使开启SSO,建议也留一个后门密码
# 告诉 LobeChat 使用 Casdoor
- NEXT_AUTH_SSO_PROVIDERS=casdoor
# Casdoor 配置信息
- AUTH_CASDOOR_DRIVER=oidc
- AUTH_CASDOOR_NAME=Casdoor
- AUTH_CASDOOR_ICON=https://你的Casdoor域名/static/img/logo.png
- AUTH_CASDOOR_ID=刚才复制的Client_ID
- AUTH_CASDOOR_SECRET=刚才复制的Client_Secret
- AUTH_CASDOOR_ISSUER=http://你的Casdoor域名:8000 # 注意:这里如果填内网IP,需确保容器间能互通
```
重启 LobeChat,现在点击登录,应该就会跳转到你自建的 Casdoor 认证中心了!
---
###
进阶玩法:复刻“微信风格”UI
Casdoor 强就强在 UI 可以高度定制。
在 `Applications` -> `Edit` -> `Theme` 这一栏:
* **Primary Color**: 改成微信绿 `#07C160`
* **Border Radius**: 设置一点圆角
* **Background URL**: 换一张高大上的背景图
如果你配置了 WeChat Provider,界面就会自动变成“微信扫码”优先,下方是“账号密码”登录,这才是最符合国人习惯的 SSO!
---
###
总结
通过 Casdoor,我们不仅解决到了 Auth0 连接慢的问题,还掌握了用户数据的所有权。以后你再部署其他的服务(比如 MinIO, Outline, Portainer),全都可以接在这个 Casdoor 上,实现**“一个账号,畅通全家”**的单点登录体验!
**明天我就实战部署,有问题欢迎在评论区交流!
**
---
###
如果你正在自托管 LobeChat、NextChat 或者其他现代 Web 应用,你一定遇到过“鉴权”的烦恼。
官方默认推荐的 Auth0 虽然强大,但在国内环境简直是“水土不服”:
1. **访问慢**:登录界面加载半天,体验极差。
2. **不仅是墙的问题**:Auth0 的免费额度虽然够用,但数据都在海外。
3. **UI 英文**:对普通用户不够友好。
今天给大家安利一个**国产开源之光——Casdoor**。它基于 Go 语言开发,轻量、极速,而且 UI 界面原生支持中文,更重要的是,它能配置出非常漂亮的**“微信/手机号/邮箱”**三合一登录界面,完美替代 Auth0!
---
###
* 一台云服务器(VPS)或者本地 NAS
* 安装好 Docker 和 Docker Compose
* 一个域名(建议配置好 Nginx 反代,虽然 IP 也能用,但为了回调正常,推荐域名)
---
###
为了数据安全,我们采用 **Casdoor + MySQL** 分离部署的模式。
创建一个文件夹 `casdoor`,在里面新建 `docker-compose.yml` 文件:
```yaml
version: '3'
services:
# 数据库服务
casdoor-db:
image: mysql:8.0
container_name: casdoor-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_password # 【请修改】数据库Root密码
MYSQL_DATABASE: casdoor
MYSQL_USER: casdoor
MYSQL_PASSWORD: casdoor_password # 【请修改】Casdoor专用密码
volumes:
- ./db_data:/var/lib/mysql
networks:
- casdoor-net
# Casdoor 主程序
casdoor:
image: casbin/casdoor:latest
container_name: casdoor
restart: always
ports:
- "8000:8000" # 宿主机端口映射
environment:
RUN_MODE: dev
driverName: mysql
# 下面这行连接字符串对应上面的数据库配置
dataSourceName: casdoor:casdoor_password@tcp(casdoor-db:3306)/
# 如果想用默认的 SQLite (不推荐生产环境),把上面两行删掉即可
depends_on:
- casdoor-db
networks:
- casdoor-net
networks:
casdoor-net:
driver: bridge
```
启动服务:
```bash
docker-compose up -d
```
等待几秒钟,访问 `http://你的IP:8000`,你就能看到 Casdoor 的登录界面了!
* **默认账号**:`admin`
* **默认密码**:`123`
---
###
登录后台后,不要被菜单吓到,我们只需要动这几个地方:
**1. 修改组织 (Organization)**
点击顶部菜单 `Identity` -> `Organizations`。
默认有一个 `built-in` 组织,你可以点击 `Edit` 修改它,或者新建一个。比如叫 `MyHomeLab`。
* 在这里可以配置**密码规则**、**默认语言**(选 zh-CN)等。
**2. 配置应用 (Application)**
点击 `Identity` -> `Applications`。这是最关键的一步。
* 点击 `Add` 创建新应用,例如叫 `LobeChat-App`。
* **Organization**: 选择刚才的 `MyHomeLab`。
* **Redirect URLs (回调地址)**: 这里非常重要!如果你是部署 LobeChat,请填入:
```
http://你的LobeChat域名或IP:端口/api/auth/callback/casdoor
```
*(注意:如果是本地测试,IP地址后要把路径写全)*
* **Client ID & Client Secret**: 页面上会自动生成,**记下来**,后面要用!
**3. 开启注册/登录方式**
在 Application 的编辑页面往下翻,找到 `Providers`。
* 如果你想用**邮箱+密码**:确保添加了 `Email`。
* 如果你想用**微信扫码**:需要添加 `WeChat` Provider(注意:需要微信开放平台企业认证)。
* 如果你没有企业资质,建议配置 **SMTP** 服务,使用邮箱验证码登录,体验也很棒。
---
###
回到你的 LobeChat 部署文件(`docker-compose.yml`),添加以下环境变量,让 LobeChat 知道“我要用 Casdoor 登录”:
```yaml
environment:
# 开启鉴权
- ENABLE_OAUTH_SSO=1
- ACCESS_CODE=你的LobeChat访问密码 # 即使开启SSO,建议也留一个后门密码
# 告诉 LobeChat 使用 Casdoor
- NEXT_AUTH_SSO_PROVIDERS=casdoor
# Casdoor 配置信息
- AUTH_CASDOOR_DRIVER=oidc
- AUTH_CASDOOR_NAME=Casdoor
- AUTH_CASDOOR_ICON=https://你的Casdoor域名/static/img/logo.png
- AUTH_CASDOOR_ID=刚才复制的Client_ID
- AUTH_CASDOOR_SECRET=刚才复制的Client_Secret
- AUTH_CASDOOR_ISSUER=http://你的Casdoor域名:8000 # 注意:这里如果填内网IP,需确保容器间能互通
```
重启 LobeChat,现在点击登录,应该就会跳转到你自建的 Casdoor 认证中心了!
---
###
Casdoor 强就强在 UI 可以高度定制。
在 `Applications` -> `Edit` -> `Theme` 这一栏:
* **Primary Color**: 改成微信绿 `#07C160`
* **Border Radius**: 设置一点圆角
* **Background URL**: 换一张高大上的背景图
如果你配置了 WeChat Provider,界面就会自动变成“微信扫码”优先,下方是“账号密码”登录,这才是最符合国人习惯的 SSO!
---
###
通过 Casdoor,我们不仅解决到了 Auth0 连接慢的问题,还掌握了用户数据的所有权。以后你再部署其他的服务(比如 MinIO, Outline, Portainer),全都可以接在这个 Casdoor 上,实现**“一个账号,畅通全家”**的单点登录体验!
**明天我就实战部署,有问题欢迎在评论区交流!