【问题标题】:Issue during migration from Google OAuth 1.0 to OAuth 2.0从 Google OAuth 1.0 迁移到 OAuth 2.0 期间的问题
【发布时间】:2014-05-19 17:44:12
【问题描述】:

我必须从 Google OAuth 1.0 迁移到 OAuth 2.0。 我刚刚在 Chrome Rest Client 中写了一个小请求:

POSThttps://accounts.google.com/o/oauth2/token

标头:授权:OAuth realm="", oauth_signature="PU3W5uRL0eAyEi", oauth_nonce="1396865138306881000", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="XXXXX.apps.googleusercontent.com ", oauth_token="YYYYY", oauth_timestamp="1396865138", Content-Type: application/x-www-form-urlencoded

有效负载:grant_type=urn:ietf:params:oauth:grant-type:migration:oauth1&client_id=ZZZZZ.apps.googleusercontent.com&client_secret=SSSSS

为此,我收到一条错误消息: 状态:400 错误请求

"{ 错误:“无效请求” error_description:“无效的授权标头。” }"

问题可能是我尝试从 Google Developers Console 中的一个项目迁移到另一个项目。 这真的是个问题吗?

我转移到另一个项目的原因是因为我无法在原始项目中创建 OAuth 2.0 客户端 ID。我收到以下错误消息:

您无法创建 OAuth 2.0 客户端 ID,因为此项目已包含 Oauth 1.0 客户端 ID。

请提出建议。

谢谢你, E

【问题讨论】:

    标签: google-oauth


    【解决方案1】:

    正如similar post 中所指出的,在构建基本字符串来签署您的迁移请求时,请确保该字符串使用POST 方法 并且它包含所有相关的迁移参数 根据迁移文档。

    根据OAuth1 spec,迁移请求的有效基本字符串应如下所示:

    POST&HTTPS://accounts.google.com/o/oauth2/token&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=urn:IETF:PARAMS:OAuth的:授予型:迁移:您好!OAuth1&oauth_consumer_key = YOUR_CONSUMER_KEY&oauth_nonce = NONCE&oauth_signature_method = HMAC-SHA1&oauth_timestamp = 1396414006&组oauth_token = THE_TOKEN_TO_MIGRATE

    请注意,为了便于阅读,以上是基本字符串的解码版本(查看OAuth1 spec 了解更多示例)。

    希望对您有所帮助,米格尔。

    【讨论】:

    • 嗨米格尔!您能否详细说明“基本字符串”是什么意思?或者,您在上面提到的帖子中的 Java 代码有什么问题会更有帮助。谢谢你。 E
    • 查看有关签署 OAuth1 请求的 Google 文档:developers.google.com/accounts/docs/OAuth_ref#SigningOAuth 您收到的错误意味着您的请求中的“oauth_signature”值是错误的。这样的值是通过签署基本字符串(在文档中提到的)来获得的。因此,错误的基本字符串会导致错误的签名并最终导致无效请求。
    • 嗨 Miguel,我已经根据正确的基本字符串创建了一个签名。但是,错误消息是相同的。我还应该检查什么?谢谢你。 E
    【解决方案2】:

    生成基本字符串时,您需要确保在构造基本字符串之前对每个单独的参数进行 URL 编码。

    根据sign OAuth 1.0 requests 的 oAuth 文档,基本字符串由 3 个组件组成

    • HTTP 请求方法
    • 请求发送到的基本 URL
    • 请求中参数的规范化字符串

    在构造基本字符串时,您需要执行以下操作

    • 确保 HTTP 请求方法为 POST
    • 对基本 URL 进行 URL 编码
    • 确保三个 POST 正文参数 [client_id、client_secret、grant_type] 包含在规范化的请求参数中
    • 确保每个参数都单独进行 URL 编码,然后对完整的规范化请求参数字符串进行 URL 编码。所以实际上,一些参数是双 URL 编码的。在 oauth_token 的 Using OAuth with the Google Data APIs#Signing Requests 中提到了这种双重 URL 编码

    只有在完成所有这些步骤后,我才使迁移请求生效并且我收到了有效的 refresh_token

    下面是一个示例基本字符串

    POST&https%3A%2F%2Faccounts.google.com%2Fo%2Foauth2%2Ftoken&client_id%3Dxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com%26client_secret%3Dxxxxxxxxxxxx%26grant_type%3Durn%253Aietf%253Aparams%253Aoauth%253Agrant-type%253Amigration%253Aoauth1%26oauth_consumer_key%3Dxxxxxxxxx%26oauth_nonce%3D4106001%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1400779530%26oauth_token%3D1%252FkklP1YPy_AULt7j_tttttt_tterwerkj_dfj45dflk
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 2014-08-28
      • 2011-05-12
      相关资源
      最近更新 更多