首页 > 解决方案 > Google OAuth2.0 是否支持 grant_type=password?

问题描述

这是我的命令

curl https://accounts.google.com/o/oauth2/token -d "client_id=111111111111%2D8pc07m34pj5eb5nid0u5n9fgs5vrndpm%2Eapps%2Egoogleusercontent%2Ecom&grant_type=password&username=123456%2E123%40gmail%2Ecom&password=123456&scope=https%3A%2F%2Fwww%2Egoogleapis%2Ecom%2Fauth%2Fcalendar&redirect_url=https%3A%2F%2Fwww%2Egoogle%2Ecom"

但我不断得到:

{
  "error" : "invalid_request"
}

我正在尝试编写一个可以读取命令行中指定的任何 gmail 帐户的日历数据的应用程序:

./foo gmailID@gmail.com password

但我不知道我的 foo 如何使用 gmailID 和密码来获取没有用户交互的令牌(即,打开 url 并单击“接受”),所以我可以使用令牌调用 Google Calendar API 来读取日历数据该gmail帐户的。我是新来的。我至少在正确的轨道上吗?

标签: oauth-2.0google-apigoogle-oauthgoogle-calendar-api

解决方案


未经用户许可,您不能发送邮件和密码,grant_type也不能代表用户提出请求,他们需要得到他们的同意。

如果您想代表用户发出请求(当他们不在您的应用程序中时),您需要实现离线访问。我建议你看看这个参考

一旦用户接受使用您的应用程序的权限,Google 将生成一个您需要存储在数据库中的 refreshToken。使用该 refreshToken,您将能够生成新的访问令牌,并且您将使用这些令牌来执行您的请求。


推荐阅读