# NameID generation filters This document describes the NameID generation filters in the saml module. ## Common options `NameQualifier` : The NameQualifier attribute for the generated NameID. This can be a string that is used as the value directly. It can also be `true`, in which case we use the IdP entity ID as the NameQualifier. If it is `false`, no NameQualifier will be included. : The default is `false`, which means that we will not include a NameQualifier by default. `SPNameQualifier` : The SPNameQualifier attribute for the generated NameID. This can be a string that is used as the value directly. It can also be `true`, in which case we use the SP entity ID as the SPNameQualifier. If it is `false`, no SPNameQualifier will be included. : The default is `true`, which means that we will use the SP entity ID. ## `saml:AttributeNameID` Uses the value of an attribute to generate a NameID. **Options**: `identifyingAttribute` : The name of the attribute we should use as the unique user ID. `Format` : The `Format` attribute of the generated NameID. ## `saml:PersistentNameID` Generates a persistent NameID with the format `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`. The filter will take the user ID from the attribute described in the `identifyingAttribute` option, and hash it with the `secretsalt` from `config.php`, and the SP and IdP entity ID. The resulting hash is sent as the persistent NameID. **Options**: `identifyingAttribute` : The name of the attribute we should use as the unique user ID. ## `saml:TransientNameID` Generates a transient NameID with the format `urn:oasis:names:tc:SAML:2.0:nameid-format:transient`. No extra options are available for this filter. ## `saml:SQLPersistentNameID` Generates and stores persistent NameIDs in a SQL database. This filter generates and stores a persistent NameID in a SQL database. To use this filter, either specify the `store` option and a database, or configure SimpleSAMLphp to use a SQL datastore. See the `store.type` configuration option in `config.php`. **Options**: `identifyingAttribute` : The name of the attribute we should use as the unique user ID. `allowUnspecified` : Whether a persistent NameID should be created if the SP does not specify any NameID format in the request. The default is `false`. `allowDifferent` : Whether a persistent NameID should be created if there are only other NameID formats specified in the request or the SP's metadata. The default is `false`. `alwaysCreate` : Whether to ignore an explicit `AllowCreate="false"` in the authentication request's NameIDPolicy. The default is `false`, which will only create new NameIDs when the SP specifies `AllowCreate="true"` in the authentication request. `store` : An array of database options passed to `\SimpleSAML\Database`, keys prefixed with `database.`. The default is `[]`, which uses the global SQL datastore. Setting both `allowUnspecified` and `alwaysCreate` to `true` causes `saml:SQLPersistentNameID` to behave like `saml:PersistentNameID` (and other NameID generation filters), at the expense of creating unnecessary entries in the SQL datastore. ## `saml:PersistentNameID2TargetedID` Stores a persistent NameID in the `eduPersonTargetedID`-attribute. This filter is not actually a NameID generation filter. Instead, it takes a persistent NameID and adds it as an attribute in the assertion. This can be used to set the `eduPersonTargetedID`-attribute to the same value as the persistent NameID. **Options**: `attribute` : The name of the attribute we should store the result in. The default is `eduPersonTargetedID`. `nameId` : Whether the generated attribute should be an saml:NameID element. The default is `true`. **Example**: This example makes three NameIDs available: 'authproc' => [ 1 => [ 'class' => 'saml:TransientNameID', ], 2 => [ 'class' => 'saml:PersistentNameID', 'identifyingAttribute' => 'eduPersonPrincipalName', ], 3 => [ 'class' => 'saml:AttributeNameID', 'identifyingAttribute' => 'mail', 'Format' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress', ], ], Storing persistent NameIDs in a SQL database: 'authproc' => [ 1 => [ 'class' => 'saml:TransientNameID', ], 2 => [ 'class' => 'saml:SQLPersistentNameID', 'identifyingAttribute' => 'eduPersonPrincipalName', ], ], Generating Persistent NameID and eduPersonTargetedID. 'authproc' => [ // Generate the persistent NameID. 2 => [ 'class' => 'saml:PersistentNameID', 'identifyingAttribute' => 'eduPersonPrincipalName', ], // Add the persistent to the eduPersonTargetedID attribute 60 => [ 'class' => 'saml:PersistentNameID2TargetedID', 'attribute' => 'eduPersonTargetedID', // The default 'nameId' => true, // The default ], // Use OID attribute names. 90 => [ 'class' => 'core:AttributeMap', 'name2oid', ], ], // The URN attribute NameFormat for OID attributes. 'attributes.NameFormat' => 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri', 'attributeencodings' => [ 'urn:oid:1.3.6.1.4.1.5923.1.1.1.10' => 'raw', /* eduPersonTargetedID with oid NameFormat is a raw XML value */ ],