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

如何在终端中使用Authorization Code Flow获取令牌(无图形浏览器)

解决命令行OAuth授权码流的问题

1. 修复跨平台浏览器打开命令

原程序硬编码的open命令仅适用于macOS,换成跨平台判断逻辑即可:

// 替换原有的open命令执行代码
$browserCommand = '';
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    $browserCommand = 'start';
} elseif (strtoupper(substr(PHP_OS, 0, 3)) === 'DAR') {
    $browserCommand = 'open';
} else {
    $browserCommand = 'xdg-open';
}
exec("$browserCommand " . escapeshellarg($authorizeUrl));

2. 修复授权URL生成不完整的问题

检查程序中拼接授权URL的代码,必须包含授权码流的所有必填参数:

  • response_type=code(授权码流核心标识)
  • client_id(你的应用唯一ID)
  • redirect_uri(需与OAuth平台配置的回调地址完全一致,命令行场景常用http://localhost:8080这类本地地址)
  • scope(申请的权限范围)
  • state(随机字符串,用于防CSRF攻击)

示例正确的URL拼接代码:

$authorizeUrl = 'https://oauth.example.com/authorize?' . http_build_query([
    'response_type' => 'code',
    'client_id' => $yourClientId,
    'redirect_uri' => $yourRedirectUri,
    'scope' => 'read write',
    'state' => bin2hex(random_bytes(16))
]);

如果原程序遗漏了上述任一参数,就会导致URL不完整,无法触发正常授权流程。

3. 极简替代方案(无需修改PHP程序)

如果改代码太麻烦,直接用curl手动完成整个流程:

  1. 手动构造完整的授权URL,用xdg-open打开浏览器完成授权,复制页面返回的授权码
  2. 执行curl命令换取令牌:
curl -X POST https://oauth.example.com/token \
  -d "grant_type=authorization_code" \
  -d "client_id=你的应用ID" \
  -d "client_secret=你的应用密钥" \
  -d "code=拿到的授权码" \
  -d "redirect_uri=配置的回调地址"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:32:38