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

Keycloak集成GitHub身份提供商时Postman获取令牌报invalid_grant错误

Keycloak + GitHub身份提供商 + Postman授权码模式:"invalid_grant" 错误解决

问题场景

我用Postman通过OAuth 2.0授权码模式,以Keycloak作为身份认证提供商获取API访问令牌。使用Keycloak本地用户凭证登录完全正常,但切换到GitHub身份提供商登录时,在最后调用令牌接口阶段报错:

请求:POST https://{host:port}/realms/{myrealm}/protocol/openid-connect/token
响应体:{"error":"invalid_grant","error_description":"Code not valid"}

复现环境与步骤

  • Keycloak版本:21.1.1
  1. 在目标Realm中创建GitHub身份提供商,填入GitHub OAuth应用的ClientId和ClientSecret,启用令牌存储;设置「首次登录流程」为first broker login,「登录后流程」为None
  2. 在GitHub OAuth应用中,配置Keycloak GitHub身份提供商的重定向URI(首页URL+授权回调URL)
  3. Postman OAuth 2.0配置:
    • Token名称:testing
    • 授权类型:Authorization Code
    • 认证URL:https://{host:port}/realms/{myrealm}/protocol/openid-connect/auth
    • 访问令牌URL:https://{host:port}/realms/{myrealm}/protocol/openid-connect/token
    • ClientId:Keycloak客户端应用的ClientId
    • ClientSecret:Keycloak客户端应用的ClientSecret
    • 客户端认证:作为Basic Auth标头发送

注:已重新生成客户端应用的ClientSecret,排除授权码重复使用的问题,但故障依旧。

解决方向

1. 严格匹配GitHub OAuth应用的重定向URI

Keycloak的GitHub身份提供商回调URL必须和GitHub后台配置的完全一致,包括协议(http/https)、域名、端口、路径。比如Keycloak里的回调URL是https://your-keycloak-domain/realms/{myrealm}/broker/github/endpoint,必须原封不动填到GitHub OAuth应用的「Authorization callback URL」里,不能有多余斜杠或拼写错误。

2. 调整Keycloak身份提供商的「登录后流程」

把「登录后流程」从None改成browser(或Realm默认的登录流程)。第三方身份提供商登录后,Keycloak需要完成自身会话处理,若设置为None会导致授权码生成逻辑异常,无法与后续令牌请求匹配。

3. 确认Postman的授权码传递正确性

触发授权流程后,跳转GitHub授权成功时,检查Postman回调URL中的code参数是否正常,再确认Postman发送令牌请求时的code参数与回调中的完全一致。若存在网络代理、Cookie拦截,可能导致授权码篡改或丢失。

4. 配置Keycloak客户端的有效重定向URI

确保Keycloak客户端应用的「Valid Redirect URIs」包含Postman的默认回调URL:https://oauth.pstmn.io/v1/callback,否则Keycloak生成的授权码会被标记为无效。

5. 关闭GitHub身份提供商的「Force POST Binding」

在GitHub身份提供商的高级设置中,若开启了「Force POST Binding」,可能导致授权码传递方式不符合Postman预期,尝试关闭该选项后重新测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:33:12