Enterprise Single Sign-On for All

JWT Service Tickets

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. CAS may also be allowed to fully create signed/encrypted JWTs and pass them back to the application in form of service tickets.

JWTs are entirely self-contained and contain the authenticated principal as well as all authorized attributes in form of JWT claims.

JCE Requirement

Make sure you have the proper JCE bundle installed in your Java environment that is used by CAS, specially if you need to use specific signing/encryption algorithms and methods. Be sure to pick the right version of the JCE for your Java version. Java versions can be detected via the java -version command.

Overview

JWT-based service tickets are issued to application based on the same semantics defined by the CAS Protocol.

CAS having received an authentication request via its /login endpoint, will conditionally issue back service tickets to the application in form of a ticket parameter via the requested http method.

All JWTs are by default signed and encrypted by CAS based on keys generated and controlled during deployment. Such keys may be exchanged with client applications to unpack the JWT and access claims.

Web flow Diagram

CAS Web flow JWT diagram

Note that per the above diagram, the JWT request by default internally causes CAS to generate an ST for the application and immediately then validate it in order to get access to the auhenticated principal and attributes per policies associated with the application registration record in the CAS service registry. This response is transformed into a JWT that is then passed onto the client application.

In other words, the responsibility of receiving a service ticket (ST) and validating it is all moved into and handled internally by CAS. The application only needs to learn how to decipher and unpack the final JWT.

Configuration

JWT support is enabled by including the following dependency in the WAR overlay:

1
2
3
4
5
<dependency>
     <groupId>org.apereo.cas</groupId>
     <artifactId>cas-server-support-token-tickets</artifactId>
     <version>${cas.version}</version>
</dependency>

To see the relevant list of CAS properties, please review this guide.

Register Clients

Signal the relevant application in CAS service registry to produce JWTs for service tickets:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^https://.*",
  "name" : "Sample",
  "id" : 10,
  "properties" : {
    "@class" : "java.util.HashMap",
    "jwtAsResponse" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "true" ] ]
    }
  }
}