PHP OAuth 签名不匹配
PHP OAuth Signature Mismatch
我正在尝试学习和尝试 PHP 定义的 OAuth 实现 here。我没有使用某种库,只是纯粹的 OAuth 实现,因为我正在尝试学习它。然而,尽管我正在努力做到这一点,但我似乎无法获得匹配的签名。
在消费者方面我有:
<?php
$consumer_key = '1234';
$consumer_secret = '1234';
$url = 'http://localhost/oauth/provider/request';
try {
$oauth = new OAuth($consumer_key, $consumer_secret);
$signature = $oauth->generateSignature('POST', $url);
$request_token = $oauth->getRequestToken($url);
var_dump($signature);
print_r($request_token);
} catch (OAuthException $E) {
var_dump($E);
}
在供应商方面我有:
<?php
function call(){
return OAUTH_OK;
}
$OAuthProvider = NULL;
try{
$OAuthProvider = new OAuthProvider();
$OAuthProvider->consumerHandler('call');
$OAuthProvider->timestampNonceHandler('call');
$OAuthProvider->tokenHandler('call');
$OAuthProvider->isRequestTokenEndpoint(true);
$OAuthProvider->checkOAuthRequest();
}
catch(Exception $ex){
echo $OAuthProvider->signature;
}
很简单吧?然后我从捕获的异常中得到的错误消息是 "Signatures_do_not_match"。我检查过,确实,签名不匹配。这是输出示例:
Consumer: 8cePFQFqJbL3hY6OjZe6kw63irc=
Provider: 2SPGA0GcC7GLLR1Jte53xz_bWOY
有什么想法吗?
我真傻,我没有正确阅读有关回调函数的规范。有效的实施是:
消费者:
<?php
$consumer_key = '1234';
$consumer_secret = '1234';
$url = 'http://localhost/oauth/provider/request';
try {
$oauth = new OAuth($consumer_key, $consumer_secret);
$signature = $oauth->generateSignature('POST', $url);
$request_token = $oauth->getRequestToken($url);
} catch (Exception $ex) {
var_dump($ex);
}
供应商:
<?php
$OAuthProvider = NULL;
function consumerHandler(){
return OAUTH_OK;
}
function timestampNonceHandler(){
global $OAuthProvider;
/**
* Here is supposed to be a function to check if
* the consumer secret is legit, and is then used to check if the signatures match.
*/
$OAuthProvider->consumer_secret = '1234';
return OAUTH_OK;
}
try{
$OAuthProvider = new OAuthProvider();
$OAuthProvider->consumerHandler('consumerHandler');
$OAuthProvider->timestampNonceHandler('timestampNonceHandler');
$OAuthProvider->isRequestTokenEndpoint(true);
$OAuthProvider->checkOAuthRequest();
}
catch(Exception $ex){
var_dump($ex);
}
希望这对像我一样想了解 OAuth 的人有所帮助。
我正在尝试学习和尝试 PHP 定义的 OAuth 实现 here。我没有使用某种库,只是纯粹的 OAuth 实现,因为我正在尝试学习它。然而,尽管我正在努力做到这一点,但我似乎无法获得匹配的签名。
在消费者方面我有:
<?php
$consumer_key = '1234';
$consumer_secret = '1234';
$url = 'http://localhost/oauth/provider/request';
try {
$oauth = new OAuth($consumer_key, $consumer_secret);
$signature = $oauth->generateSignature('POST', $url);
$request_token = $oauth->getRequestToken($url);
var_dump($signature);
print_r($request_token);
} catch (OAuthException $E) {
var_dump($E);
}
在供应商方面我有:
<?php
function call(){
return OAUTH_OK;
}
$OAuthProvider = NULL;
try{
$OAuthProvider = new OAuthProvider();
$OAuthProvider->consumerHandler('call');
$OAuthProvider->timestampNonceHandler('call');
$OAuthProvider->tokenHandler('call');
$OAuthProvider->isRequestTokenEndpoint(true);
$OAuthProvider->checkOAuthRequest();
}
catch(Exception $ex){
echo $OAuthProvider->signature;
}
很简单吧?然后我从捕获的异常中得到的错误消息是 "Signatures_do_not_match"。我检查过,确实,签名不匹配。这是输出示例:
Consumer: 8cePFQFqJbL3hY6OjZe6kw63irc=
Provider: 2SPGA0GcC7GLLR1Jte53xz_bWOY
有什么想法吗?
我真傻,我没有正确阅读有关回调函数的规范。有效的实施是:
消费者:
<?php
$consumer_key = '1234';
$consumer_secret = '1234';
$url = 'http://localhost/oauth/provider/request';
try {
$oauth = new OAuth($consumer_key, $consumer_secret);
$signature = $oauth->generateSignature('POST', $url);
$request_token = $oauth->getRequestToken($url);
} catch (Exception $ex) {
var_dump($ex);
}
供应商:
<?php
$OAuthProvider = NULL;
function consumerHandler(){
return OAUTH_OK;
}
function timestampNonceHandler(){
global $OAuthProvider;
/**
* Here is supposed to be a function to check if
* the consumer secret is legit, and is then used to check if the signatures match.
*/
$OAuthProvider->consumer_secret = '1234';
return OAUTH_OK;
}
try{
$OAuthProvider = new OAuthProvider();
$OAuthProvider->consumerHandler('consumerHandler');
$OAuthProvider->timestampNonceHandler('timestampNonceHandler');
$OAuthProvider->isRequestTokenEndpoint(true);
$OAuthProvider->checkOAuthRequest();
}
catch(Exception $ex){
var_dump($ex);
}
希望这对像我一样想了解 OAuth 的人有所帮助。