让我为 pinoyyid 的出色答案添加一条替代路线(这对我不起作用 - 弹出重定向错误)。
除了使用 OAuthPlayground,您还可以直接使用 HTTP REST API。因此,与 pinoyyid 的答案不同的是,我们将在本地做事。按照 pinoyyid 答案中的步骤 1-3 进行操作。我将引用它们:
- 创建 Google 帐户(例如 my.drive.app@gmail.com) - 如果您使用现有帐户,则跳过此步骤。
- 使用 API 控制台注册 mydriveapp(https://console.developers.google.com/apis/credentials/oauthclient?project=mydriveapp或只是https://console.developers.google.com/apis/)
- 创建一组新的凭据(NB OAuth 客户端 ID 不是服务帐户密钥,然后从选项中选择“Web 应用程序”)
现在,而不是游乐场,将以下内容添加到您的凭据中:
授权的 JavaScript 源: http://localhost (我不知道这是否需要,但只是这样做。)
授权的重定向 URI: http://localhost:8080
截图(德语):

确保通过下面的蓝色按钮实际保存您的更改!
现在您可能想要使用 GUI 来构建您的 HTTP 请求。我使用了Insomnia,但您可以使用Postman或普通 cURL。我推荐 Insomnia,因为它可以让您轻松通过同意屏幕。
使用以下参数构建一个新的GET请求:
URL: https://accounts.google.com/o/oauth2/v2/auth
Query Param: redirect_uri=http://localhost:8080
Query Param: prompt=consent
Query Param: response_type=code
Query Param: client_id=<your client id from OAuth credentials>
Query Param: scope=<your chosen scopes, e.g. https://www.googleapis.com/auth/drive.file>
Query Param: access_type=offline
如果您选择的工具不能自动处理 URL 编码,请确保自己正确处理。
在您触发您的请求之前,请设置一个网络服务器来监听http://localhost:8080
. 如果你有 node 和 npm 安装运行npm i express
,然后创建一个index.js
:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('ok');
console.log(req)
});
app.listen(8080, function () {
console.log('Listening on port 8080!');
});
并通过node index.js
. 我建议要么不记录整个req
对象,要么运行node index.js | less
完整的输出将是巨大的。
其他语言也有非常简单的解决方案。例如,在 8080 上使用 PHP 的内置 Web 服务器php -S localhost:8080
。
现在触发您的请求(在 Insomnia 中),系统会提示您登录:

使用您的电子邮件和密码登录并确认同意屏幕(应包含您选择的范围)。
返回您的终端并检查输出。如果您记录了整个内容,请向下滚动(例如 pgdown in less),直到看到带有code=4/...
.
复制该代码;这是您想要交换访问和刷新令牌的授权代码。不要复制太多 - 如果有一个&符号&
,请不要复制它或之后的任何内容。&
分隔查询参数。我们只想要code
.
现在设置一个指向表单 URL 编码https://www.googleapis.com/oauth2/v4/token
的HTTP POST 请求。在 Insomnia 中,您只需单击它即可 - 在其他工具中,您可能必须自己将标题设置为.Content-Type: application/x-www-form-urlencoded
添加以下参数:
code=<the authorization code from the last step>
client_id=<your client ID again>
client_secret=<your client secret from the OAuth credentials>
redirect_uri=http://localhost:8080
grant_type=authorization_code
再次确保编码正确。
触发您的请求并检查服务器的输出。在响应中,您应该看到一个 JSON 对象:
{
"access_token": "xxxx",
"expires_in": 3600,
"refresh_token": "1/xxxx",
"scope": "https://www.googleapis.com/auth/drive.file",
"token_type": "Bearer"
}
您可以access_token
立即使用,但有效期仅为一小时。请注意刷新令牌。这是您始终可以* 交换新访问令牌的一种。
*
如果用户更改密码、撤销访问权限、6 个月不活动等,您将不得不重复该过程。
快乐OAuthing!