Directus对接Keycloak SSO登录失败问题求助
解决Directus 11.1.0对接Keycloak 25.0.4的SSO登录问题
已确认的前置问题修复(算法不匹配)
- 确保Keycloak领域级别和客户端级别的签名算法均设置为
RS256:- 领域设置:Realm Settings -> Keys -> Provider Settings -> Default Signature Algorithm 选择RS256
- 客户端设置:Clients -> directus -> Settings -> Advanced -> Signing Algorithm 选择RS256
- Directus配置中
OIDC_ALG设为RS256,保持两端完全一致。
核心问题:OpenID Cookie验证失败、用户不存在、Cookie消失的解决方案
1. 修正OIDC基础URL配置
- 确保Directus的
OIDC_ISSUER完全匹配Keycloak领域的OpenID issuer地址,可从Keycloak的Realm Settings -> Endpoints -> OpenID Endpoint Configuration中复制issuer字段,不要添加末尾斜杠。 - 检查Directus的
PUBLIC_URL配置为完整访问地址(如https://mydirectussite),该值直接影响回调地址生成和Cookie的域设置。
2. 调整Cookie跨域/安全设置
- 若Directus与Keycloak为不同域名:
- Keycloak客户端设置:Access Type设为
confidential - Directus配置:
OIDC_COOKIE_SAME_SITE=NoneOIDC_COOKIE_SECURE=true(必须使用HTTPS,否则浏览器会拒绝SameSite=None的Cookie)
- Keycloak客户端设置:Access Type设为
- 若为同域名:
OIDC_COOKIE_SAME_SITE可设为Lax或Strict,OIDC_COOKIE_SECURE根据是否启用HTTPS调整。
3. 处理用户匹配/自动注册问题
- 开启自动注册(推荐):在Directus配置中设置
OIDC_AUTO_REGISTER=true,首次登录时Directus会自动创建对应Keycloak用户的账号。 - 手动同步用户:若关闭自动注册,需在Directus中提前创建与Keycloak用户标识字段完全匹配的账号,可通过
OIDC_IDENTIFIER_KEY指定匹配字段(如email或sub)。 - 确保Keycloak客户端已添加
email、profile等必要的Client Scopes,让Directus能获取到用户标识信息。
4. 调试辅助步骤
- 开启Directus调试日志:设置
LOG_LEVEL=debug,查看OIDC流程的详细日志,定位回调时的令牌解析、用户信息获取、Cookie设置问题。 - 使用Keycloak的Token Inspector工具,检查生成的JWT令牌的算法、声明字段是否符合预期。
内容的提问来源于stack exchange,提问作者bandungeuy
相关产品推荐
相关产品推荐

