我一直在尝试学习 OAuth (1.0),并通过尝试访问我在 Google 上的联系人来测试我的代码。这很容易,因为我不必建立朋友/消费者关系(Google 只允许匿名/匿名消费者令牌),并且因为 Google 有 OAuth Playground 来帮助我。
所以我将我的代码设置如下
- 请求令牌: https ://www.google.com/accounts/OAuthGetRequestToken?scope=https%3A%2F%2Fwww.google.com%2Fm8%2Ffeeds%2F
- 授权请求令牌: https ://www.google.com/accounts/OAuthAuthorizeToken
- 访问令牌: https ://www.google.com/accounts/OAuthGetAccessToken
一切似乎进展顺利——我得到了请求令牌,授权良好,并且能够获得访问令牌。然后我尝试向https://www.google.com/m8/feeds/contacts/default/full/提出请求
唯一的问题是,我不断收到此错误:“401:AuthSub 令牌的范围错误”
我对此感到困惑,因为当我在 OAuth Playground ( http://googlecodesamples.com/oauth_playground/index.php ) 中使用相同的消费者信息发出相同的请求时,一切都会正常进行。
最终,我发现了以下问题:HTTP/1.1 401 Token invalid - AuthSub token has wrong scope
最佳答案让我找到了我的解决方案——我正在使用的一个 JAR 中有一段代码,它总是将端口设置为 https 的 443 或 http 的 80。当我单步执行我的代码并将端口更改为 -1 时,我的请求运行良好,并且我能够获得我想要的信息。
不幸的是,我无法更改 JAR 文件中的代码,所以我将不得不在最后解决问题。在回答这个问题时,“乔纳森”说:
另一种解决方法是将 :443 包含在令牌范围中;它只需要匹配
我尝试将我的请求令牌查询字符串更改为?scope=https%3A%2F%2Fwww.google.com **%3A443** %2Fm8%2Ffeeds%2F
Google 只是拒绝给我一个请求令牌 - 它给了我一个 400 错误说Invalid scope: https://www.google.com:443/m8/feeds/
。将 https 更改为 http 没有任何作用。我将如何按照乔纳森(几乎一年没上网)的建议去做?