ekreative/oauth2-symfony-bundle

Symfony OAuth2Bundle

安装次数: 8,586

依赖者: 0

建议者: 0

安全性: 0

星标: 2

关注者: 5

分支: 26

类型:symfony-bundle

5.2.0 2018-10-31 14:26 UTC

README

Build Status Latest Stable Version License

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

演示

该演示基于 SymfonyAuthBucketOAuth2Bundle。阅读演示以获取更多信息。

您可以在本地运行演示。打开控制台并执行以下命令,在 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 数据库,用户账户为 adminsecrete

测试

该项目使用 PHPUnit 测试用例进行测试;CI 结果可在 Travis CI 上找到;

要本地运行测试套件,请执行以下命令

$ ./vendor/bin/phpunit

参考

许可证

  • 代码在 MIT 许可下发布