authbucket/oauth2-symfony-bundle

Symfony OAuth2Bundle

安装次数: 8,033

依赖: 1

建议者: 0

安全: 0

星标: 84

关注者: 15

分支: 26

开放问题: 5

类型:symfony-bundle


README

Build Status Coverage Status Dependency Status Latest Stable Version Total Downloads License

AuthBucket\Bundle\OAuth2Bundle 是一个 Symfony Bundle,它将 AuthBucket\OAuth2 集成到您的 Symfony 项目中,尽可能简单。

安装

如果您使用 Composer 管理项目的依赖项,请将 authbucket/oauth2-symfony-bundle 添加到项目的 composer.json 文件中。

以下是一个简单的 composer.json 示例

{
    "require": {
        "authbucket/oauth2-symfony-bundle": "~5.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 authbucket/oauth2-symfony-bundle authbucket/oauth2-symfony-bundle "~5.0"

然后使用PHP内置的Web服务器运行演示应用程序。

$ cd authbucket/oauth2-symfony-bundle
$ ./bin/console server:run

如果您收到错误在"server"命名空间中未定义任何命令。,那么您可能正在使用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数据库。

文档

OAuth2Bundle的文档是用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以查看覆盖率报告。

参考资料

许可证

  • 代码在MIT许可证下发布
  • 文档在CC BY 4.0许可证下发布