Casdoor SSO 身份认证平台
Casdoor 是由 Casbin 社区开发的开源 SSO(单点登录)身份认证平台,使用 Go 和 React 构建。它支持 OAuth 2.0、OIDC、SAML、LDAP 等多种认证协议,内置了丰富的第三方登录提供者(GitHub、Google、微信等),并提供了美观的管理界面。Casdoor 非常适合需要为多个应用提供统一登录服务的场景。
一、系统要求
- 操作系统:Ubuntu 20.04+(推荐 Ubuntu 22.04)。
- 内存:至少 1GB,建议 2GB。
- Docker:需要预先安装 Docker 和 Docker Compose。
二、Docker Compose 部署
mkdir -p /opt/casdoor && cd /opt/casdoor
cat > docker-compose.yml <<'EOF'
version: '3.8'
services:
casdoor:
image: casbin/casdoor:latest
container_name: casdoor
restart: always
ports:
- "127.0.0.1:8000:8000"
environment:
- RUNNING_IN_DOCKER=true
volumes:
- ./conf:/conf
depends_on:
db:
condition: service_healthy
db:
image: mysql:8.0
container_name: casdoor-db
restart: always
environment:
- MYSQL_ROOT_PASSWORD=CasdoorDBPass123
- MYSQL_DATABASE=casdoor
volumes:
- casdoor-db:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
volumes:
casdoor-db:
EOF
2.1 创建配置文件
mkdir -p /opt/casdoor/conf
cat > /opt/casdoor/conf/app.conf <<'EOF'
appname = casdoor
httpport = 8000
runmode = prod
copyrequestbody = true
driverName = mysql
dataSourceName = root:CasdoorDBPass123@tcp(db:3306)/casdoor?charset=utf8mb4
dbName = casdoor
tableNamePrefix =
showSql = false
redisEndpoint =
defaultStorageProvider =
isCloudIntranet = false
authState = "casdoor"
socks5Proxy = ""
verificationCodeTimeout = 10
initScore = 0
logPostOnly = true
origin = "https://auth.your-domain.com"
staticBaseUrl = "https://cdn.casbin.org"
EOF
2.2 启动服务
docker compose up -d
docker compose logs -f casdoor
三、Nginx 反向代理
cat > /etc/nginx/sites-available/casdoor <<'EOF'
server {
listen 443 ssl http2;
server_name auth.your-domain.com;
ssl_certificate /etc/letsencrypt/live/auth.your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/auth.your-domain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF
ln -sf /etc/nginx/sites-available/casdoor /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
四、首次配置
在浏览器中访问 https://auth.your-domain.com,使用默认管理员账号登录:
- 用户名:admin
- 密码:123
重要:首次登录后请立即修改管理员密码。
五、创建应用
在管理界面中创建新的 OAuth 应用:
- 进入"Applications"页面,点击"Add"创建新应用。
- 填写应用名称、描述和回调 URL。
- 选择认证协议(OAuth 2.0 或 OIDC)。
- 记录生成的 Client ID 和 Client Secret。
六、配置第三方登录
Casdoor 支持众多第三方身份提供者。在"Providers"页面可以配置:
- 社交登录:GitHub、Google、微信、QQ、微博等。
- 企业登录:LDAP、SAML、CAS。
- 邮件/短信:用于验证码登录和通知。
以 GitHub OAuth 为例:
# 在 GitHub 创建 OAuth App 后,将 Client ID 和 Client Secret 填入 Casdoor
# Authorization callback URL 填写:
# https://auth.your-domain.com/callback
七、集成到应用
Casdoor 提供了多种语言的 SDK:
# Python SDK
pip install casdoor
# Node.js SDK
npm install casdoor-nodejs-sdk
# Go SDK
go get github.com/casdoor/casdoor-go-sdk
Python 集成示例:
from casdoor import CasdoorSDK
sdk = CasdoorSDK(
endpoint='https://auth.your-domain.com',
client_id='YOUR_CLIENT_ID',
client_secret='YOUR_CLIENT_SECRET',
certificate='YOUR_CERTIFICATE',
org_name='built-in',
application_name='your-app'
)
# 获取登录 URL
login_url = sdk.get_auth_link(
redirect_uri='https://your-app.com/callback',
state='random-state-string'
)
# 用授权码获取 Token
token = sdk.get_oauth_token(code='authorization_code')
# 获取用户信息
user = sdk.parse_jwt_token(token['access_token'])
八、用户管理
通过 Casdoor 管理界面或 API 管理用户:
# 获取用户列表
curl -X GET "https://auth.your-domain.com/api/get-users?owner=built-in" \
-H "Authorization: Basic $(echo -n 'CLIENT_ID:CLIENT_SECRET' | base64)"
# 创建用户
curl -X POST "https://auth.your-domain.com/api/add-user" \
-H "Authorization: Basic $(echo -n 'CLIENT_ID:CLIENT_SECRET' | base64)" \
-H "Content-Type: application/json" \
-d '{
"owner": "built-in",
"name": "newuser",
"password": "UserPass123",
"email": "user@example.com"
}'
九、数据备份
# 备份 MySQL 数据
docker exec casdoor-db mysqldump -uroot -pCasdoorDBPass123 casdoor > /opt/backups/casdoor_$(date +%Y%m%d).sql
# 定时备份
crontab -e
0 3 * * * docker exec casdoor-db mysqldump -uroot -pCasdoorDBPass123 casdoor > /opt/backups/casdoor_$(date +\%Y\%m\%d).sql 2>&1
十、常见问题
数据库连接失败
确保 MySQL 容器已健康启动:
docker compose logs db
docker compose restart casdoor
第三方登录回调失败
检查 origin 配置是否与实际访问域名一致,回调 URL 是否正确。
总结
Casdoor 是功能丰富且易于使用的 SSO 平台,支持多种认证协议和第三方登录。在搬瓦工 VPS 上使用 Docker 可以快速搭建统一的身份认证服务。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 折扣。相关平台:Logto 教程、Authentik 教程、Zitadel 教程。