ekreative / oauth2-php
Requires
- php: >=5.5.9
- lib-openssl: *
- guzzlehttp/guzzle: ~6.2
- paragonie/random_compat: ^2.0
- 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-develop / 5.x-dev
- 5.1.0
- 5.1.0-alpha
- dev-master / 5.0.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
- dev-load-user
- dev-authorize_grant_type
- dev-allow-all-tokens
- dev-debug-dont-store
- dev-no_throw_listeners
- dev-clear-codes
- dev-random
- dev-allow_multiple_client_id
- dev-trait_in_memory_repo
- dev-roles
This package is auto-updated.
Last update: 2022-02-01 13:12:42 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 来初始化捆绑的SQLite数据库,用户账户为 admin
:secrete
。
文档
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
以查看覆盖率报告。