解决无头Linux批处理应用的Google OAuth2重定向URI配置问题
Google OAuth 2.0桌面客户端凭证授权问题解决方案
桌面客户端重定向URI的核心规则
- 桌面(Installed App)类型的客户端凭证无需手动配置重定向URI,Google预定义了两个合法的URI:
http://localhost和urn:ietf:wg:oauth:2.0:oob - 你遇到的
redirect_uri_mismatch错误,是因为手动设置了Web类型的自定义URI,与桌面凭证的预定义规则冲突导致的
正确获取令牌的两种方法
方法1:使用urn:ietf:wg:oauth:2.0:oob(无头服务器首选)
- 在代码中指定该预定义URI:
$client->setRedirectUri('urn:ietf:wg:oauth:2.0:oob'); $authUrl = $client->createAuthUrl(); printf("Open this link in your browser:\n%s\n", $authUrl); printf('Enter verification code: '); $authCode = trim(fgets(STDIN)); - 在任意浏览器打开生成的授权链接,完成授权后Google会直接显示一串授权码,无需跳转至外部站点
- 将授权码输入到服务器命令行,即可完成令牌获取流程
方法2:使用http://localhost(兼容默认行为)
- 省略手动设置重定向URI的代码,或显式设置为
http://localhost:// 客户端会自动使用http://localhost,也可手动指定 // $client->setRedirectUri('http://localhost'); $authUrl = $client->createAuthUrl(); printf("Open this link in your browser:\n%s\n", $authUrl); printf('Enter verification code: '); $authCode = trim(fgets(STDIN)); - 授权完成后,浏览器会跳转至
http://localhost(可能显示“页面无法显示”),但地址栏中会包含code参数,提取该参数值即为授权码 - 将授权码输入服务器命令行即可
关于桌面凭证的重定向URI设置选项
- 桌面客户端凭证不支持手动配置自定义重定向URI,这是Google OAuth的设计规则,因此控制台中不会显示该设置入口
- 无需调整任何配置来显示该选项,该类型凭证仅允许使用预定义的两个URI
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

