使用GitHub OAuth API兑换Token时遭遇404 'Not Found'错误
GitHub OAuth授权码兑换Token返回404 Not Found问题排查与解决
问题描述
调用GitHub OAuth接口https://github.com/login/oauth/access_token将授权码兑换为Token时,无论使用cURL还是Octokit v3.1.2的createOAuthUserAuth方法,均返回404错误响应:{"error":"Not Found"}。
已尝试操作
- 直接发起cURL POST请求
- 通过Octokit构造器调用
createOAuthUserAuth方法
排查与解决步骤
1. 核对请求URL的准确性
确认请求URL完全为https://github.com/login/oauth/access_token,无拼写错误(如遗漏login路径、多写斜杠等)。
2. 确保请求方法与Content-Type合规
- 必须使用POST方法,GET请求会直接返回404。
- 请求头
Content-Type必须设置为application/x-www-form-urlencoded,不能使用application/json。如果使用Axios等工具,需用URLSearchParams构造表单数据,避免自动转换为JSON格式。
3. 验证参数的有效性
- client_id/client_secret:确认是从GitHub OAuth应用设置页面复制的完整、正确的值,无多余空格或换行符。
- code:授权码为一次性有效,若此前已使用过该code兑换Token,需重新引导用户授权获取新的code。
- redirect_uri:必须与GitHub OAuth应用设置中填写的授权回调URL完全一致,包括协议(http/https)、域名、路径及大小写。例如设置的是
https://example.com/oauth/callback,则不能仅传https://example.com。
4. Octokit v3.1.2使用规范
Octokit v3的授权方法与旧版不同,需使用auth方法并指定正确参数:
import { Octokit } from "octokit"; const octokit = new Octokit(); try { const authResult = await octokit.auth({ type: "oauth-user", clientId: "你的Client ID", clientSecret: "你的Client Secret", code: "用户授权码", redirectUrl: "你的回调URL", // 注意参数名是redirectUrl而非redirect_uri }); console.log("Token获取成功:", authResult); } catch (error) { console.error("Token获取失败:", error); }
避免使用已废弃的方法,确保参数名与官方文档一致。
5. 排查网络环境
检查是否存在代理、防火墙或VPN拦截请求,尝试在无代理的网络环境下测试,排除网络层面的访问限制。
内容的提问来源于stack exchange,提问作者Saif
相关产品推荐
相关产品推荐

