多个内部系统需要统一账号、OIDC/SAML 登录、LDAP 对接和集中授权。Keycloak 适合自建 SSO,尤其是需要细粒度角色和客户端级权限的场景。
X-Forwarded-* 头。helm repo add codecentric https://codecentric.github.io/helm-charts
helm install keycloak codecentric/keycloakx \
--namespace keycloak --create-namespace \
--set replicas=2 \
--set ingress.enabled=true \
--set ingress.hostname=sso.example.com \
--set postgresql.enabled=true
kubectl -n keycloak get pods
kubectl -n keycloak exec -it deploy/keycloak -- \
/opt/keycloak/bin/kcadm.sh config credentials \
--server http://localhost:8080 --realm master \
--user admin --password "$KEYCLOAK_ADMIN_PASSWORD"
kcadm.sh create realms -s realm=corp -s enabled=true
kcadm.sh create clients -r corp \
-s clientId=wiki -s enabled=true \
-s protocol=openid-connect \
-s 'redirectUris=["https://wiki.example.com/*"]' \
-s publicClient=false -s secret="$WIKI_CLIENT_SECRET"
kcadm.sh create components -r corp \
-s name=ldap -s providerId=ldap \
-s providerType=org.keycloak.storage.UserStorageProvider \
-s 'config.connectionUrl=["ldap://ldap.example.com:389"]' \
-s 'config.usersDn=["ou=people,dc=example,dc=com"]' \
-s 'config.bindDn=["cn=svc,ou=services,dc=example,dc=com"]' \
-s 'config.bindCredential=["***"]'
配置角色和组映射,按最小权限授予客户端角色。
应用侧使用 OIDC 授权码模式接入,校验 issuer、audience 和签名。Spring Security、oauth2-proxy、Nginx auth_request 都可以作为客户端。
开启登录审计和暴力破解防护:
kcadm.sh update realms/corp \
-s bruteForceProtected=true \
-s failureFactor=5 \
-s waitIncrementSeconds=60
sub、email、groups 等声明。kcadm.sh get realms/corp > corp.json。hostname、proxy 和 X-Forwarded-* 配置不一致,重定向到错误的 http 地址。Invalid parameter: redirect_uri。kcadm.sh — realm、client、LDAP 和策略管理kubectl — 查看 Keycloak 与数据库状态curl — 检查 OIDC discovery 和 token 端点oauth2-proxy — 为无 OIDC 支持的应用加登录代理