REST Authentication

Be Careful

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:

The configuration settings listed below are tagged as Required in the CAS configuration metadata. This flag indicates that the presence of the setting may be needed to activate or affect the behavior of the CAS feature and generally should be reviewed, possibly owned and adjusted. If the setting is assigned a default value, you do not need to strictly put the setting in your copy of the configuration, but should review it nonetheless to make sure it matches your deployment expectations.

  • cas.authn.rest.password-encoder.encoding-algorithm=
  • The encoding algorithm to use such as MD5. Relevant when the type used is DEFAULT or GLIBC_CRYPT.

    org.apereo.cas.configuration.model.core.authentication.PasswordEncoderProperties.

  • cas.authn.rest.password-encoder.type=NONE
  • Define the password encoder type to use. Type may be specified as blank or NONE to disable password encoding. It may also refer to a fully-qualified class name that implements the Spring Security's PasswordEncoder interface if you wish you define your own encoder. The following types may be used:

    • NONE: No password encoding (i.e. plain-text) takes place.
    • DEFAULT: Use the DefaultPasswordEncoder of CAS. For message-digest algorithms via character-encoding and encoding-algorithm.
    • BCRYPT: Use the BCryptPasswordEncoder based on the strength provided and an optional secret.
    • SCRYPT: Use the SCryptPasswordEncoder.
    • PBKDF2: Use the Pbkdf2PasswordEncoder based on the strength provided and an optional secret.
    • STANDARD: Use the StandardPasswordEncoder based on the secret provided.
    • SSHA: Use the LdapShaPasswordEncoder supports Ldap SHA and SSHA (salted-SHA). The values are base-64 encoded and have the label {SHA</code> or {SSHA</code> prepended to the encoded hash.
    • GLIBC_CRYPT: Use the GlibcCryptPasswordEncoder based on the encoding-algorithm, strength provided and an optional secret.
    • org.example.MyEncoder: An implementation of PasswordEncoder of your own choosing.
    • file:///path/to/script.groovy: Path to a Groovy script charged with handling password encoding operations.

    org.apereo.cas.configuration.model.core.authentication.PasswordEncoderProperties.

  • cas.authn.rest.uri=
  • Endpoint URI to use for verification of credentials.

    org.apereo.cas.configuration.model.support.rest.RestAuthenticationProperties.

    The configuration settings listed below are tagged as Optional in the CAS configuration metadata. This flag indicates that the presence of the setting is not immediately necessary in the end-user CAS configuration, because a default value is assigned or the activation of the feature is not conditionally controlled by the setting value.

  • cas.authn.rest.password-encoder.character-encoding=UTF-8
  • The encoding algorithm to use such as 'UTF-8'. Relevant when the type used is DEFAULT.

    org.apereo.cas.configuration.model.core.authentication.PasswordEncoderProperties.

  • cas.authn.rest.password-encoder.secret=
  • Secret to use with STANDARD, PBKDF2, BCRYPT, GLIBC_CRYPT password encoders. Secret usually is an optional setting.

    org.apereo.cas.configuration.model.core.authentication.PasswordEncoderProperties.

  • cas.authn.rest.password-encoder.strength=16
  • Strength or number of iterations to use for password hashing. Usually relevant when dealing with PBKDF2 or BCRYPT encoders. Used by GLIBC_CRYPT encoders as well.

    org.apereo.cas.configuration.model.core.authentication.PasswordEncoderProperties.

  • cas.authn.rest.charset=US-ASCII
  • Charset to encode the credentials sent to the REST endpoint.

    org.apereo.cas.configuration.model.support.rest.RestAuthenticationProperties.

  • cas.authn.rest.name=
  • Name of the authentication handler.

    org.apereo.cas.configuration.model.support.rest.RestAuthenticationProperties.

  • cas.authn.rest.order=
  • Order of the authentication handler in the chain.

    org.apereo.cas.configuration.model.support.rest.RestAuthenticationProperties.

  • cas.authn.rest.state=
  • Define the scope and state of this authentication handler and the lifecycle in which it can be invoked or activated.

    org.apereo.cas.configuration.model.support.rest.RestAuthenticationProperties.