Google OAuth 2授权 - 交换令牌代码

时间:2011-04-14 19:34:39

标签: oauth-2.0 google-oauth

我正在尝试使用Google OAuth 2来访问Google API。我使用服务器端方案跟踪this指南。

我获取代码没有问题,服务器重定向到localhost(这是目前重定向URI中唯一允许的服务器)。 为此,我转到https://accounts.google.com/o/oauth2/auth?client_id=whatever.apps.googleusercontent.com&redirect_uri=http://localhost/&scope=https://www.google.com/m8/feeds/&response_type=code页面。

然后,如果Google的服务器使用访问令牌进行响应,我尝试使用curl(如指南中)进行测试。然而,它似乎很难失败。只有我能得到的回复是{"error":"invalid_client"}。我确信我提供了Google要我提供的所有内容 - 代码,客户端ID,客户端密码,重定向URI(localhost)和grant_type=authorization_code

整个curl命令行是:

curl https://accounts.google.com/o/oauth2/token -d "code=<code>&client_id=whatever.apps.googleusercontent.com&client_secret=<won't tell!>&redirect_uri=http://localhost&grant_type=authorization_code"

我错过了什么吗?如何为访问令牌交换代码?

3 个答案:

答案 0 :(得分:3)

您的urlencode您的客户是否保密并重定向网址?这对我行得通。

应该是http%3A%2F%2Flocalhost而不是https://localhost

答案 1 :(得分:3)

我遇到了同样的错误,直到我意识到我正在尝试连接我为iOS创建的客户端ID。所以对我来说,解决方案是在API Console上创建一个新的API密钥 - 密钥对,并将平台设置为“其他”。

现在我收到了其他错误,但这是另一个故事。 ;)

答案 2 :(得分:1)

当您使用错误的客户端密钥时发生。确保您使用的是Google API控制台中的正确客户端密码。我使用的是电子邮件地址,因为API控制台按以下顺序显示信息:

  1. 客户ID
  2. 电子邮件地址
  3. 客户端密钥