谷歌OAuth 2授权 - 交换代码获取令牌

7
我正在尝试实现Google OAuth 2以获取对Google API的访问权限。我遵循这个指南,使用服务器端场景。
我在获取代码方面没有问题,服务器重定向到本地主机(目前是唯一允许的重定向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页面。
然后,我尝试使用curl(如指南中所述)进行测试,看看Google的服务器是否会响应访问令牌。但是,它似乎非常失败。我能得到的唯一响应是{"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个回答

3

你是否对客户端密钥和重定向URL进行了urlencode?这对我有用。

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


3

我曾经遇到相同的错误,后来发现我在尝试连接时使用了一个iOS客户端ID。所以对于我来说,解决方案是在API控制台中创建一个新的API密钥-秘钥对,将平台设置为“其他”。

现在我遇到了其他错误,但这是另外一回事。;)


很棒。也许在使用iOS设置时,更高版本的GData代码可以工作。 - PKCLsoft
这正是我在模拟器上测试时遇到问题的解决方案... 这个答案缩短了我的搜索时间,谢谢Lvsti! - RvdV79

1
当您使用错误的客户端密钥时会发生这种情况。请确保您正在使用来自Google API控制台的正确客户端密钥。由于API控制台按以下顺序显示信息,因此我曾经使用电子邮件地址:
  1. 客户端ID
  2. 电子邮件地址
  3. 客户端密钥

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接