【发布时间】:2022-08-19 22:18:33
【问题描述】:
我正在使用 Keycloak 作为 Directus 的 SSO。它们位于同一网络中。
version: \'3\'
services:
nginx:
image: nginx:latest
container_name: nginx
restart: unless-stopped
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
ports:
- 80:80
networks:
- directus_keycloak
depends_on:
- keycloak
- directus_service
postgres:
container_name: postgres
image: postgres:13.7-alpine
volumes:
- ./db:/var/lib/postgresql/data
networks:
- directus_keycloak
ports:
- ...
environment:
...
redis:
container_name: redis
image: redis:6
networks:
- directus_keycloak
directus_service:
container_name: directus_service
image: directus/directus:latest
ports:
- 8055:8055
volumes:
- ./uploads:/directus/uploads
- ./extensions:/directus/extensions
- ./snapshots:/directus/snapshots
networks:
- directus_keycloak
depends_on:
- redis
- postgres
- keycloak
env_file:
- ./.env
keycloak:
image: quay.io/keycloak/keycloak:legacy
environment:
DB_VENDOR: postgres
DB_ADDR: \'postgres\'
DB_PORT: \'5432\'
DB_DATABASE: \'...\'
DB_USER: \'...\'
DB_PASSWORD: \'...\'
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: ...
PROXY_ADDRESS_FORWARDING: \"true\"
REDIRECT_SOCKET: \"proxy-http\"
KEYCLOAK_FRONTEND_URL: http://keycloak.localhost/auth
depends_on:
- postgres
networks:
- directus_keycloak
ports:
- \"8080:8080\"
networks:
directus_keycloak:
driver: bridge
我可以使用 NGINX 访问 Directus 和 Keycloak:
http {
upstream keycloak_backend {
least_conn;
server keycloak:8080;
}
upstream directus_backend {
least_conn;
server directus_service:8055;
}
server {
listen 80;
server_name keycloak.localhost;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
location / {
proxy_pass http://keycloak_backend;
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-Host $server_name;
}
}
server {
listen 80;
server_name api.localhost;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
location / {
proxy_pass http://directus_backend;
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-Host $server_name;
}
}
}
但是当我尝试使用 Keycloak 作为提供者登录 Directus 管理面板时,我得到We are sorry... page not found。
也有 .env 文件
KEY=\'..\'
SECRET=\'...\'
DB_CLIENT=\'pg\'
DB_HOST=\'postgres\'
DB_PORT=\'5432\'
DB_DATABASE=\'...\'
DB_USER=\'...\'
DB_PASSWORD=\'...\'
CACHE_ENABLED=false
CACHE_STORE=\'redis\'
CACHE_REDIS=\'redis://redis:6379\'
ADMIN_EMAIL=\'admin@example.com\'
ADMIN_PASSWORD=\'...\'
AUTH_PROVIDERS=\"keycloak\"
AUTH_KEYCLOAK_DRIVER=\"openid\"
AUTH_KEYCLOAK_CLIENT_ID=\"...\"
AUTH_KEYCLOAK_CLIENT_SECRET=\"...\"
AUTH_KEYCLOAK_ISSUER_URL=\"http://keycloak:8080/auth/realms/.../.well-known/openid-configuration\"
AUTH_KEYCLOAK_PROFILE_URL=\"http://keycloak:8080/auth/realms/.../.well-known/openid-configuration\"
AUTH_KEYCLOAK_ALLOW_PUBLIC_REGISTRATION=\"true\"
AUTH_KEYCLOAK_IDENTIFIER_KEY=\"email\"
AUTH_KEYCLOAK_SCOPE=\"openid email\"
我建议应该有一些方法可以在 keycloak 界面中设置重定向 url。我发现只设置了重定向 url 的验证。
有什么解决办法吗?
-
有用。在 keycloak 领域内配置客户端存在问题,而不是上面的配置
标签: nginx keycloak directus keycloak-connect