hagmann/zf-oauth2-doctrine

Doctrine OAuth2 服务器适配器用于 Apigility


README

Build Status Total Downloads

关于

此项目提供了Doctrine适配器,用于zfcampus/zf-mvc-auth,以及OAuth2的所有方面的实体定义,包括授权代码、访问令牌、刷新令牌、JWT & JTI 和作用域。

实体关系图 使用Skipper创建的实体关系图

安装

此模块的安装使用composer。有关composer文档,请参阅getcomposer.org

$ php composer.phar require api-skeletons/zf-oauth2-doctrine "^1.0"

将此模块添加到应用程序配置中

'modules' => [
   ...
   'ZF\OAuth2\Doctrine',
],

用户实体

此存储库提供了实现OAuth2所需的每个实体,除了用户实体。这样做的原因是用户实体可以与OAuth2 Doctrine存储库解耦,以便在运行时动态链接。这带来了许多好处,例如,可以在不修改OAuth2-orm.module.xml模块的情况下创建ERD。

用户实体必须实现ZF\OAuth2\Doctrine\Entity\UserInterface

此模块单元测试的用户实体是一个良好的起点:https://github.com/api-skeletons/zf-oauth2-doctrine/blob/master/test/asset/module/Doctrine/src/Entity/User.php

模块配置

config/oauth2.doctrine-orm.global.php.dist复制到您的autoload目录,并将其重命名为oauth2.doctrine-orm.global.php。此配置具有多个部分,用于多个适配器。开箱即用,此模块提供了一个default适配器。您需要编辑此文件,至少包含您的用户实体,该实体未提供。

与zfcampus/zf-mvc-auth的配置

默认情况下,此模块包括一个oauth2.doctrineadapter.default适配器。适配器用于从服务创建存储

    'zf-mvc-auth' => array(
        'authentication' => array(
            'adapters' => array(
                'oauth2_doctrine' => array(
                    'adapter' => 'ZF\\MvcAuth\\Authentication\\OAuth2Adapter',
                    'storage' => array(
                        'storage' => 'oauth2.doctrineadapter.default',
                        'route' => '/oauth',
                    ),
                ),
            ),
        ),
    ),

与zfcampus/zf-oauth2的配置

将默认存储适配器添加到zf-oauth默认存储

'zf-oauth2' => array(
    'storage' => 'oauth2.doctrineadapter.default',

在同一个应用程序中使用两个或更多API时,可以使用此库与第二组实体进行第二个OAuth2服务。

使用默认实体

创建数据库的详细信息(包括所提供的实体)超出了本项目的范围。通常,这是通过doctrine/doctrine-orm-module使用php public/index.php orm:schema-tool:create完成的。

默认情况下,此模块使用提供的实体,但您可以使用适配器与自己的实体(并在映射配置部分中映射它们)使用此标志。

'zf-oauth2-doctrine' => [
    'default' => [
        'enable_default_entities' => true,

自定义多对一映射

如果您需要自定义调用mapManyToOne,它从默认实体到用户实体创建动态连接,您可以在['dynamic_mapping']['default_entity']['additional_mapping_data']元素中添加任何参数。每个实体都添加了一个具有不遵守元数据命名策略的用户_id主键的用户实体的示例。

'refresh_token_entity' => [
    'entity' => 'ZF\OAuth2\Doctrine\Entity\RefreshToken',
    'field' => 'refreshToken',
    'additional_mapping_data' => [
        'joinColumns' => [
            [
                'name' => 'user_id',
                'referencedColumnName' => 'user_id',
            ],
        ],
    ],
],

用户实体上的标识字段

默认情况下,此Doctrine适配器通过配置的用户实体上的username字段检索用户。如果您需要使用不同的字段或多个字段,您可以通过'auth_identity_fields'键这样做。例如,ZfcUser允许用户通过用户名和/或电子邮件字段进行身份验证。

匹配ZfcUser auth_identity_fields配置的示例

'zf-oauth2-doctrine' => [
    'default' => [
        'auth_identity_fields' => ['username', 'email'],

验证zf-apigility-doctrine资源

为了使用查询创建筛选器和查询提供者验证OAuth2会话,请实现ZF\OAuth2\Doctrine\OAuth2ServerInterface并使用ZF\OAuth2\Doctrine\OAuth2ServerTrait。然后在筛选器函数中调用$result = $this->validateOAuth2($scope);

扩展

其他模块,它们扩展了此存储库提供的功能。