我使用pecl oauth包编写了一个简单的oauth提供程序和消费者。一切都很顺利,直到我试图获得访问令牌时,我得到一个签名不匹配错误。 OAuth用户端尝试使用到与供应商联系的oauth-> getauthorizedtoken以下列方式:pecl/oauth vs pecl/oauthprovider签名不匹配
$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);
如果失败则吐出了调试信息中包含的签名:
3qBMmue4Q+j8Dm4/9VSTl6y0TR8=
在提供者端,消费者和令牌验证,然后失败,即使它计算的签名是签名不匹配:
3qBMmue4Q%2Bj8Dm4%2F9VSTl6y0TR8%3D
这显然是一个网址转义版本完全相同的签名。这是一个错误还是我公然错过了一些东西?
你如何计算签名?为什么使用urlencoded? – hakre 2012-04-10 16:04:26
据我所知,pecl的oauth和oauth提供者都会生成签名。在提供者端生成的那个遵循http://oauth.net/core/1.0a/#encoding_parameters规范。似乎誓言包不编码参数? – Nielsvh 2012-04-10 17:02:49
第一个没有编码,第二个是。但是:'rawurlencode( '3qBMmue4Q + j8Dm4/9VSTl6y0TR8 =')=== '3qBMmue4Q%2Bj8Dm4%2F9VSTl6y0TR8%3D';' – hakre 2012-04-10 17:06:07