请求GitHub Access Token时持续返回bad_verification_code错误求助
问题分析与解决方案
你遇到的核心问题是:前端从Auth0拿到的code是Auth0自身OAuth流程的授权码,不是GitHub OAuth直接返回的授权码,所以用它去请求GitHub的access token必然会触发bad_verification_code错误。
下面是具体的解决思路和实现方案:
正确获取GitHub Access Token的方式
方式一:让Auth0直接返回GitHub令牌
Auth0作为身份代理,会帮你完成和GitHub的OAuth交互,你可以配置Auth0将GitHub的access token返回给你:
- 在Auth0控制台的GitHub连接设置中,确保勾选**"Sync user profile attributes at each login"**。
- 前端请求Auth0 access token时,指定GitHub需要的权限scope(比如
repo):const access_token = await getAccessTokenSilently({ audience: '你的API Audience', // 替换为你的Auth0 API受众 scope: 'openid profile email repo' // 包含GitHub的repo权限 }); - 你可以通过以下两种方式拿到GitHub令牌:
- 调用Auth0管理API的
/api/v2/users/{user_id}/identities接口,返回的身份列表中,GitHub提供者对应的access_token就是你需要的。 - 在Auth0中添加规则,将GitHub令牌写入用户元数据,后续直接从用户信息中读取。
- 调用Auth0管理API的
方式二:后端通过Auth0管理API获取GitHub令牌
后端先获取Auth0管理API的令牌,再调用接口获取用户的GitHub身份令牌:
import requests def get_github_token_from_auth0(user_id, auth0_management_token, auth0_domain): url = f"https://{auth0_domain}/api/v2/users/{user_id}/identities" headers = {"Authorization": f"Bearer {auth0_management_token}"} response = requests.get(url) identities = response.json() for identity in identities: if identity["provider"] == "github": return identity["access_token"] return None
额外配置检查
- 确认Auth0的GitHub连接中,已正确填写GitHub开发者应用的Client ID和Secret,且勾选了
repo权限。 - 确认GitHub开发者应用的回调URL是Auth0提供的地址(格式类似
https://{你的Auth0域名}.auth0.com/login/callback),不是你的前端URL。
内容的提问来源于stack exchange,提问作者AynonT
相关产品推荐
相关产品推荐

