fei/connect-package

Objective PHP 应用程序的连接客户端包集成


README

本包为Objective PHP v2应用程序提供连接客户端集成。

使用Connect包,您的Objective PHP应用程序可以集成SAML标准协议并充当服务提供商。

安装

Connect包需要PHP 7.0或更高版本,且需要安装openssl扩展才能正常运行。

您需要使用composer require fei/connect-package将其集成到您的Objective PHP项目中。

集成

为了正常工作,Connect包必须在您的应用程序中注册。

<?php

namespace Fei\Service\Project;

use ObjectivePHP\Application\AbstractHttpApplication;
use Fei\Service\Connect\Package\ConnectPackage;

/**
 * Class Application
 *
 * @package Showcase
 */
class Application extends AbstractHttpApplication
{
    public function init()
    {        
        $this->registerPackage(new ConnectPackage());
        
        // Register other stuff
    }
}

通过注册Connect包,您的应用程序将获得

  • Connect-Client、Connect-Config和Connect-User服务及其关联的注入器
  • 如果您的应用程序是HTTP应用程序(扩展ObjectivePHP\Application\AbstractHttpApplication),Connect包的中间件

连接服务

Connect包公开了3个服务(有关服务名称用途的配置部分请参阅)

  • connect.config:这是注入到Connect-Client构造函数中的配置实例
  • connect.client:用于获取Connect-User实例的Connect-Client实例
  • connect.user:代表您的应用程序用户的当前身份的Connect-User实例

注入器

注入器是Objective-PHP服务工厂的一个出色功能。通过注入器,服务工厂将服务注入到正确的依赖项中。以下是一个示例

<?php

namespace Fei\Service\Project\Services;

use Fei\Service\Connect\Package\UserAwareInterface;
use Fei\Service\Connect\Package\UserAwareTrait;

/**
 * Class Application
 *
 * @package Showcase
 */
class MyService implements UserAwareInterface
{
    use UserAwareTrait;
    
    public function myBusinessMethod()
    {
        // Doing my business  
        
        $this->getUser(); // Returns Connect-User service instance
        
        // Doing other business stuff
    }
}

通过实现Fei\Service\Connect\Package\UserAwareInterface,服务工厂将Connect-User服务的当前实例注入到您的服务中,通过注入器。

Connect包注册了2个注入器

  • Fei\Service\Connect\Package\Injector\UserAwareInjector:将Connect-User服务注入到实现Fei\Service\Connect\Package\UserAwareInterface接口的服务中。
  • Fei\Service\Connect\Package\Injector\ConnectAwareInjector:将Connect-Client服务注入到实现Fei\Service\Connect\Package\ConnectAwareInterface接口的服务中。

通常,您会偏好注入Connect-User服务。这样,您将减少服务层与Connect-Client的耦合。

禁用连接行为和模拟用户

您可以禁用中间件并因此禁用连接行为。这在开发环境中很常见(例如,Connect-IDP未安装)。

如果您禁用中间件,Connect包将用您可以配置的模拟Connect-User实例替换Connect-User实例。

这样,您的应用程序将像连接到Connect-IDP一样工作。

配置

Connect包如下所示

{
    "connect": {
        "enable": true,
        "name": "SP name",
        "entity_id": "http://sp.com",
        "idp_entity_id": "http://idp.com",
        "client_service_id": "connect.client",
        "config_service_id": "connect.config",
        "user_service_id": "connect.user",
        "mock_user" : {
            "username": "Gauthier",
            "current_role": "SUPER_ADMIN"
        },
        "default_target_path": "/",
        "logout_target_path": "/",
        "profile_association_path": "/connect/profile",
        "profile_association_service_id": "connect.profile-association",
        "saml_metadata_basedir": "app/config/Saml/metadata",
        "sp_metadata_file": "sp.xml",
        "idp_metadata_file": "idp.xml",
        "idp_metadata_file_target": "/idp.xml",
        "private_key_file_path": "/some/path/key/key.pem",
        "admin_path_info": "/connect/admin",
        "allowed_roles": ["USER", "ADMIN"],
        "filters": ["service.filter.first", "service.filter.second"]
    }
}

关于过滤器的最后一点

是的,是的,从这个点开始,您将准备好使用Connect包并享受Objective-PHP。

所以过滤器...

过滤器是一种激活或禁用连接中间件的方式。它具有与enable选项相同的效果,但具有执行上下文(例如,禁用API调用时的连接)。

过滤器是一个实现了ObjectivePHP\Filter\FilterInterface的类,当它由包运行时,它将决定是否注册连接中间件。

在使用过滤器之前,您必须将您的过滤器描述注册到服务工厂中。