我试图按照文档" https://developers.google.com/accounts/docs/OAuth_ref"将oAuth迁移到oAuth2但仍然出现错误
在" API& AUTH" - "证书"在我们的API开发人员控制台中,我们有1个用于设置Web应用程序的客户端ID以及许多服务帐户客户端ID。
对于设置的每个客户端ID,客户端ID似乎采用格式xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
。
如果我使用网络应用程序的客户端ID的确切ID,那么#p;格式[xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
]然后我收到错误
{
"error" : "invalid_client"
}
如果我使用更通用的客户端ID [xxxxxxxxxxxx.apps.googleusercontent.com ]然后我收到以下错误
{
"error" : "disabled_client",
"error_description" : "The OAuth client was disabled."
}
这是来自Fiddler的帖子请求
POST https://accounts.google.com/o/oauth2/token HTTP/1.1
Authorization: OAuth realm="",oauth_consumer_key="<consumerKey>",oauth_token="<token>",oauth_timestamp="1400680750",oauth_nonce="6637551",oauth_signature_method="HMAC-SHA1",oauth_signature="I%2FCOsR1BrGQHnqTeyhX4GUrKrv8%3D"
Content-Type: application/x-www-form-urlencoded
Host: accounts.google.com
Content-Length: 151
Expect: 100-continue
Connection: Keep-Alive
grant_type=urn:ietf:params:oauth:grant-type:migration:oauth1&client_id=<clientID>.apps.googleusercontent.com&client_secret={<client_secret>}
这是我用于oauth_signature
的基本字符串POST&https://accounts.google.com/o/oauth2/token&client_id=<clientID>.apps.googleusercontent.com&client_secret=<clientSecret>&grant_type=urn:ietf:params:oauth:grant-type:migration:oauth1&oauth_consumer_key=<consumerKey>&oauth_nonce=2648138&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1400681371&oauth_token=<token>
以下是我从Google获得的回复
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Wed, 21 May 2014 13:59:16 GMT
Content-Disposition: attachment; filename="json.txt"; filename*=UTF-8''json.txt
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Alternate-Protocol: 443:quic
Transfer-Encoding: chunked
5b
{
"error" : "disabled_client",
"error_description" : "The OAuth client was disabled."
}
0
有什么建议吗?
答案 0 :(得分:0)
这是相关帖子:https://groups.google.com/forum/#!topic/google-analytics-data-export-api/yveoPwSVzCQ
至于Owen的建议,我很确定该错误与oauth1 vs oauth2客户端类型验证无关,而是与提供的oauth2凭据(客户端ID和客户端密钥)无关。
答案 1 :(得分:0)
事实证明,我发送给谷歌的POST正文不正确。
原来我发了
grant_type=urn:ietf:params:oauth:grant-type:migration:oauth1&client_id=<clientID>.apps.googleusercontent.com&client_secret={<client_secret>}
注意client_secret周围的{}。当我删除这些时,我不再有错误。
现在我可以传递格式为xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
的client_id和不带{}的client_secret,我得到了成功的响应。
我收到的其他错误的原因是xxxxxxxxxxxx.apps.googleusercontent.com格式的客户端ID是旧的client_id,已被删除且在Google Developer控制台上不再可见。