docs/self-hosting/auth/providers/casdoor.mdx
Casdoor is an open-source Identity Access Management (IAM) platform with web UI for SSO.
<Steps> ### Create Application in CasdoorLobeHub<Callout type={'info'}>
Callback URL Format: https://your-domain.com/api/auth/callback/casdoor
</Callout>
The issuer URL is your Casdoor server URL, typically: https://your-casdoor-domain
When deploying LobeHub, you need to configure the following environment variables:
| Environment Variable | Type | Description |
|---|---|---|
AUTH_SECRET | Required | Key used to encrypt session tokens. Generate using: openssl rand -base64 32 |
AUTH_SSO_PROVIDERS | Required | SSO provider for LobeHub. Use casdoor for Casdoor |
AUTH_CASDOOR_ID | Required | Client ID from Casdoor application |
AUTH_CASDOOR_SECRET | Required | Client Secret from Casdoor application |
AUTH_CASDOOR_ISSUER | Required | Casdoor server URL (e.g., https://your-casdoor-domain) |
CASDOOR_WEBHOOK_SECRET | Optional | Secret key for validating Webhook requests from Casdoor |
<Callout type={'tip'}> Go to 📘 Environment Variables for detailed information on these variables. </Callout>
Available in Casdoor
>=1.843.0.
Configure Casdoor Webhook to sync user data updates to LobeHub.
Synced data fields:
avatar)email)displayName)Configuration steps:
https://your-domain.com/api/webhooks/casdoorPOSTapplication/jsoncasdoor-secret: your-webhook-secretupdate-userCASDOOR_WEBHOOK_SECRET environment variable
</Steps>
<Callout type={'info'}> After successful deployment, users will be able to authenticate with Casdoor and use LobeHub. </Callout>
If you're deploying LobeHub using Docker Compose, refer to the following configuration to integrate Casdoor as an authentication service.
In domain mode, you need to configure a reverse proxy to ensure Casdoor is accessible:
| Domain | Proxy Port | Description |
|---|---|---|
auth.example.com | 8000 | Casdoor service |
location /.well-known/openid-configuration {
proxy_pass http://localhost:8000; # Forward to localhost:8000
proxy_set_header Host $host; # Keep the original host header
proxy_set_header X-Real-IP $remote_addr; # Keep the client's real IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Keep the forwarded IP
proxy_set_header X-Forwarded-Proto $scheme; # Keep the request protocol
}
⚠️ Please do not enable any form of caching in the reverse proxy settings of such panel software to avoid affecting the normal operation of the service. See https://github.com/lobehub/lobehub/discussions/5986 </Callout>
AUTH_CASDOOR_ISSUER=https://auth.example.com
This configuration affects LobeHub's login authentication service. Ensure the Casdoor service URL is correct.
In Casdoor's Web panel under Authentication -> Applications -> <Application ID, default is app-built-in> -> Redirect URLs, add:
https://lobe.example.com/api/auth/callback/casdoor
origin=https://auth.example.com
Check container logs for the following errors:
docker logs -f lobehub
r3: "response" is not a conform Authorization Server Metadata response
lobehub | [auth][error] r3: "response" is not a conform Authorization Server Metadata response (unexpected HTTP status code)
Cause: This issue is typically caused by improper reverse proxy configuration. Ensure your reverse proxy doesn't intercept Casdoor's OAuth2 configuration requests.
Solution:
Refer to the reverse proxy configuration notes above.
Direct troubleshooting: Access https://auth.example.com/.well-known/openid-configuration:
"issuer": "URL" field doesn't match https://auth.example.com, your environment variable configuration is incorrect.TypeError: fetch failed
lobehub | [auth][error] TypeError: fetch failed
Cause: LobeHub cannot access the authentication service.
Solution:
Check if your authentication service is running properly and if LobeHub's network can reach it.
Direct troubleshooting: Use curl in the LobeHub container terminal to access https://auth.example.com/.well-known/openid-configuration. If JSON data is returned, your authentication service is working correctly.
If OAuth authentication fails during the token exchange phase when using Docker behind a reverse proxy, this is typically caused by the default MIDDLEWARE_REWRITE_THROUGH_LOCAL=1 setting.
Solution: Set MIDDLEWARE_REWRITE_THROUGH_LOCAL=0 in your .env file and restart Docker containers:
docker compose down
docker compose up -d
Casdoor Docker Compose configuration files can be found in the docker-compose/local/casdoor directory.