simplesamlphp/simplesamlphp-module-entitycategories

一个SimpleSAMLphp模块,用于根据实体类别定义属性发布策略。

v2.0.0 2023-02-22 21:43 UTC

This package is auto-updated.

Last update: 2024-09-21 19:27:07 UTC


README

Build Status Coverage Status Scrutinizer Code Quality Type Coverage Psalm Level

实体类别

这是一个SimpleSAMLphp模块,用于根据实体类别创建属性发布策略。它允许根据服务声明的实体类别或类别实时修改服务请求的属性(包括删除和添加属性)。

请注意,此模块不是核心:AttributeLimit 身份验证处理过滤器的替代品。它只会修改服务请求的属性,因此应该与上述core:AttributeLimit过滤器或任何其他提供类似功能的过滤器一起使用。

安装

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

composer.phar require simplesamlphp/simplesamlphp-module-entitycategories:dev-master

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

配置

接下来,您需要启用该模块

config.php 中,查找 module.enable 键,将 entitycategories 设置为 true

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

此模块包含一个身份验证处理过滤器,可以像配置任何其他过滤器一样进行配置。请阅读文档获取有关身份验证处理过滤器的更多信息。

您可以定义自己的实体类别,并为每个类别分配允许的属性。它接受以下布尔配置选项

  • default(默认为false):当设置为true时,表示为每个类别定义的属性应被视为未指定任何所需属性的服务提供者的最小集合。
  • strict(默认为false):当此选项为true且服务提供者没有列出的任何实体类别时,模块将清除提供给该服务提供者的可发布属性列表。如果设置为false,则对于不匹配的服务提供者,可发布属性列表将保持不变。
  • allowRequestedAttributes(默认为false):如果设置为true,则将从SP元数据中添加请求的属性列表到实体类别配置中允许的属性列表。如果设置为false,则在匹配实体类别的服务提供者进行属性发布时忽略元数据中的属性要求(即请求的属性)。

其余的配置将是category => attributes对,其中category是实体类别的标识符,而attributes是包含允许该类别的属性列表的数组。

例如,要允许您域中的所有服务接收eduPersonPrincipalName作为用户的标识符,将它们全部标记为自定义类别,并定义以下过滤器

    50 => [
        'class' => 'entitycategories:EntityCategory',
        'default' => true,
        'urn:something:local_service' => [
            'eduPersonPrincipalName',
        ],
    ],

现在,所有在其元数据中包含以下片段的服务都将保证在请求 eduPersonPrincipalName 或不请求任何属性的情况下都能接收到它

    'EntityAttributes' => [
        'http://macedir.org/entity-category' => [
            'urn:something:local_service'
        ],
    ],

请注意,如果服务请求其他属性,但不包括 eduPersonPrincipalName,则 该属性将不会发送。如果服务请求一些属性但不包括 eduPersonPrincipalName,则 不会发送任何属性。另外,请记住,此过滤器必须与 core:AttributeLimit 或类似过滤器一起使用。因此,在配置 entitycategories:EntityCategory 过滤器后,您还应配置前者

    51 => [
        'class' => 'core:AttributeLimit',
        'default' => true,
    ],

这将默认拒绝所有属性,但允许每个服务的配置覆盖此限制。请注意每个过滤器使用的索引。根据其索引的顺序评估过滤器,因此此模块中定义的过滤器应具有比分配给 core:AttributeLimit 的索引更低的索引。

现在,如果您只想允许某些属性被发送到特定类别的服务,但不希望在服务不请求它们的情况下发送它们,则跳过 default 配置选项或将它设置为 false

    50 => [
        'class' => 'entitycategories:EntityCategory',
        'urn:something:local_service' => [
            'eduPersonPrincipalName',
        ],
    ],

现在,如果属于 urn:something:local_service 类别的服务在其元数据的 attributes 数组中请求 eduPersonPrincipalName 属性,则它将保证得到它。如果它没有请求它(无论它是否请求其他属性),则不会得到它。

以下示例将释放定义在 研究与创新实体类别 中的属性包,但释放的集合也可能通过其他属性得到扩展。对于不匹配的 SP,释放规则由元数据控制。

    50  => [
         'class' => 'entitycategories:EntityCategory',
         'default' => true,
         'strict' => false,
         'allowRequestedAttributes' => true,
         'http://refeds.org/category/research-and-scholarship' => [
             'urn:oid:2.16.840.1.113730.3.1.241', #displayName
             'urn:oid:2.5.4.4', #sn
             'urn:oid:2.5.4.42', #givenName
             'urn:oid:0.9.2342.19200300.100.1.3', #mail
             'urn:oid:1.3.6.1.4.1.5923.1.1.1.6', #eduPersonPrincipalName
             'urn:oid:1.3.6.1.4.1.5923.1.1.1.9', #eduPersonScopedAffiliation
         ],
    ],

以下示例实现了以下逻辑

  1. 元数据中请求的属性被释放给具有 urn:x-myfederation:entitiesGÉANT 数据保护行为准则 实体类别的 SP。
  2. 研究与创新实体类别的属性包被释放给 R&S SP,但如果 SP 在元数据中有额外的属性要求,则属性列表可以扩展。
  3. 不会向任何其他 SP 释放属性。
    50  => [
         'class' => 'entitycategories:EntityCategory',
         'default' => true,
         'strict' => true,
         'allowRequestedAttributes' => true,
         'urn:x-myfederation:entities' => [],
         'http://www.geant.net/uri/dataprotection-code-of-conduct/v1' => [],
         'http://refeds.org/category/research-and-scholarship' => [
             'urn:oid:2.16.840.1.113730.3.1.241', #displayName
             'urn:oid:2.5.4.4', #sn
             'urn:oid:2.5.4.42', #givenName
             'urn:oid:0.9.2342.19200300.100.1.3', #mail
             'urn:oid:1.3.6.1.4.1.5923.1.1.1.6', #eduPersonPrincipalName
             'urn:oid:1.3.6.1.4.1.5923.1.1.1.9', #eduPersonScopedAffiliation
         ],
    ],

您可能希望根据双边协议而不是元数据向 SP 释放某些属性。有一个可用的 修改后的 core:AttributeLimit 模块版本,它使得可以将某些属性添加到一些列出的 SP 中,如下一个示例所示

    51 => [
        'class' => 'niif:AttributeLimit',
        'default' => true,
        'bilateralSPs' => [
            'google.com' => ['mail'],
            'urn:federation:MicrosoftOnline' => ['IDPEmail', 'ImmutableID'],
         ],
    ],