此函数检查OAuth请求是否有效并正确签名。
$provider->checkOAuthRequest();
它首先调用timestampNonceHandler并期望其返回OAUHT_OK。如果结果不同,则抛出异常。检查时间戳/nonce组合的代码由您编写。
其次,它调用consumerHandler,并期望您在consumerHandler函数中的代码将$provider->consumer_secret设置为正确的值(您应该从其与消费者密钥一起保存的消费者存储位置获取它)。如果$provider->consumer_secret未设置,或未设置为正确的值,则会抛出异常。正确的值意味着它应该与消费者在发送到此处(提供者)之前用于签署请求的消费者密钥相同。同样,此函数的预期结果是OAUTH_OK,或者如果您想抛出异常,则为某些OAUTH错误代码。
第三,它调用tokenHandler,但仅当您请求访问令牌或使用授权的访问令牌请求受保护的数据时才调用。为了让提供者调用tokenHandler,在调用checkOAuthRequest函数之前,提供者应调用该方法,表明这不是请求令牌端点(这是访问令牌端点)
$provider->isRequestTokenEndpoint (false);
$provider->checkOAuthRequest();
同样在这里,OAuthProvider期望您在tokenHandler中的代码将$provider->token_secret设置为正确的值(您应该从您的令牌存储位置获取它),因为在签名过程中它使用消费者密钥(对于请求令牌)和消费者密钥以及令牌密钥(对于访问令牌和受保护数据的获取)来签名请求。
在调用这三个处理程序函数并返回良好结果(OAUTH_OK)并设置所需字段$provider->consumer_secret和$provider->token_secret的值后,checkOAuthRequest函数将对请求进行签名。如果出现问题,它将抛出异常,否则您的代码将继续处理请求。
-您可以创建请求令牌(如果这是对请求令牌的第一次请求)
-您可以创建访问令牌(如果这是对访问令牌的请求)
-您可以将受保护的数据返回给消费者(如果这是获取受保护数据的请求)
这就是我的代码中函数的样子,但是请记住,我只是实现了它,我可能错过或忘记了一些东西,但总的来说,我认为这个想法应该很清楚。
$this->dbModel是用于处理数据库以及保存/检索令牌和消费者数据的对象。
<?php
public function timestampNonceHandler ( $provider )
{
return $this->dbModel->checkTimestampNonce ( $provider->consumer_key,
$provider->token,
$provider->timestamp,
$provider->nonce );
}
public function consumerHandler ( $provider )
{
$consumer = $this->dbModel->getConsumerSecrets ($provider->consumer_key);
if($consumer['consumer_key'] != $provider->consumer_key)
{
return OAUTH_CONSUMER_KEY_UNKNOWN;
}
if( (int)$consumer['disabled'] != 0 )
{
return OAUTH_CONSUMER_KEY_REFUSED;
}
$provider->consumer_id = $consumer['consumer_id']; $provider->consumer_secret = $consumer['consumer_secret']; return OAUTH_OK;
}
public function tokenHandler ( $provider )
{
$token = $this->dbModel->getToken( $provider->token );
if( time() > $token['expire'] )
{
return OAUTH_TOKEN_EXPIRED;
}
if($token['consumer_id'] != $provider->consumer_id)
{
return OAUTH_TOKEN_REJECTED;
}
if( (int)$token['authorized'] == 0 )
{
return OAUTH_TOKEN_REJECTED;
}
if($token['token_type'] != 'access')
{
if($token['verifier'] != $provider->verifier)
return OAUTH_VERIFIER_INVALID;
}
$provider->token_id = $token['token_id']; $provider->token_secret = $token['token_secret']; return OAUTH_OK;
}
?>