You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Keycloak HTTPS环境登录后/sso/login返回403问题

问题根因

核心问题是HTTPS在AWS ALB层终止后,Spring Boot应用及Keycloak适配器无法识别原始请求的HTTPS协议,触发了Keycloak的安全校验规则:

  1. keycloak.ssl-required配置校验失败:你配置的external规则要求外部访问必须走HTTPS,但应用实际拿到的ALB转发请求是HTTP协议,Keycloak适配器直接判定请求不合法返回403。
  2. 回调地址校验不匹配:Keycloak客户端配置的合法回调地址是HTTPS协议,但适配器生成/校验的回调地址基于应用本地的HTTP协议生成,和Keycloak侧配置不一致,直接校验失败。

你本地将keycloak.ssl-required改为all后出现相同403,也是因为本地应用走HTTP协议,不符合all规则要求所有请求必须走HTTPS的校验规则,和部署环境的根因完全一致。

解决方案

1. 配置Spring Boot识别反向代理的原始请求信息

开启对ALB传递的X-Forwarded-*请求头的识别,让应用可以拿到原始请求的协议、域名、端口信息,在配置文件中添加如下配置:

# Spring Boot 2.2+版本使用该配置开启转发头识别
server.forward-headers-strategy=native
# Spring Boot 2.2之前的版本使用该配置
# server.use-forward-headers=true
# 配置信任的ALB内网网段,避免伪造头攻击,按实际ALB所在网段修改正则即可
server.tomcat.remoteip.internal-proxies=10\.0\.\d{1,3}\.\d{1,3}

AWS ALB默认会自动传递X-Forwarded-Proto、X-Forwarded-Host、X-Forwarded-Port头,无需额外配置ALB规则。配置完成后应用拿到的请求协议会自动识别为https,不再按本地HTTP处理。

2. 确认Keycloak相关配置

  • 保持keycloak.ssl-required=external即可,不需要改为all,该配置允许本地localhost请求走HTTP,线上外部请求强制走HTTPS,符合你的使用场景。
  • 若配置完第一步仍有问题,可以显式指定Keycloak回调地址前缀:
    keycloak.redirect-uri=https://backo.example.com/*
    

3. 校验Keycloak客户端配置

登录Keycloak控制台进入backo领域的backo-core客户端配置,确认Valid Redirect URIs项已经添加了https://backo.example.com/*,没有协议写错、漏加通配符的问题。

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:24:00