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

Golang使用golang.org/x/oauth2对接Github OAuth2未获取refresh token问题

问题原因
  • GitHub OAuth2 服务默认颁发长期无过期时间的 Access Token,该模式下不会返回 Refresh Token,也没有过期时间字段,所以你拿到的 RefreshToken 和 Expiry 自然为空。
  • 若你已经开启了令牌过期功能,但发起授权跳转时未携带prompt=consent参数,GitHub 也不会返回 Refresh Token,golang.org/x/oauth2库解析不到返回的过期时间标识就会保留 Expiry 为空值。
解决方案

1. 开启OAuth应用令牌过期配置

登录GitHub账号进入对应OAuth应用的设置页,找到「Expire user authorization tokens」选项,勾选后保存配置。开启后新颁发的Access Token默认有效期为8小时,同时会配套返回Refresh Token。

2. 构造授权链接时追加强制授权参数

在调用AuthCodeURL生成用户跳转的授权链接时,通过oauth2.SetAuthURLParam方法添加prompt=consent参数,示例代码如下:

// 生成授权跳转链接的代码调整示例
authURL := GithubOauthConfig.AuthCodeURL(RandomState, oauth2.SetAuthURLParam("prompt", "consent"))

该参数会强制GitHub每次都弹出用户授权确认页,只有用户主动确认授权后才会返回Refresh Token字段。

3. 重新走授权流程验证

调整完成后,先把账号中该应用的历史授权记录完全移除,重新发起授权流程,此时调用Exchange方法拿到的oauth2.Token就会正常填充RefreshToken和Expiry字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:06:05