REST Authentication
This documentation describes how to delegate and submit authentication requests to a remote REST endpoint. It has nothing to do with the native CAS REST API, whose configuration and caveats are documented here.
REST authentication is enabled by including the following dependencies in the WAR overlay:
1
2
3
4
5
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-rest-authentication</artifactId>
<version>${cas.version}</version>
</dependency>
1
implementation "org.apereo.cas:cas-server-support-rest-authentication:${project.'cas.version'}"
1
2
3
4
5
6
7
8
9
dependencyManagement {
imports {
mavenBom "org.apereo.cas:cas-server-support-bom:${project.'cas.version'}"
}
}
dependencies {
implementation "org.apereo.cas:cas-server-support-rest-authentication"
}
This allows the CAS server to reach to a remote REST endpoint via a POST
for verification of credentials.
Credentials are passed via an Authorization
header whose value is Basic XYZ
where XYZ is a
Base64 encoded version of the credentials.
The response that is returned must be accompanied by a 200
status code where the body should contain id
and attributes
fields, the latter being optional,
which represent the authenticated principal for CAS:
1
2
3
4
5
6
7
8
9
10
{
"@class": "org.apereo.cas.authentication.principal.SimplePrincipal",
"id": "casuser",
"attributes": {
"@class": "java.util.LinkedHashMap",
"names": [
"java.util.List", ["cas", "user"]
]
}
}
Expected responses from the REST endpoint are mapped to CAS as such:
Code | Result |
---|---|
200 |
Successful authentication. |
403 |
Produces a AccountDisabledException |
404 |
Produces a AccountNotFoundException |
423 |
Produces a AccountLockedException |
412 |
Produces a AccountExpiredException |
428 |
Produces a AccountPasswordMustChangeException |
Other | Produces a FailedLoginException |
Authentication Warnings
The remote REST endpoint can send warnings back to the CAS server using custom headers. If the authentication is successful, these warnings will be shown to the user directly after the login.
Header | Description |
---|---|
X-CAS-Warning |
For each X-CAS-Warning header present in the response, a corresponding message will be shown to the user. The header value can either be the key for a localized message or the message itself. |
X-CAS-PasswordExpirationDat |
If this header is present in the response and contains a RFC1123 date a special message will be shown to warn the user about the expiring password. If a password management provider is configured, the user will be able to directly change the password. |
Configuration
The following settings and properties are available from the CAS configuration catalog:
cas.authn.rest.password-encoder.encoding-algorithm=
The encoding algorithm to use such as |
cas.authn.rest.password-encoder.type=NONE
Define the password encoder type to use. Type may be specified as blank or
|
cas.authn.rest.uri=
Endpoint URI to use for verification of credentials. |
cas.authn.rest.password-encoder.character-encoding=UTF-8
The encoding algorithm to use such as 'UTF-8'. Relevant when the type used is |
cas.authn.rest.password-encoder.secret=
Secret to use with |
cas.authn.rest.password-encoder.strength=16
Strength or number of iterations to use for password hashing. Usually relevant when dealing with |
cas.authn.rest.charset=US-ASCII
Charset to encode the credentials sent to the REST endpoint. |
cas.authn.rest.name=
Name of the authentication handler. |
cas.authn.rest.order=
Order of the authentication handler in the chain. |
cas.authn.rest.state=
Define the scope and state of this authentication handler and the lifecycle in which it can be invoked or activated. |