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

Spring Boot对接Keycloak报Invalid parameter: redirect_uri错误

问题根因

Invalid parameter: redirect_uri报错由三类配置错误导致,核心触发点是重定向参数携带了多余的双引号:

  • 从抓取的授权请求地址可见,redirect_uri参数以%22开头——这是英文双引号的URL编码值,意味着实际传给Keycloak的回调地址前后带了双引号,和Keycloak后台配置的合法地址完全无法匹配。
  • Keycloak侧配置的合法重定向URI规则不符合匹配要求,通配符使用不当。
  • 配置文件中Keycloak领域名、服务地址前后不一致,即使绕过重定向校验,后续换令牌、拉用户信息的流程也会失败。
分步修复方案

1. 修正Spring配置中多余的双引号

Spring Boot的application.properties配置项不需要额外给值加双引号,加的双引号会被直接当成参数值的一部分拼接到请求里。找到重定向URI配置项,去掉前后的双引号:

# 错误写法
# spring.security.oauth2.client.registration.keycloak.redirect-uri="{baseUrl}/login/oauth2/code/keycloak"
# 正确写法
spring.security.oauth2.client.registration.keycloak.redirect-uri={baseUrl}/login/oauth2/code/keycloak

改完重启应用后,生成的授权地址里redirect_uri参数就不会再出现开头的%22编码。

2. 修正Keycloak侧的合法重定向URI配置

Keycloak对重定向URI的匹配规则严格:通配符*仅能匹配单个路径段内的内容,无法跨路径匹配。你之前配置的http://localhost:8080/*仅能匹配根路径下的单级地址(比如http://localhost:8080/abc),无法匹配/login/oauth2/code/keycloak这种多级路径,因此会一直匹配失败。
你需要在对应客户端的「Valid redirect URIs」配置项中添加精确的回调地址:

http://localhost:8080/login/oauth2/code/keycloak

生产环境替换为生产域名对应的完整回调路径即可,不要直接在根域名后加*,既存在开放重定向的安全风险,也容易出现匹配异常。

3. 统一所有Keycloak端点的配置

你当前的配置里出现了3个不同的领域名(授权地址里是MycompanyProfiling,provider配置里是MyRealm,jwt issuer配置里是mycompany),还混用了本地8080地址和远程测试环境Keycloak地址,必须全部统一为客户端实际所属的领域和服务地址。
如果本地调试直连测试环境的Keycloak服务,修正后的完整配置参考如下,所有占位符替换为你实际使用的领域名即可:

spring.security.oauth2.client.registration.keycloak.client-id=${KEYCLOAK_CLIENT_ID}
spring.security.oauth2.client.registration.keycloak.client-secret=${KEYCLOAK_CLIENT_SECRET}
spring.security.oauth2.client.registration.keycloak.provider=keycloak
spring.security.oauth2.client.registration.keycloak.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.keycloak.redirect-uri={baseUrl}/login/oauth2/code/keycloak
spring.security.oauth2.client.provider.keycloak.token-uri=https://auth.mycompanytest.com/auth/realms/【实际领域名】/protocol/openid-connect/token
spring.security.oauth2.client.provider.keycloak.authorization-uri=https://auth.mycompanytest.com/auth/realms/【实际领域名】/protocol/openid-connect/auth
spring.security.oauth2.client.provider.keycloak.user-info-uri=https://auth.mycompanytest.com/auth/realms/【实际领域名】/protocol/openid-connect/userinfo
spring.security.oauth2.client.provider.keycloak.user-name-attribute=preferred_username
spring.security.oauth2.resourceserver.jwt.issuer-uri=https://auth.mycompanytest.com/auth/realms/【实际领域名】

如果是本地启动Keycloak做调试,就把所有端点的域名统一替换为http://localhost:8080,不要混用本地和远程地址。

验证方法

改完所有配置重启应用,再次触发登录跳转,检查地址栏的授权请求满足两个条件即可正常跳转:

  • redirect_uri参数值无前后双引号,值为http://localhost:8080/login/oauth2/code/keycloak
  • 授权地址里的realm路径和Keycloak后台配置客户端所属的realm完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:21:20