目标:创建一个 Oauth Provider 以在 Zend Framework Web 应用程序中使用。
到目前为止的过程:将 Zend Framework OAuth Client (ZF 1.12) 与 Google Code OAuth 类 [http://code.google.com/p/oauth/] 集成。ZF Client 用作 www 站点中的客户端,Google Code 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 参数。
请帮忙?