cicnavi / simplesamlphp-module-profilepage
SimpleSAMLphp 配置页面模块
Requires
- php: ^8.1
- composer-runtime-api: ^2.0
- ext-pdo: *
- ext-pdo_sqlite: *
- cicnavi/simple-file-cache-php: ^2.0
- doctrine/dbal: ^3
- psr/log: ^1|^2|^3
- simplesamlphp/composer-module-installer: ^1
Requires (Dev)
- fakerphp/faker: ^1.22
- phpunit/phpunit: ^9
- rector/rector: ^0.18.4
- simplesamlphp/simplesamlphp: 2.1.*
- simplesamlphp/simplesamlphp-module-oidc: dev-dev-v5
- simplesamlphp/simplesamlphp-test-framework: ^1
- squizlabs/php_codesniffer: ^3
- vimeo/psalm: ^5
Suggests
- ext-pcntl: Enables job runner to gracefully respond to SIGTERM signal.
- ext-redis: Mandatory if PhpRedis is to be used as a store.
README
simplesamlphp-module-profilepage
SimpleSAMLphp 提供用户“配置页面”和配置页面功能的模块,使用 SimpleSAMLphp 认证处理过滤器功能。
功能
- 启用对认证事件的跟踪,同步(在认证事件期间)或异步(使用 SimpleSAMLphp Cron 功能在单独的进程中)
- 为最终用户提供端点,以检查他们的个人信息、连接的服务提供者的摘要以及认证事件列表
- 自带默认的 DBAL 后端存储,这意味着可以使用以下数据库供应商:MySQL、Oracle、Microsoft SQL Server、PostgreSQL、SQLite。可以通过遵循适当的接口添加其他后端存储。
- 自带设置程序,可设置后端存储。在 Doctrine DBAL 的情况下,这意味着运行 SQL 迁移,在配置的数据库中创建适当的表。
- 每个后端存储连接都可以有主从配置(主用于写入,从用于读取)
- 具有跟踪功能,可以将认证数据持久化到后端存储。目前,模块可以跟踪连接的服务和认证事件。可以通过遵循适当的接口添加其他跟踪器。
- 跟踪可以以两种方式运行
- 同步 - 认证数据在认证事件期间持久化,通常涉及对后端存储的多个查询/插入/更新。
- 异步 - 仅在认证事件期间持久化认证事件作业(对后端存储的单一插入)。使用这种方法,认证事件作业可以在使用 SimpleSAMLphp cron 模块的不同进程中稍后执行
安装
版本兼容性
可以使用 Composer 安装模块
composer require cicnavi/simplesamlphp-module-profilepage
在 config.php 中,搜索 "module.enable" 键,并将 'profilepage' 设置为 true
// ... 'module.enable' => [ 'profilepage' => true, // ... ], // ...
根据使用功能的不同,模块还需要
- ext-redis:如果使用 PhpRedis 作为存储
配置
与 SimpleSAMLphp 模块一样,将模块模板配置复制到 SimpleSAMLphp 配置目录
cp modules/profilepage/config-templates/module_profilepage.php config/
下一步是配置文件 config/module_profilepage.php 中的可用选项。每个选项都有说明,但以下是对整体概念的描述。
模块可以配置为仅显示当前用户数据,不进行任何会计操作。但是,模块可以配置为跟踪以下数据
- 连接的组织 - 通过设置 ModuleConfiguration::OPTION_PROVIDER_FOR_CONNECTED_SERVICES 选项。
- 活动 - 通过设置 ModuleConfiguration::OPTION_PROVIDER_FOR_ACTIVITY 选项。
模块自带一些 Doctrine DBAL 具备的类,可用于这些目的。以下是一个示例配置摘录,它将启用存储连接服务的当前(最新)数据以及认证事件的版本化数据,包括版本化的 Idp 和 SP 元数据以及版本化的用户属性
use SimpleSAML\Module\profilepage\ModuleConfiguration; use SimpleSAML\Module\profilepage\Data\Trackers; use SimpleSAML\Module\profilepage\Data\Providers; // ... ModuleConfiguration::OPTION_PROVIDER_FOR_CONNECTED_SERVICES => Providers\ConnectedServices\DoctrineDbal\CurrentDataProvider::class, ModuleConfiguration::OPTION_PROVIDER_FOR_ACTIVITY => Providers\Activity\DoctrineDbal\VersionedDataProvider::class, // ...
处理类型
部署者可以选择在认证事件期间(同步)或在单独的进程中(例如)执行会计处理
use SimpleSAML\Module\profilepage\ModuleConfiguration; use SimpleSAML\Module\profilepage\ModuleConfiguration\AccountingProcessingType; // ... ModuleConfiguration::OPTION_ACCOUNTING_PROCESSING_TYPE => ModuleConfiguration\AccountingProcessingType::VALUE_ASYNCHRONOUS, // ...
如果处理类型是异步的,那么部署者还必须配置与作业存储相关的选项
- 用于存储和从后端存储检索作业的作业存储类
- 作业运行器的会计 cron 标签
- Cron 模块配置(如果使用的标签与 cron 模块中可用的标签不同,这是默认情况)
对于每个跟踪器或作业存储,必须设置“连接密钥”。连接密钥决定了在跟踪器/作业存储初始化过程中将转发哪些连接参数。
同时查看/编辑所有其他配置选项,并设置适当的值。
运行设置
在您已配置 config/module_profilepage.php 中的所有内容后,请转到 SimpleSAMLphp 管理员 > 配置页面。在那里您将找到一个链接“配置文件页面状态”,这将带您到模块配置概述页面。
如果配置的跟踪器/作业存储需要任何设置,您将看到一个“运行设置”按钮,因此请继续点击它。在默认的 Doctrine DBAL 跟踪器/作业存储的情况下,设置将运行所有用于在数据库中创建必要表的迁移类。
设置完成后,您将看到一个“配置文件”链接,最终用户可以使用它来查看他们的活动。
添加身份验证处理过滤器
开始使用配置的跟踪器类/作业存储跟踪用户数据的最后一步是将 profilepage 模块中的身份验证处理过滤器添加到 SimpleSAMLphp 配置的正确位置。以下是一个在 config/config.php 中为所有 IdP 全局设置的示例
// ... 'authproc.idp' => [ // ... 1000 => 'profilepage:Accounting', ], // ...
作业运行器
如果会计处理是异步的,则必须使用作业运行器来处理在身份验证事件期间创建的作业。
可以使用SimpleSAMLphp Cron 模块执行作业运行器。如 Cron 文档所示,可以使用 HTTP 或 CLI 调用 cron 标签。对于作业运行器来说,使用 CLI 是首选方式,因为作业运行器可以长时间运行,甚至无限期地运行。但是,您也可以使用 HTTP 版本进行测试执行,在这种情况下,作业运行器的最大执行时间将对应于 'max_execution_time' INI 设置。
在任何给定时间点只能运行一个作业运行器实例。通过维护内部状态,作业运行器首先会检查是否有另一个作业运行器正在运行。如果有,则后者将简单地退出,让活动的作业运行器完成其工作。这样,您可以在任何时候调用 cron 标签,因为只有一个作业运行器会始终处于活动状态。
OpendID Connect 集成
此模块也可以用作 OIDC 模块https://github.com/simplesamlphp/simplesamlphp-module-oidc的身份验证处理过滤器,这意味着它还可以跟踪 OIDC 身份验证事件。此外,如果启用连接服务选项,用户将能够在用户界面中撤销特定服务的任何活动访问/刷新令牌。
可以在 OIDC 模块配置中添加会计身份验证处理过滤器,具体请参阅 OIDC 模块文档。
测试
运行 phpcs、psalm 和 phpunit
composer pre-commit