simgroep / oauth1-service
OAuth 1的服务端实现库。可以轻松集成到框架中,但也可以在框架外部使用。
Requires (Dev)
- phpunit/phpunit: ^7.0|^8.0
This package is auto-updated.
Last update: 2023-03-14 08:00:32 UTC
README
OAuth 1 服务
此库可以添加到希望使用OAuth验证客户端请求的应用程序中。
安装
只需使用Composer
"require": {
"simgroep/oauth1-service": "1.*"
}
或者克隆仓库并自行包含/autoloading所有内容。但为什么要这样做呢?
使用
有一个runner.php,作为使用示例。以最简单的方式,可以这样使用
use Simgroep\Oauth1Service\Service;
use Simgroep\Oauth1Service\Request;
use Simgroep\Oauth1Service\ConsumerProvider;
use Simgroep\Oauth1Service\TokenProvider;
$os = new Service(new Request, new ConsumerProvider, new TokenProvider);
$valid = $os->isValidRequest();
if ($valid === true) {
print_r($os->getDetails());
} else {
print_r($os->getError());
}
在你的应用程序中,你需要知道两件事:请求是否有效,如果有效,是谁发送的请求?
第一个问题由isValidRequest()回答。它接受一个请求对象作为参数,该对象可以是几个提供类中的一个
- Request:一个使用$_SERVER变量来确定其值的简单类。
- SymfonyRequest:一个接受\Symfony\Component\HttpFoundation\Request(来自Symfony2或Silex)的类,并使用它来确定其值。
- Zf1Request:一个接受\Zend_Controller_Request_Http(来自Zend Framework 1)的类,并使用它来确定其值。
接下来,服务需要两个Token Providers。它们是您需要自行实现的类:它们确定哪些consumerTokens和accessTokens是有效的。以任何您喜欢的方式实现它们;只要您创建的类实现了TokenProviderInterface,您就没事了。它的getSecret()方法应用于获取令牌,在某个地方(在数据库中,通过某些服务,从值数组中,等等)查找它并返回其密钥。
当您不需要在请求中包含accessToken时,您可以省略TokenProvider并让服务知道不需要accessToken
$os->setAccessTokenRequired(false);
您还可以包含TokenProvider并使用此调用:然后令牌将是可选的。(当包含时,将验证令牌,当不包含时,将忽略。)
当请求无效时,您可以通过查看getError()来找出问题所在。
当请求有效时,您可以从getDetails()获取所需的数据。目前,它返回请求中使用的两个令牌。
/examples文件夹中有一个工作示例。
‘Authorization’头
代码依赖于PHP上下文中存在‘Authorization’头。然而,当使用Apache时,这个头并不总是可用。当使用mod_rewrite时,以下规则可以帮助确保变量$_SERVER['HTTP_AUTHORIZATION']被设置
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
当mod_rewrite不可用,或者您的 .htaccess文件过于限制时,您可能可以通过使用apache_request_headers()函数来解决这个问题。