Keycloak 22.0.5中OpenID Connect的redirect_uri验证不一致问题
Keycloak 22.0.5 PKCE模式下token请求redirect_uri无效问题解决
问题根源
Keycloak对授权请求和token请求的redirect_uri校验逻辑存在差异:授权阶段允许通配符匹配,但token阶段要求精确匹配客户端配置中的有效重定向URI。你配置的是http://localhost:8000/*,但token请求用的是精确的http://localhost:8000,两者不匹配导致报错。
解决步骤
1. 更新客户端重定向URI配置
在Keycloak客户端的访问设置中,添加精确匹配的http://localhost:8000到有效重定向URI列表,或者直接将原有配置改为http://localhost:8000(如果不需要路径通配)。
2. 修正授权请求的冗余参数
你的授权请求中错误添加了grant_type=pkce参数——PKCE是authorization_code流程的扩展,授权请求不需要该参数,正确请求格式如下:
GET localhost:2137/realms/SpringKeycloak/protocol/openid-connect/auth? client_id=login-user &redirect_uri=http%3A%2F%2Flocalhost%3A8000 &state=af08ea5a-9d4d-4850-9491-483809f2c991 &response_type=code &scope=openid &code_challenge=Jqd4T8zNX438YOgW-99eFp_7fbMkDb1Tyu0TtU41x3A &code_challenge_method=S256
3. 确保token请求的正确性
grant_type必须保持为authorization_code(PKCE不是独立的授权类型,只是该流程的扩展)- 确认
code_verifier与授权请求的code_challenge严格对应(S256算法下,verifier的SHA-256哈希经过base64url编码后需等于challenge) - 请求的
Content-Type必须设置为application/x-www-form-urlencoded
额外检查项
- 客户端的
Access Type需设置为public(PKCE专为无客户端密钥的公共客户端设计) - 确保token请求的
redirect_uri与授权请求中的完全一致(包括编码、末尾斜杠等细节)
内容的提问来源于stack exchange,提问作者Moder New
相关产品推荐
相关产品推荐

