Spring Boot集成Keycloak登录报401 Authorization header not found错误排查
问题根因定位
报错的核心原因是Keycloak配置中的bearer-only参数设置不符合Web应用的接入场景:
- 当
bearer-only设为true时,当前服务会被识别为纯后端接口服务,仅接受携带合法Bearer令牌的请求,不会主动触发重定向到Keycloak登录页的逻辑。请求无Authorization头时就会直接返回401,和你日志中的NOT_ATTEMPTED: bearer only、Authorization header not found报错完全匹配。
解决方案
你开发的是需要走浏览器登录流程的Web应用,直接修改yml配置里的bearer-only值为false即可:
keycloak: realm: "myRealm" auth-server-url: "http://localhost:18080/auth" ssl-required: "external" resource: "myResource" credentials: secret: "xxxxxxxxxxxxxxxxxxxxxxxxx" use-resource-role-mappings: "true" bearer-only: "false" # 此处从true改为false
补充验证说明
- 配置修改后重启应用,再次访问受保护的页面时,Keycloak适配器会自动触发重定向到Keycloak登录页,登录成功后会跳转回应用原访问地址,不需要你手动实现获取令牌、携带令牌调用接口的逻辑,适配器已经封装了完整的授权码流程处理。
- 可同步检查Keycloak控制台对应客户端的
Access Type设置为confidential,和你当前配置携带密钥的模式匹配。
内容的提问来源于stack exchange,提问作者Teosa Landers
相关产品推荐
相关产品推荐

