simplesamlphp/simplesamlphp-module-aggregator2

SimpleSAMLphp的SAML 2.0元数据聚合器。

v2.0.0 2023-01-10 17:08 UTC

README

Build Status Coverage Status Type coverage Scrutinizer Code Quality

这是一个SimpleSAMLphp元数据聚合模块。它旨在保留大多数常见的元数据项,并尝试保留未知元素。元数据来源将被解析和重建,因此原始来源与生成的元数据之间可能存在微小差异。具体来说

  • 将从每个签名的元数据来源中删除签名。
  • 所有来源都将包装在EntitiesDescriptor元素中。

注意:此聚合器仅与XML元数据一起工作,并且独立于SimpleSAMLphp的其他部分执行其工作,例如metarefresh模块。

安装

安装SimpleSAMLphp后,安装此模块非常简单。只需在SimpleSAMLphp安装根目录中执行以下命令

vendor/bin/composer require simplesamlphp/simplesamlphp-module-aggregator2:dev-master

其中 dev-master 指示Composer从Git存储库安装 master 分支。如果您想使用模块的稳定版本,请参阅发布

要使用此模块,启用aggregator2模块:在 config.php 中搜索 module.enable 键,将 aggregator2 设置为true

    'module.enable' => [
         'aggregator2' => true,
         …
    ],

配置

此模块通过 config/module_aggregator2.php 配置文件进行配置。一个示例文件位于 modules/aggregator2/config-templates/

    cp modules/aggregator2/config-templates/module_aggregator2.php config/

配置文件包含配置数组中的一个或多个聚合器。配置数组中每个项目的索引给出聚合器的标识符。

聚合器条目配置

聚合器可以使用以下选项进行配置

  • sources:数组描述了我们应该从中下载元数据的来源。

  • cron.tag:可以用于运行周期性更新。只有当您启用了元数据缓存时,它才会很有用。

  • cache.directory:聚合器将缓存下载和生成的元数据的目录路径。此目录必须可由Web服务器写入。

  • cache.generated:生成的元数据将被缓存的秒数。

    注意:如果未设置此选项,则不会缓存生成的元数据。

  • valid.length:生成的元数据应有效的秒数。这用于设置生成的元数据的 validUntil 属性。默认为一周。

    注意:此选项的值必须小于这里的值,否则您将返回过时的元数据。

  • ssl.cafile:此选项启用通过HTTPS获取元数据时的服务器证书验证。它必须指向包含一个或多个有效CA证书的PEM文件的路径。路径可以是绝对路径或相对于 cert 目录的相对路径。

    注意:此选项可以针对每个元数据来源进行覆盖。

  • sign.privatekey:用于签名的私钥,格式为PEM。私钥的路径可以是绝对路径或相对于 cert 目录的相对路径。如果您不想签名生成的元数据,请跳过此选项或将它设置为 NULL

  • sign.privatekey_pass:加密私钥的密码。如果未设置此选项,则假定私钥未加密。

  • sign.certificate:包含对应私钥的公钥的证书,格式为PEM。证书的路径可以是绝对路径,也可以是相对于cert目录的相对路径。

    注意:此证书将包含在生成的元数据中。

  • sign.algorithm:用于签名结果的算法。支持以下算法:

    • http://www.w3.org/2000/09/xmldsig#rsa-sha1

    • http://www.w3.org/2001/04/xmldsig-more#rsa-sha256

    • http://www.w3.org/2001/04/xmldsig-more#rsa-sha384

    • http://www.w3.org/2001/04/xmldsig-more#rsa-sha512

      注意:默认值为http://www.w3.org/2000/09/xmldsig#rsa-sha256。为了向后兼容,可以将其设置为http://www.w3.org/2000/09/xmldsig#rsa-sha1,但是,建议使用另一种算法,因为SHA1被认为已损坏。

  • RegistrationInfo:允许指定关于生成的元数据注册者的信息。请参阅MDRPI扩展文档以获取更多信息。

  • exclude:允许排除一个或多个实体,由它们的实体ID表示。可以是包含单个实体ID的字符串,也可以是包含要排除的所有实体ID的字符串数组。

    注意:此选项不会从缓存的元数据源中排除实体。它仅作为元数据聚合生成的默认配置,因此可以在每个请求中覆盖。

  • filter:一个或多个集合,表示应在生成的元数据中包含的实体类型。根据实体的角色及其支持的协议执行过滤。可以是包含所需实体集的字符串,也可以是包含要过滤的所有不同集合的字符串数组。以下集合可用:

    • saml2:支持SAML 2.0协议的所有实体。

    • saml20-idp:支持SAML 2.0协议的所有身份提供者。

    • saml20-sp:支持SAML 2.0协议的所有服务提供者。

    • saml20-aa:支持SAML 2.0协议的所有属性权威机构。

      注意:此选项不会过滤缓存的元数据源中的实体。它仅作为元数据聚合生成的默认配置,因此可以在每个请求中覆盖。

聚合源配置

  • url:从该URL获取元数据的URL。

  • ssl.cafile:此选项启用通过HTTPS获取元数据时的服务器证书验证。它必须指向包含一个或多个有效CA证书的PEM文件的路径。路径可以是绝对路径或相对于 cert 目录的相对路径。

    注意:此选项覆盖聚合器根配置中具有相同名称的选项。

  • cert:用于检查此元数据文档签名的证书,格式为PEM。证书的路径可以是绝对路径,也可以是相对于cert目录的相对路径。

    注意:这不能是CA证书。不支持与CA证书(PKI)的验证。

检索聚合元数据

您将在SimpleSAMLphp的Web界面的联合选项卡中找到aggregator2模块的链接。在那里,您将能够查看您已配置的所有元数据聚合列表,并以不同的格式查看或下载它们。

通常,元数据聚合可以从以下位置下载:

http://<YOUR HOST>/simplesaml/modules.php/aggregator2/get?id=<aggregator-id>

其中,聚合器ID是您用作聚合器配置数组索引的标识符。此外,您可以使用以下参数自定义生成的元数据聚合:

  • exclude:允许排除一个或多个实体,由它们的实体ID表示。如果需要指定多个实体,请使用以逗号分隔的实体ID列表。

  • filter:允许通过指定实体类型或它们支持的协议的集合来过滤。如果您需要指定多个集合,请使用逗号分隔的列表。查看具有相同名称的配置选项,以获取所有支持的集合列表。

异步元数据更新

默认情况下,aggregator2模块会在接收到请求时更新元数据。出于性能考虑,建议异步运行更新。通过这样做,聚合元数据将在后台生成。

要启用此功能,您必须使用cache.directory选项配置一个缓存目录。此目录必须可由Web服务器写入。然后,您可以将生成的元数据的缓存设置启用,通过将cache.generated选项设置为元数据应缓存的秒数。

现在您将有一个配置,该配置既缓存下载的元数据也缓存生成的元数据。但是,当用户访问聚合器端点时,它仍会更新元数据。为了在后台更新生成的元数据,您必须添加一个cron.tag选项。此选项必须引用在module_cron.php中配置的cron标签条目。一旦完成此操作,您的聚合元数据将在cron条目每次执行时更新。