2015-02-11 87 views
0

我想學習和玩PHP定義爲here的OAuth實現。我沒有使用某種類型的庫,只是純粹的OAuth實現,因爲我正在試圖學習它。然而,就像我試圖做到的那樣,我似乎無法得到匹配的簽名。PHP 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 

任何想法?

回答

0

傻了,我沒有正確閱讀關於回調函數的規範。該工程的實施是:

消費者:

<?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的像我一樣。