首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pecl/oauth与pecl/oauthprovider签名不匹配

pecl/oauth与pecl/oauthprovider签名不匹配
EN

Stack Overflow用户
提问于 2012-04-11 00:01:28
回答 2查看 454关注 0票数 0

我使用pecl oauth包编写了一个简单的oauth提供者和使用者。一切都很顺利,直到我尝试获取一个访问令牌,这时我得到了一个签名不匹配错误。oauth使用者尝试使用oauth->getauthorizedtoken通过以下方式联系提供者:

代码语言:javascript
复制
$res = mysql_query("SELECT * FROM request_tokens WHERE oauth_token = '".mysql_real_escape_string($token)."'");
$requestToken = mysql_fetch_assoc($res);

$oauth->setToken($token, $requestToken['oauth_token_secret']);
$authToken = $oauth->getAccessToken("http://dev.myserver.com/~testbranch/?m=oauthMod&act=authorize", NULL, $verifier);

当此操作失败时,它会输出带有如下签名的调试信息:

代码语言:javascript
复制
3qBMmue4Q+j8Dm4/9VSTl6y0TR8=

在提供者端,消费者和令牌被验证,然后由于签名不匹配而失败,即使它计算的签名是:

代码语言:javascript
复制
3qBMmue4Q%2Bj8Dm4%2F9VSTl6y0TR8%3D

这显然是完全相同的签名的url转义版本。这是一个bug,还是我明目张胆地漏掉了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-21 23:44:41

正如我在问题中提到的,这两个签名是相同的,除了一个是url编码的。这不是规范的一部分,也没有文档记录,但它就在那里。我的最终解决方案同时检查签名匹配和url编码签名匹配。这并不理想,因为存在错误匹配的机会,但如果不从头开始重写整个算法,我几乎无能为力。

票数 0
EN

Stack Overflow用户

发布于 2014-11-22 05:37:27

$ signature是来自消费者请求的oauth_signature的解码值,而不是OAuthProvider计算的签名。因此,打印OAuthProvider收到的Authorization头将包含oauth_signature="3qBMmue4Q%2Bj8Dm4%2F9VSTl6y0TR8%3D",而OAuthProvider::$signature将显示3qBMmue4Q+j8Dm4/9VSTl6y0TR8=

如果您的工作是从Authorization (或等效的)中获取签名,并将其与编码的OAuthProvider::$ oauth_signature进行比较...这些将总是匹配的!

我遇到的OAuthProvider抛出签名不匹配异常的问题是因为没有向OAuthProvider::checkOAuthRequest()提供端点URI。文档指出这是可选的,但需要包括它,因为它是签名基本字符串的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10092234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档