WORKERS AHEAD!
You are viewing the development documentation for the Apereo CAS server. The functionality presented here is not officially released yet. This is a work in progress and will be continually updated as development moves forward. You are most encouraged to test the changes presented.
Claims - WS Federation Protocol
Attribute filtering and release policies are defined per relying party. See this guide for more info.
The following standard claims are supported by CAS for release:
Claim | Description |
---|---|
EMAIL_ADDRESS_2005 |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress |
EMAIL_ADDRESS |
http://schemas.xmlsoap.org/claims/EmailAddress |
GIVEN_NAME |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname |
NAME |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name |
USER_PRINCIPAL_NAME_2005 |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn |
USER_PRINCIPAL_NAME |
http://schemas.xmlsoap.org/claims/UPN |
COMMON_NAME |
http://schemas.xmlsoap.org/claims/CommonName |
GROUP |
http://schemas.xmlsoap.org/claims/Group |
MS_ROLE |
http://schemas.microsoft.com/ws/2008/06/identity/claims/role |
ROLE |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role |
SURNAME |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname |
PRIVATE_ID |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier |
NAME_IDENTIFIER |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
AUTHENTICATION_METHOD |
http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod |
DENY_ONLY_GROUP_SID |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/denyonlysid |
DENY_ONLY_PRIMARY_SID |
http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarysid |
DENY_ONLY_PRIMARY_GROUP_SID |
http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarygroupsid |
GROUP_SID |
http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid |
PRIMARY_GROUP_SID |
http://schemas.microsoft.com/ws/2008/06/identity/claims/primarygroupsid |
PRIMARY_SID |
http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid |
WINDOWS_ACCOUNT_NAME |
http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname |
PUID |
http://schemas.xmlsoap.org/claims/PUID |
The attribute release policy assigned to relying parties and services is able to link a given standard claim and map it to an attribute that should be already available. The configuration looks as such:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"@class" : "org.apereo.cas.ws.idp.services.WSFederationRegisteredService",
"serviceId" : "https://wsfed.example.org/.+",
"realm" : "urn:wsfed:example:org:sampleapplication",
"name" : "WSFED",
"id" : 1,
"attributeReleasePolicy" : {
"@class" : "org.apereo.cas.ws.idp.services.WSFederationClaimsReleasePolicy",
"allowedAttributes" : {
"@class" : "java.util.TreeMap",
"GIVEN_NAME" : "givenName"
}
}
}
The above snippet allows CAS to release the
claim http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname
whose value
is identified by the value of the givenName
attribute that is already retrieved for the authenticated principal.
Attributes authorized and allowed for release by this policy may not necessarily be available as resolved principal attributes and can be resolved on the fly dynamically using the attribute definition store.
Inline Groovy Claims
Claims may produce their values from an inline Groovy
script. As an example, the claim EMAIL_ADDRESS_2005
may be constructed
as a dynamic attribute whose value is determined by the inline Groovy script attribute and the cn
attribute:
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"@class" : "org.apereo.cas.services.CasRegisteredService",
"serviceId" : "sample",
"name" : "sample",
"id" : 300,
"attributeReleasePolicy" : {
"@class" : "org.apereo.cas.ws.idp.services.WSFederationClaimsReleasePolicy",
"allowedAttributes" : {
"@class" : "java.util.TreeMap",
"EMAIL_ADDRESS_2005" : "groovy { return attributes['cn'].get(0) + '@example.org' }"
}
}
}
To prepare CAS to support and integrate with Apache Groovy, please review this guide.
File-based Groovy Claims
Claims may produce their values from an external Groovy
script. As an example, the claim EMAIL_ADDRESS_2005
may be constructed
as a dynamic attribute whose value is determined by the Groovy script attribute and the cn
attribute:
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"@class" : "org.apereo.cas.services.CasRegisteredService",
"serviceId" : "sample",
"name" : "sample",
"id" : 300,
"attributeReleasePolicy" : {
"@class" : "org.apereo.cas.ws.idp.services.WSFederationClaimsReleasePolicy",
"allowedAttributes" : {
"@class" : "java.util.TreeMap",
"EMAIL_ADDRESS_2005" : "file:/path/to/script.groovy"
}
}
}
The configuration of this component qualifies to use the Spring Expression Language syntax. The script itself may have the following outline:
1
2
3
4
5
6
def run(final Object... args) {
def (attributes,logger) = args
logger.info "Attributes currently resolved: ${attributes}"
return [attributes["cn"][0] + "@example.org"]
}
To prepare CAS to support and integrate with Apache Groovy, please review this guide.
Custom Claims
You may also decide to release non-standard claims as part of a custom
namespace. For example, the below snippet allows CAS to release the
claim https://github.com/apereo/cas/employeeNumber
whose value is
identified by the value of the personSecurityId
attribute that is
already retrieved for the authenticated principal.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"@class" : "org.apereo.cas.ws.idp.services.WSFederationRegisteredService",
"serviceId" : "https://wsfed.example.org/.+",
"realm" : "urn:wsfed:example:org:sampleapplication",
"name" : "WSFED",
"id" : 1,
"attributeReleasePolicy" : {
"@class" : "org.apereo.cas.ws.idp.services.CustomNamespaceWSFederationClaimsReleasePolicy",
"namespace": "https://github.com/apereo/cas",
"allowedAttributes" : {
"@class" : "java.util.TreeMap",
"employeeNumber" : "personSecurityId"
}
}
}
Attributes authorized and allowed for release by this policy may not necessarily be available as resolved principal attributes and can be resolved on the fly dynamically using the attribute definition store.