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

Keycloak授权码流程中Invalid Grant错误求助

解决Keycloak授权码模式下invalid_code错误

常见原因及修复步骤

1. 客户端认证方式不匹配

错误日志明确标注client_auth_method="client-secret",说明Keycloak要求客户端提供密钥,但你的请求未传入client_secret参数:

  • 若客户端为Confidential类型:
    • 在Keycloak控制台找到对应客户端,复制Client Secret
    • 在curl请求中追加-d 'client_secret=你的客户端密钥'
  • 若客户端为Public类型:
    • 进入Keycloak客户端设置,确认Access Type设为public
    • 检查Valid Redirect URIs配置正确,此时请求无需传入client_secret

2. Redirect URI严格匹配

Keycloak对重定向URI的校验是完全精确匹配,必须保证请求中的redirect_uri与客户端配置里的Valid Redirect URIs完全一致:

  • 排查是否存在大小写差异、末尾斜杠缺失/多余、或额外参数的问题
  • 示例:若配置的是https://www.google.com,请求里用https://www.google.com/会直接匹配失败

3. 确认授权码时效性

授权码默认有效期仅60秒,需确保获取授权码后立即调用token接口,避免超时失效。

4. 核对Realm与客户端的关联关系

你提到客户端ID与Realm名称相同,需确认:

  • 客户端确实创建在my_app Realm下,而非默认的master Realm
  • 请求的token接口路径/realms/my_app/protocol/openid-connect/token完全正确

修正后的请求示例

若客户端为Confidential类型,添加client_secret后的curl命令:

curl -X POST \
  http://localhost:8080/realms/my_app/protocol/openid-connect/token \
  -H 'content-type: application/x-www-form-urlencoded' \
  -d 'grant_type=authorization_code' \
  -d 'client_id=my_app' \
  -d 'redirect_uri=https://www.google.com/' \
  -d 'code=你获取的授权码' \
  -d 'client_secret=你的客户端密钥'

若客户端为Public类型,确保配置正确后使用原请求(无需client_secret),但必须保证redirect_uri与配置完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:07:54