在尝试对API进行身份验证时,我正在使用PECL OAuth.
示例代码:
<?php
$requestUri = 'http://openapi.lovefilm.com/oauth/request';
$consumerKey = 'MYCONSUMERKEY';
$consumerSecret = 'MYSECRET';
$oauth = new OAuth($consumerKey, $consumerSecret);
$oauth->setAuthType(OAUTH_AUTH_TYPE_AUTHORIZATION);
$oauth->setVersion('1.0');
$oauth->setTimestamp(mktime());
$oauth->enableDebug();
try
{
$req = $oauth->getRequestToken($requestUri, 'oob');
var_dump($req);
}
catch(OAuthException $e)
{
print '<pre>';
var_dump($e);
var_dump($oauth->debugInfo);
}
?>
Run Code Online (Sandbox Code Playgroud)
他们提供的规范(http://developer.lovefilm.com/-registration req)说我应该发一个类似下面的请求:
POST/oauth/request_token HTTP/1.1主机:openapi.lovefilm.com授权:OAuth oauth_callback ="http%3A%2F%2Fyour-service.com%2Fsuccess",oauth_consumer_key ="2blu7svnhwkzw29zg7cwkydn",oauth_nonce ="5f38dbc02a97567965f14d",oauth_signature = "sPSVmqN%2FXu9k0wlZxF0PqPZwYGo%3D",oauth_signature_method ="HMAC-SHA1",oauth_timestamp ="1278499295",oauth_version ="1.0"
但是,当我使用该方法时:
$oauth->setAuthType(OAUTH_AUTH_TYPE_AUTHORIZATION);
Run Code Online (Sandbox Code Playgroud)
生成的请求始终是GET.
有人可以帮忙吗?
谢谢,
本
是的,根据OAuth 规范,临时凭证请求(又名“请求令牌”)和令牌凭证请求(又名“访问令牌”)必须作为 HTTPPOST请求提交,但 PECL OAuth 扩展似乎持续使用GET对于getRequestToken()和getAccessToken()...默认情况下。
有一个$auth_type参数OAuth::__construct()接受以下值之一:
OAUTH_AUTH_TYPE_AUTHORIZATION-- 在Authorization请求的 HTTP 标头中提交 OAuth 参数(GET默认使用请求)。OAUTH_AUTH_TYPE_URI-- 在请求 URI 中提交 OAuth 参数(即请求中的查询参数GET)。OAUTH_AUTH_TYPE_FORM-- 将 OAuth 参数作为 HTTP POST 正文的一部分(在请求中POST)提交。OAUTH_AUTH_TYPE_NONE-- 根本不提交 OAuth 参数,即“NoAuth”请求(也是GET默认情况下)。根据我的经验,fetch()、getRequestToken()和getAccessToken()方法都遵循此设置,也可以OAuth::setAuthType()在对象的实例上进行设置。OAUTH_AUTH_TYPE_FORM在实践中,我在表演舞蹈时将身份验证类型设置为,然后重置为默认值OAUTH_AUTH_TYPE_AUTHORIZATION——以发出资源请求。
| 归档时间: |
|
| 查看次数: |
2562 次 |
| 最近记录: |