Google API Rest:用于刷新和访问令牌的Exchange授权代码 - 错误404

时间:2017-03-16 08:03:03

标签: oauth google-api google-oauth

我逐步遵循"使用OAuth 2.0进行Web服务器应用程序"帮助页面。 Using OAuth 2.0 for Web Server Applications

我使用http / rest请求。

一切正常,直到第5步:"交换授权代码以刷新和访问令牌"。

我的请求(POST或GET)返回404错误:" Not Found"。 这是我的要求,与指南相同:

https://www.googleapis.com/oauth2/v4/token?
code=4/_XXXXXXXXXXXXXXXXXXX__XXXXXXXXXXXXXX-XXXXXX?&client_id=012345678912-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com&client_secret=XXXXXXXXXXXXXXXXXXX_XXXX&grant_type=authorization_code&redirect_uri=http%3a%2f%2fwww.mydomain.com%3a50000%2fMyPage

以下是指南的相关部分:

  

"要交换访问令牌的授权码,请致电   https://www.googleapis.com/oauth2/v4/token端点并设置   以下参数:

     

字段

     

代码从初始请求返回的授权代码。

     

client_id从API控制台获取的客户端ID。

     

client_secret从API控制台获取的客户端密钥。

     

redirect_uri为您的项目列出的重定向URI之一   API控制台。

     

grant_type如OAuth 2.0规范中所定义,此字段必须   包含authorization_code的值。"

我认为服务网址存在问题。我错了吗?

任何人都可以提供工作网址吗?

2 个答案:

答案 0 :(得分:3)

工作请求将是

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-length: 233
content-type: application/x-www-form-urlencoded
user-agent: google-oauth-playground
code=4%2FKxoYTS-jeq5-d6Lv7YvSz9ZrK0pJ_5lZsMExzNC1M0o&redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&client_id=407408718192.apps.googleusercontent.com&client_secret=************&scope=&grant_type=authorization_code

请注意: -

  1. 这是一个POST,所以code=等是请求正文,而不是URL。
  2. 因为它是帖子,请确保内容类型标题正确无误,即。 "应用程序/ X WWW的窗体-urlencoded"
  3. 如果访问代码包含非字母数字,例如。 " /"在第二个字符中,它需要进行URL编码。这通常由您正在使用的http库完成(例如,jquery,Angular $ http等)。检查电线是否正确完成
  4. 我非常怀疑授权码是否包含问号。如果(并且仅当)它,它需要进行URL编码。

答案 1 :(得分:2)

auth流程中的第二步是HTTP POST。

https://www.googleapis.com/oauth2/v4/token
code={The code from step one}&client_id={ClientId}&client_secret={ClientSecret}&redirect_uri={RedirectURI}&grant_type=authorization_code

我看到的主要区别是你在URL的末尾添加了?,这是不需要的。请记住,您需要完全按照我的方式发布字符串,并将&&#;作为字符串。

这是我的Google 3 Legged OAuth2 Flow教程,它可能有所帮助