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

Keycloak授权码格式存疑,调用Token端点返回Code not valid错误求助

问题描述

本地运行采用Standard Authorization Code Flow的Keycloak服务器,调用授权端点的URL为:

http://localhost:8080/realms/lapse/protocol/openid-connect/auth?client_id=lapse-app&redirect_uri=http://localhost:8080&response_type=code

认证成功后,被重定向至:

http://localhost:8282?session_state=6c93f810-d934-4e20-adcc-b21748d3b26a&iss=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Flapse&code=6cc168fc-e894-4f8b-a401-ec3267dc69b1.6c93f810-d934-4e20-adcc-b21748d3b26a.eec3a0c8-ff4a-437b-ad17-5f6228422b0f

获取到三段式格式的授权码(与常见示例不同),Cookie已添加JWT,推测前期流程正常。但使用以下参数调用Token端点时,返回Code not valid错误:

{
    grant_type : authorization_code,
    code : 6cc168fc-e894-4f8b-a401-ec3267dc69b1.6c93f810-d934-4e20-adcc-b21748d3b26a.eec3a0c8-ff4a-437b-ad17-5f6228422b0f,
    redirect_uri : http://localhost:8282,
    client_id : lapse-app,
    client_secret : ZLpHFtQzoYdf21rIDwblZlZZ0bFntaD7
}

疑问:是否需要对授权码重新格式化后再发送至Token端点?

问题分析与解决

1. 授权码无需格式化

Keycloak生成的三段式授权码是正常格式,不需要做任何修改,直接原样使用即可。

2. 核心错误原因:redirect_uri不匹配

OAuth2协议要求授权请求的redirect_uri必须与Token请求的redirect_uri完全一致。

  • 你调用授权端点时用的是http://localhost:8080
  • 调用Token端点时用的是http://localhost:8282
    这两个URL端口不同,属于不匹配,直接导致授权码验证失败。

3. 次要可能原因:请求格式错误

Keycloak的Token端点默认只接受application/x-www-form-urlencoded格式的参数,你当前用的是JSON格式,这也会引发验证问题。

修正步骤

  • 统一redirect_uri:将Token请求中的redirect_uri改为http://localhost:8080,与授权请求保持一致
  • 改用表单编码发送请求:用application/x-www-form-urlencoded格式传递参数,示例curl命令:
curl -X POST http://localhost:8080/realms/lapse/protocol/openid-connect/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=authorization_code" \
  -d "code=6cc168fc-e894-4f8b-a401-ec3267dc69b1.6c93f810-d934-4e20-adcc-b21748d3b26a.eec3a0c8-ff4a-437b-ad17-5f6228422b0f" \
  -d "redirect_uri=http://localhost:8080" \
  -d "client_id=lapse-app" \
  -d "client_secret=ZLpHFtQzoYdf21rIDwblZlZZ0bFntaD7"
  • 检查授权码有效期:Keycloak授权码默认有效期60秒,获取后请立即调用Token端点
  • 验证客户端配置:在Keycloak后台确认:
    • 客户端lapse-app已开启Authorization Code Flow
    • http://localhost:8080已添加到客户端的「Valid Redirect URIs」列表中

内容的提问来源于stack exchange,提问作者Benedikt J Schlegel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:17:25