ID token and SAML assertion customization

The application attributes service lets you customize the content of an ID token or a SAML assertion by adding custom attributes and their values. A custom attribute is a name-value pair that can reference JSON or STRING user schema attributes or a static value. If the custom attribute has multiple values, then the attribute will be multi-value in the token or assertion, as well. Custom attributes convey additional information about the user to applications.

OpenID Connect application attribute mappings

For OpenID Connect (OIDC) applications, the user claim defined by the custom attribute mapping is returned in the ID token, regardless of the scopes specified in the authorization request. For example, suppose you want to include a user’s accountId in ID tokens associated with the specified OIDC application, a custom application attribute resource can be created to map the user’s account ID to the accountId PingOne user attribute. The request looks like this:

curl -X "POST" "https://api.pingone.com/v1/environments/{environmentId}/applications/{applicationId}/attributes" \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer jwtToken' \
-d '{
	"name": "userAccountID",
	"value": "${user.accountId}",
	"required": true
}'

SAML application attribute mappings

For SAML applications, the user claim defined by the custom attribute mapping is returned in the SAML assertion.

For example, suppose you want to include an externalId in assertions associated with the specified SAML application, a custom application attribute resource can be created to map the SAML externalId attribute to the user’s external ID attribute. The request looks like this:

curl -X "POST" "https://api.pingone.com/v1/environments/{environmentId}/applications/{applicationId}/attributes" \
-H 'Content-type: application/json' \
-H 'Authorization: Bearer jwtToken' \
-d '{
	"name": "externalId",
	"value": "${user.externalId}",
	"required": true
}'

Applications attribute mapping data model

Property Description
createdAt The time the resource was created.
mappingType A string that specifies the mapping type of the attribute. Options are CORE, SCOPE, and CUSTOM. The CORE and SCOPE mapping types are for reserved attributes managed by the API and cannot be removed. Attribute values for these mapping types can be updated. The CUSTOM mapping type is for user-defined attributes. Attributes of this type can be updated and deleted.
name A string that specifies the name of attribute and must be unique within an application. For SAML applications, the samlAssertion.subject name is a reserved case-insensitive name which indicates the mapping to be used for the subject in an assertion. For OpenID Connect applications, the following names are reserved and cannot be used:
  • acr
  • amr
  • at_hash
  • aud
  • auth_time
  • azp
  • client_id
  • exp
  • iat
  • iss
  • jti
  • nbf
  • nonce
  • org
  • scope
  • sid
  • sub
This is a required property.
required A boolean to specify whether a mapping value is required for this attribute. If true, a value must be set and a non-empty value must be available in the SAML assertion or ID token.
updatedAt The time the resource was updated.
value A string that specifies the string constants or expression for mapping the attribute path against a specific source. The expression format is: ${<source>.<attribute_path>}. The only supported source is user (for example, ${user.id}). This is a required property.

OIDC application core mapping attributes

Property Description
sub A string that specifies the core OIDC application mapping attribute. The default user attribute value is ${user.id} and the required property value must be set to true.

SAML application core mapping attributes

Property Description
saml_subject A string that specifies the core SAML mapping attribute. The default user attribute value is ${user.id} and the required property value must be set to true.

Response codes

Code Message
200 Successful operation.
201 Successfully created.
204 Successfully removed. No content.
400 The request could not be completed.
401 You do not have access to this resource.
403 You do not have permissions or are not licensed to make this request.
404 The requested resource was not found.
500 An unexpected error occurred.