【发布时间】:2011-12-30 02:41:03
【问题描述】:
尝试使用 Google OAuthGetRequestToken 获取 请求令牌 数小时,但始终返回“signature_invalid”。
对于测试,我使用oAuth Playground 成功请求令牌。结果如下:
签名基本字符串
GET&https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthGetRequestToken&oauth_callback%3Dhttp%253A%252F%252Fgooglecodesamples.com%252Foauth_playground%252Findex.php%26oauth_consumer_key%3Dwww.embeddedanalytics.com%26oauth_nonce%3D56aa884162ed21815a0406725c79cf79%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D1321417095%26oauth_version%3D1.0%26scope%3Dhttps%253A%252F%252Fwww.google.com%252Fanalytics%252Ffeeds%252F
请求/响应
GET /accounts/OAuthGetRequestToken?scope=https%3A%2F%2Fwww.google.com%2Fanalytics%2Ffeeds%2F HTTP/1.1
Host: www.google.com
Accept: */*
Authorization: OAuth oauth_version="1.0", oauth_nonce="56aa884162ed21815a0406725c79cf79", oauth_timestamp="1321417095", oauth_consumer_key="www.embeddedanalytics.com", oauth_callback="http%3A%2F%2Fgooglecodesamples.com%2Foauth_playground%2Findex.php", oauth_signature_method="RSA-SHA1", oauth_signature="qRtorIaSFaQdOXW1u6eMQlY9LT2j7ThG5kgkcD6rDcW4MIvzluslFgYRNTuRvnaruraNpItjojtgsrK9deYRKoHBGOlU27SsWy6jECxKczcSECl3cVAcjk7dvbywFMDkgi1ZhTZ5Q%2BFoD60HoVQUYnGUbOO0jPXI48LfkiA5ZN4%3D"
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Date: Wed, 16 Nov 2011 04:18:15 GMT
Expires: Wed, 16 Nov 2011 04:18:15 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Content-Length: 118
Server: GSE
oauth_token=4%2FmO86qZzixayI2NoUc-hewC--D53R&oauth_token_secret=r0PReF9D83w1d6uP0nyQQm9c&oauth_callback_confirmed=true
我正在使用 Fiddler 来跟踪我的通话。它返回签名基本字符串:
GET&https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthGetRequestToken&oauth_callback%3Dhttp%253A%252F%252Fgooglecodesamples.com%252Foauth_playground%252Findex.php%26oauth_consumer_key%3Dwww.embeddedanalytics.com%26oauth_nonce%3Dl9Jydzjyzt2fJfM3ltY5yrxxYy2uh1U7%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D1321417107%26oauth_version%3D1.0%26scope%3Dhttps%253A%252F%252Fwww.google.com%252Fanalytics%252Ffeeds%252F
除了 oauth_timestamp 和 oauth_nonce(应该不同)之外,基本字符串几乎相同。
有人知道我做错了什么吗?
2011 年 11 月 20 日更新 考虑到我的 RSA-SHA 签名可能有问题,我已经尝试了 HMAC-SHA。它给出了相同的结果。我认为包含 Fiddler 结果可能是有益的(我添加了回车以使其格式更好)。
GET https://www.google.com/accounts/OAuthGetRequestToken?
scope=https%3A%2F%2Fwww.google.com%2Fanalytics%2Ffeeds%2F HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: OAuth oauth_version="1.0",
oauth_nonce="7C4C900EAACC9C7B62E399A91B81D8DC",
oauth_timestamp="1321845418",
oauth_consumer_key="www.embeddedanalytics.com",
oauth_signature_method="HMAC-SHA1",
oauth_signature="ows%2BbFTNSR8jVZo53rGBB8%2BfwFM%3D"
Host: www.google.com
Accept: */*
Accept-Encoding: identity
回应
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=UTF-8
Date: Mon, 21 Nov 2011 03:16:57 GMT
Expires: Mon, 21 Nov 2011 03:16:57 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Content-Length: 358
Server: GSE
signature_invalid
base_string:GET&https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthGetRequestToken
&oauth_consumer_key%3Dwww.embeddedanalytics.com
%26oauth_nonce%3D7C4C900EAACC9C7B62E399A91B81D8DC
%26oauth_signature_method%3DHMAC-SHA1
%26oauth_timestamp%3D1321845418
%26oauth_version%3D1.0
%26scope%3Dhttps%253A%252F%252Fwww.google.com%252Fanalytics%252Ffeeds%252F
2011 年 11 月 24 日更新 - 我想根据 @Meysam 和 @Bob Aman 的回答添加更多信息。首先,我的域已在 Google 正确注册。我使用 AuthSub 已经有一段时间了,将 Target URL path prefix 设置为 http://www.embeddedanalytics.com/authsubsuccess.html。现在,当我转到“管理域”部分时,它指出我的 oAuth 消费者密钥是 www.embeddedanalytics.com。现在也许这可能是一个问题。在Registration for Web-Based Applications 文件中指出:
如果您使用的是 OAuth 界面,则此 URL(“目标 URL 路径前缀”)必须与 oauth_consumer_key 参数的值匹配
就我而言,我的目标 URL 与我的 oauth_consumer_key 不同。这会是个问题吗?我在操场上使用 www.embeddedanalytics.com 作为 consumer_key,它可以工作。我不想弄乱目标 URL,因为它目前正在与我的 AuthSub 授权一起使用。
【问题讨论】:
-
@M Schenkel:虽然我为 oauth 使用了不同的库,但在使用 Google 时遇到了同样的问题。能够获得验证码,但是在尝试获取访问令牌时,它给出了同样的错误,但仍然不知道出了什么问题.
-
我强烈建议您改用 OAuth 2。更容易使用。不涉及签名。
-
游乐场是否支持 OAuth 2?看来不是;当您向它发出请求时,标头是 oauth_version="1.0"。如果没有,将来是否有计划支持它?
标签: oauth google-api digital-signature access-token