Scoped Attributes Filtering
===========================

This document describes the **FilterScopes** attribute filter in the saml module.

This filter allows a Service Provider to make sure the scopes included in the values
of certain attributes correspond to what the Identity Provider declares in its
metadata. If the IdP includes a list of scopes in the metadata, only those scopes will
be allowed. On the other hand, if no scopes are declared or the scope is not included
in the list of declared scopes, it will be matched against the domain used by the
SAML `SingleSignOnService` endpoint. This means the `example.com` scope will be
allowed in attributes received from an IdP whose `SingleSignOnService` endpoint
is located on the `example.com` top domain or any subdomain of that. Such scope will
be rejected though if the match with the IdP's endpoint does not happen at the top
level, like for example with `example.com.domain.net`.

If you are configuring the metadata of an IdP manually, remember to add an array
to it with the key `scope`, containing the list of scopes expected from that entity.

Configuration
-------------

This filter can be configured in the `config/authsources.php` file, inside the
`authproc` array of the corresponding SAML authentication source in use.

Note that this filter **can only be used with SAML authentication sources**.

Here are the options available for the filter:

`attributes`
:   An array containing a list of attributes that are scoped and therefore should be evaluated.
    Defaults to _eduPersonPrincipalName_ and _eduPersonScopedAffiliation_.

Examples
--------

Basic configuration:

```php
    'authproc' => [
        90 => [
            'class' => 'saml:FilterScopes',
        ],
    ],
```

Specify `mail` and `eduPersonPrincipalName` as scoped attributes:

```php
    'authproc' => [
        90 => [
            'class' => 'saml:FilterScopes',
            'attributes' => [
                'mail',
                'eduPersonPrincipalName',
            ],
        ],
    ],
```

Specify the same attributes in OID format:

```php
    'authproc' => [
        90 => [
            'class' => 'saml:FilterScopes',
            'attributes' => [
                'urn:oid:0.9.2342.19200300.100.1.3',
                'urn:oid:1.3.6.1.4.1.5923.1.1.1.6',
            ],
        ],
    ],
```
