authbucket/ /
Requires
- php: >=5.5.9
- lib-openssl: *
- guzzlehttp/guzzle: ~6.2
- psr/log: ~1.0
- symfony/http-foundation: ~3.2
- symfony/http-kernel: ~3.2
- symfony/security: ~3.2
- symfony/validator: ~3.2
Requires (Dev)
- ext-pdo_sqlite: *
- doctrine/data-fixtures: ~1.0
- doctrine/dbal: ~2.2
- doctrine/orm: ~2.2
- monolog/monolog: ~1.4
- silex/silex: ~2.1
- symfony/browser-kit: ~3.2
- symfony/config: ~3.2
- symfony/css-selector: ~3.2
- symfony/finder: ~3.2
- symfony/form: ~3.2
- symfony/phpunit-bridge: ~3.2
- symfony/process: ~3.2
- symfony/translation: ~3.2
- symfony/twig-bridge: ~3.2
- twig/twig: ~1.28|~2.0
- dev-master / 5.0.x-dev
- dev-develop / 5.x-dev
- 5.0.0-alpha4
- 5.0.0-alpha3
- 5.0.0-alpha2
- 5.0.0-alpha1
- 4.x-dev
- 4.2.2
- 4.2.1
- 4.2.0
- 4.1.6
- 4.1.5
- 4.1.4
- 4.1.3
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.6
- 4.0.5
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.x-dev
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.6
- 3.1.5
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.0.16
- 3.0.15
- 3.0.14
- 3.0.13
- 3.0.12
- 3.0.11
- 3.0.10
- 3.0.9
- 3.0.8
- 3.0.7
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.4.8
- 2.4.7
- 2.4.6
- 2.4.5
- 2.4.4
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.4
- 2.3.3
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.7
- 2.2.6
- 2.2.5
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.18
- 2.1.17
- 2.1.16
- 2.1.15
- 2.1.14
- 2.1.13
- 2.1.12
- 2.1.11
- 2.1.10
- 2.1.9
- 2.1.8
- 2.1.7
- 2.1.6
- 2.1.5
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.0.1
- 1.0.0
- 1.0.0-rc4
- 1.0.0-rc3
- 1.0.0-rc2
- 1.0.0-rc1
- 1.0.0-beta1
- 1.0.0-alpha5
- 1.0.0-alpha4
- 1.0.0-alpha3
- 1.0.0-alpha2
- 1.0.0-alpha1
This package is auto-updated.
Last update: 2019-12-19 07:38:18 UTC
README
AuthBucket\OAuth2的主要目标是开发一个符合标准的RFC6749 OAuth2.0库;次要目标是开发相应的Symfony2 Bundle和Drupal模块。
此库包含一个基于Silex的AuthBucketOAuth2ServiceProvider,用于单元测试和演示目的。安装和使用方法如下。
安装
如果您使用Composer来管理项目的依赖项,只需将authbucket/oauth2-php
添加到项目的composer.json
文件中即可。
以下是一个composer.json
的简单示例
{
"require": {
"authbucket/oauth2-php": "~5.0"
}
}
参数
捆绑的AuthBucketOAuth2ServiceProvider包含以下参数
authbucket_oauth2.model
:(可选)用您自己的模型类覆盖此参数,默认使用内存中的AccessToken,用于使用带有远程调试端点的资源防火墙。authbucket_oauth2.model_manager.factory
:(可选)用您后端模型管理器覆盖此参数,例如,使用Doctrine ORM EntityRepository,默认使用内存实现,用于使用带有远程调试端点的资源防火墙。authbucket_oauth2.user_provider
:(可选)对于使用grant_type = password
,用您自己的用户提供者覆盖此参数,例如,使用InMemoryUserProvider或实现UserProviderInterface的Doctrine ORM EntityRepository。
服务
捆绑的AuthBucketOAuth2ServiceProvider包含以下服务控制器,它简化了OAuth2.0控制器实现的复杂性
authbucket_oauth2.authorization_controller
:授权端点控制器。authbucket_oauth2.token_controller
:令牌端点控制器。authbucket_oauth2.debug_controller
:调试端点控制器。
注册
如果您使用Silex,请按以下方式注册AuthBucketOAuth2ServiceProvider
$app->register(new AuthBucket\OAuth2\Silex\Provider\AuthBucketOAuth2ServiceProvider());
此外,如果尚未启用以下服务提供者,请启用它们
$app->register(new Silex\Provider\MonologServiceProvider());
$app->register(new Silex\Provider\SecurityServiceProvider());
$app->register(new Silex\Provider\ValidatorServiceProvider());
使用方法
此库将端点逻辑分为前端防火墙和后端控制器视角,因此您需要同时设置两者才能使其正常工作。
要启用内置控制器及其相应的路由,您需要手动挂载它
$app->get('/api/oauth2/authorize', 'authbucket_oauth2.authorization_controller:indexAction')
->bind('api_oauth2_authorize');
$app->post('/api/oauth2/token', 'authbucket_oauth2.token_controller:indexAction')
->bind('api_oauth2_token');
$app->match('/api/oauth2/debug', 'authbucket_oauth2.debug_controller:indexAction')
->bind('api_oauth2_debug');
以下是涵盖一些常见用例的配方列表。
授权端点
我们不为此端点提供自定义防火墙,您应该自行保护它,通过验证和捕获用户凭据来保护它,例如通过 SecurityServiceProvider
$app['security.default_encoder'] = function ($app) {
return new Symfony\Component\Security\Core\Encoder\PlaintextPasswordEncoder();
};
$app['security.user_provider.default'] = $app['security.user_provider.inmemory._proto']([
'demousername1' => ['ROLE_USER', 'demopassword1'],
'demousername2' => ['ROLE_USER', 'demopassword2'],
'demousername3' => ['ROLE_USER', 'demopassword3'],
]);
$app['security.firewalls'] = [
'api_oauth2_authorize' => [
'pattern' => '^/api/oauth2/authorize$',
'http' => true,
'users' => $app['security.user_provider.default'],
],
];
令牌端点
与授权端点类似,我们需要使用自定义防火墙 oauth2_token
来保护此端点
$app['security.firewalls'] = [
'api_oauth2_token' => [
'pattern' => '^/api/oauth2/token$',
'oauth2_token' => true,
],
];
调试端点
我们应该使用自定义防火墙 oauth2_resource
来保护此端点
$app['security.firewalls'] = [
'api_oauth2_debug' => [
'pattern' => '^/api/oauth2/debug$',
'oauth2_resource' => true,
],
];
资源端点
除了上面的调试端点之外,我们不提供其他资源端点控制器实现。您应该考虑实现自己的端点,带有自定义逻辑,例如获取用户电子邮件地址或个人资料图片。
另一方面,您可以使用我们的自定义防火墙 oauth2_resource
来保护您的资源服务器端点。简短版本(默认假设资源服务器与授权服务器捆绑在一起,查询本地模型管理器,不提供范围保护)
$app['security.firewalls'] = [
'api_resource' => [
'pattern' => '^/api/resource',
'oauth2_resource' => true,
],
];
长版本(假设资源服务器与授权服务器捆绑在一起,查询本地模型管理器,使用范围 demoscope1
进行保护)
$app['security.firewalls'] = [
'api_resource' => [
'pattern' => '^/api/resource',
'oauth2_resource' => [
'resource_type' => 'model',
'scope' => ['demoscope1'],
],
],
];
如果授权服务器托管在其他地方,您可以通过查询远程授权服务器调试端点来保护您的本地资源端点
$app['security.firewalls'] = [
'api_resource' => [
'pattern' => '^/api/resource',
'oauth2_resource' => [
'resource_type' => 'debug_endpoint',
'scope' => ['demoscope1'],
'options' => [
'debug_endpoint' => 'http://example.com/api/oauth2/debug',
'cache' => true,
],
],
],
];
演示
此演示基于 Silex 和 AuthBucketOAuth2ServiceProvider。阅读 演示 了解更多信息。
您还可以在本地运行此演示。打开控制台并执行以下命令来安装 oauth2-php
目录中的最新版本
$ composer create-project authbucket/oauth2-php authbucket/oauth2-php "~5.0"
然后使用 PHP 内置的 Web 服务器来运行演示应用程序
$ cd authbucket/oauth2-php
$ ./bin/console server:run
如果您遇到错误 There are no commands defined in the "server" namespace.
,那么您可能正在使用 PHP 5.3。没关系!但是内置的 Web 服务器仅适用于 PHP 5.4.0 或更高版本。如果您有较旧的 PHP 版本或您更喜欢传统的 Web 服务器(如 Apache 或 Nginx),请阅读 配置 Web 服务器 文章。
打开您的浏览器并访问 http://127.0.0.1:8000 URL 以查看演示应用程序的欢迎页面。
还可以访问 http://127.0.0.1:8000/admin/refresh_database 以使用用户帐户 admin
:secrete
初始化捆绑的 SQLite 数据库。
文档
OAuth2 的文档使用 Sami 构建,并公开托管在 GitHub Pages 上。
要本地构建文档,请执行以下命令
$ sami.php update .sami.php
使用浏览器打开 build/sami/index.html
以查看文档。
测试
该项目包含 PHPUnit 测试用例;CI 结果可在 Travis CI 上找到;代码覆盖率报告可在 Coveralls 上找到。
要本地运行测试套件,请执行以下命令
$ phpunit -c phpunit.xml.dist
使用浏览器打开 build/logs/html
以查看覆盖率报告。