从Google OAuth 1.0迁移到OAuth 2.0期间出现问题 - oAuth客户端已被禁用

时间:2014-05-21 14:32:45

标签: oauth google-oauth

我试图按照文档" 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

有什么建议吗?

2 个答案:

答案 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控制台上不再可见。