2012-11-19 49 views
2

目標:創建一個在Zend Framework Web應用程序中使用的Oauth提供程序。

到目前爲止的過程:將Zend Framework OAuth客戶端(ZF 1.12)與Google Code OAuth類[http://code.google.com/p/oauth/]集成。 ZF客戶端用作www站點中的客戶端,谷歌代碼OAuth用於api站點中的身份驗證包裝器。

尋求幫助,使解決方案正常工作。

該解決方案適用於基本的請求 - 除非在URL中有兩個框架將生成不同的簽名因此破壞認證的GET參數。

示例代碼WWW:

$uri = 'http://oauth.example.com/search?q=something'; 

$Application = array(); 
$Application['oauth_consumer_key'] = 'app'; 
$Application['oauth_consumer_secret'] = 'appsecret'; 

$token = new Zend_Oauth_Token_Access(); 

$config = array(
    'consumerKey' => $Application['oauth_consumer_key'], 
    'consumerSecret' => $Application['oauth_consumer_secret'], 
); 

$client = $token->getHttpClient($config); 
$client->setUri($uri); 
$client->setMethod(Zend_Http_Client::POST); 
$client->setHeaders('Content-Type', 'application/json'); 
$response = $client->request(); 

示例代碼API:

require_once 'OAuth.php'; 

$userRequest = OAuthRequest::from_request(null, null, null); 
$params = $userRequest->get_parameters(); 
$params['user_request'] = $userRequest; 
$request = $params; 

$application = array(
    'token' => 'app', 
    'secret' => 'appsecret', 
); 

// Test OAuth tokens 
$oauthConsumer = new OAuthConsumer($application['token'], $application['secret']); 
$oauthToken = null; 
$signatureMethod = new OAuthSignatureMethod_HMAC_SHA1(); 

$signature = $signatureMethod->build_signature(
    $request['user_request'], 
    $oauthConsumer, 
    $oauthToken 
); 

// If signatures match, return true 
if ($request['oauth_signature'] == $signature) { 
    return true; 
} 

return false; 

看來,Zend_Oauth_Token_Access無視自定義參數(見上面的 'Q =?'),其中的OAuth類考慮所有參數。這意味着,當沒有參數時,兩個系統都會生成相同的簽名。

我似乎無法得到Zend Oauth客戶端來考慮GET參數。

請幫忙?

+0

我應該提到,我第一次嘗試創建驗證應用程序簽名。用戶簽名將在稍後添加。 –

回答

0

ZF1不包含oauth提供程序(oauth 1.0a或2)。我發現了幾個oauth 1.0a提供程序,例如https://github.com/smalyshev/Zend_OAuth_Provider,但我真的想將oauth 2.0支持添加到我的應用程序中。

我最終以https://github.com/quizlet/oauth2-php作爲存儲適配器增加了對Zend_Db_Table的支持。這個項目的一些代碼很混亂,但它是迄今爲止我發現的最好的php oauth2提供程序。

如果您願意,我可以在github回購中分享我的代碼。

+1

謝謝,我很快就會查看這個庫。也許它對Zend Oauth的消費者表現會更好。 –