ekreative / oauth2-symfony-bundle
Symfony OAuth2Bundle
Requires
- php: >=7.2
- lib-openssl: *
- guzzlehttp/guzzle: ^6
- psr/log: ^1
- symfony/framework-bundle: ^3.4|^4.1
- symfony/security: ^3.4|^4.1
- symfony/templating: ^3.4|^4.1
- symfony/validator: ^3.4|^4.1
- symfony/yaml: ^3.4|^4.1
Requires (Dev)
- ext-pdo_sqlite: *
- doctrine/data-fixtures: ^1.0
- doctrine/doctrine-bundle: ^1.9
- doctrine/doctrine-fixtures-bundle: ^3.0
- doctrine/orm: ^2.6
- friendsofphp/php-cs-fixer: ^2.13
- phpstan/phpstan: ^0.10.5
- phpunit/phpunit: ^7
- symfony/browser-kit: ^3.4|^4.1
- symfony/css-selector: ^3.4|^4.1
- symfony/finder: ^3.4|^4.1
- symfony/form: ^3.4|^4.1
- symfony/monolog-bundle: ^3.3
- symfony/phpunit-bridge: *
- symfony/process: ^3.4|^4.1
- symfony/security-bundle: ^3.4|^4.1
- symfony/translation: ^3.4|^4.1
- symfony/twig-bridge: ^3.4|^4.1
- symfony/twig-bundle: ^3.4|^4.1
- symfony/web-server-bundle: ^3.4|^4.1
- twig/extensions: ^1
- dev-master
- dev-develop / 5.x-dev
- 5.2.0
- 5.1.0
- 5.0.0-alpha4
- 5.0.0-alpha1
- 4.x-dev
- 4.2.0
- 4.1.6
- 4.1.5
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.x-dev
- 3.2.0
- 3.1.6
- 3.1.2
- 3.1.1
- 3.1.0
- 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.10
- 2.4.9
- 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.3
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 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.0
- 1.0.1
- 1.0.0
- 1.0.0-rc4
- 1.0.0-rc2
- 1.0.0-rc1
- 1.0.0-alpha3
- 1.0.0-alpha2
- 1.0.0-alpha1
- dev-new-options
- dev-indexes
- dev-trait_repo
This package is auto-updated.
Last update: 2024-08-29 04:54:17 UTC
README
OAuth2Bundle 的主要目标是开发一个符合标准的 RFC6749 OAuth2.0 库
这个库捆绑包提供了一个基于 Symfony 的 Bundle,用于单元测试和演示目的。安装和使用方法如下。
安装
如果您使用 Composer 来管理项目的依赖项,只需将 ekreative/oauth2-symfony-bundle
添加到项目的 composer.json
文件中即可。
以下是一个简单的 composer.json
示例
{
"require": {
"ekreative/oauth2-symfony-bundle": "^6.0"
}
}
参数
此捆绑包包含以下参数
model
: (可选)用您自己的模型类覆盖此参数,默认使用内存中的 AccessToken,用于使用资源防火墙和远程调试端点。driver
: (可选)目前我们支持内存(in_memory
)或 Doctrine ORM(orm
)。默认使用内存,用于使用资源防火墙和远程调试端点。user_provider
: (可选)对于使用grant_type = password
,用您自己的用户提供者覆盖此参数,例如使用 InMemoryUserProvider 或实现 UserProviderInterface 的 Doctrine ORM EntityRepository。
服务
此捆绑包包含以下服务控制器,简化了 OAuth2.0 控制器实现的开销
authbucket_oauth2.authorization_controller
: 授权端点控制器。authbucket_oauth2.token_controller
: 令牌端点控制器。authbucket_oauth2.debug_controller
: 调试端点控制器。
注册
您必须将 AuthBucketOAuth2Bundle
添加到您的 AppKernel.php
。
# app/AppKernel.php
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = [
new AuthBucket\Bundle\OAuth2Bundle\AuthBucketOAuth2Bundle(),
];
return $bundles;
}
}
此外,如果尚未启用,请启用以下捆绑包
$bundles = [
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
];
使用
此库将端点逻辑分开在前端防火墙和后端控制器方面,因此您需要设置两者才能正常工作。
要启用内置控制器及其相应的路由,请将以下内容添加到您的 routing.yml
,所有上述控制器都将根据路由前缀 /api/oauth2
启用
# app/config/routing.yml
authbucketoauth2bundle:
prefix: /api/oauth2
resource: "@AuthBucketOAuth2Bundle/Resources/config/routing.yml"
以下是一些涵盖常见用例的食谱列表。
授权端点
我们不为此端点提供自定义防火墙,您应该自己保护它,例如通过 SecurityBundle 进行身份验证和捕获用户凭据。
# app/config/security.yml
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
providers:
default:
memory:
users:
demousername1: { roles: 'ROLE_USER', password: demopassword1 }
demousername2: { roles: 'ROLE_USER', password: demopassword2 }
demousername3: { roles: 'ROLE_USER', password: demopassword3 }
firewalls:
api_oauth2_authorize:
pattern: ^/api/oauth2/authorize$
http_basic: ~
provider: default
令牌端点
类似于授权端点,我们需要使用我们自定义的防火墙 oauth2_token
保护此端点。
# app/config/security.yml
security:
firewalls:
api_oauth2_token:
pattern: ^/api/oauth2/token$
oauth2_token: ~
调试端点
我们应该使用我们自定义的防火墙 oauth2_resource
保护此端点。
# app/config/security.yml
security:
firewalls:
api_oauth2_debug:
pattern: ^/api/oauth2/debug$
oauth2_resource: ~
资源端点
除了上述调试端点之外,我们不提供其他资源端点控制器实现。您应该考虑实现自己的端点,并使用自定义逻辑,例如获取用户电子邮件地址或个人资料图片。
另一方面,您可以使用我们自定义的防火墙 oauth2_resource
保护您的资源服务器端点。简短版本(默认假设资源服务器与授权服务器捆绑在一起,查询本地模型管理器,没有范围保护)
# app/config/security.yml
security:
firewalls:
api_resource:
pattern: ^/api/resource
oauth2_resource: ~
长版本(假设资源服务器与授权服务器捆绑在一起,查询本地模型管理器,保护范围 demoscope1
)
# app/config/security.yml
security:
firewalls:
api_resource:
pattern: ^/api/resource
oauth2_resource:
resource_type: model
scope: [ demoscope1 ]
如果授权服务器托管在其他地方,您可以通过查询远程授权服务器调试端点来保护您本地的资源端点。
# app/config/security.yml
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
演示
该演示基于 Symfony 和 AuthBucketOAuth2Bundle。阅读演示以获取更多信息。
您可以在本地运行演示。打开控制台并执行以下命令,在 oauth2-symfony-bundle
目录下安装最新版本
$ composer create-project ekreative/oauth2-symfony-bundle ekreative/oauth2-symfony-bundle "^6.0"
然后使用 PHP 内置的 web 服务器运行演示应用程序
$ cd ekreative/oauth2-symfony-bundle
$ ./bin/console server:run
打开您的浏览器,访问 http://127.0.0.1:8000 URL 查看演示应用程序的欢迎页面。
还可以访问 http://127.0.0.1:8000/admin/refresh_database 以初始化捆绑的 SQLite 数据库,用户账户为 admin
:secrete
。
测试
该项目使用 PHPUnit 测试用例进行测试;CI 结果可在 Travis CI 上找到;
要本地运行测试套件,请执行以下命令
$ ./vendor/bin/phpunit
参考
许可证
- 代码在 MIT 许可下发布