此函数检查 OAuth 请求是否有效且签名正确。
$provider->checkOAuthRequest();
它首先调用 timestampNonceHandler 并期望它返回结果 OAUHT_OK。如果结果不同,则会抛出异常。检查时间戳/随机数组合的代码由您编写。
其次,它调用 consumerHandler 并期望您在 consumerHandler 函数中的代码将 $provider->consumer_secret 设置为正确的值(您应该从您的消费者存储位置获取它,该位置与消费者密钥一起保存)。如果 $provider->consumer_secret 未设置,或未设置为正确的值,则会抛出异常。正确的值意味着它应该与消费者在发送请求之前用于对请求进行签名的消费者密钥相同(提供者)。同样,此函数期望的结果是 OAUTH_OK,或者如果您想抛出异常,则为某些 OAUTH 错误代码。
第三,它调用 tokenHandler,但只有在您请求访问令牌或使用授权访问令牌请求受保护数据时才会调用。为了让提供者调用 tokenHandler,在调用 checkOAuthRequest 函数之前,提供者应该调用该方法,表明这不是请求令牌端点(这是访问令牌端点)
$provider->isRequestTokenEndpoint (false);
$provider->checkOAuthRequest();
同样,在这里,OAuthProvider 期望您在 tokenHandler 中的代码将 $provider->token_secret 设置为正确的值(您应该从您的令牌存储位置获取它),因为在签名过程中,它使用消费者密钥(用于请求令牌)和消费者密钥以及令牌密钥(用于访问令牌和受保护数据的获取)来对请求进行签名。
在这些 3 个处理程序函数被调用并返回良好结果(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;
}
?>