Service Access Strategy - REST

This strategy allows one to configure a service access strategy with the following properties:

Field Description
endpointUrl Endpoint that receives the authorization request from CAS for the authenticated principal.
acceptableResponseCodes Comma-separated response codes that are considered accepted for service access.

The objective of this policy is to ensure a remote endpoint can make service access decisions by receiving the CAS authenticated principal as url parameter of a GET request. The response code that the endpoint returns is then compared against the policy setting and if a match is found, access is granted.

Here is an example of the remote endpoint access strategy authorizing service access based on response code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "@class" : "org.apereo.cas.services.CasRegisteredService",
  "serviceId" : "^https://app.example.org",
  "id" : 1,
  "accessStrategy" : {
    "@class" : "org.apereo.cas.services.RemoteEndpointServiceAccessStrategy",
    "endpointUrl" : "https://somewhere.example.org",
    "acceptableResponseCodes" : "200,202",
    "method": "GET",
    "headers": {
      "@class":"java.util.LinkedHashMap",
      "Content-Type": "application/json"
    }
  }
}

The request sent to the remote endpoint carries the principal id as a username parameter, and its body is a JSON document that describes the principal and the requested application:

1
2
3
4
5
6
7
8
9
10
11
{
  "principalId": "casuser",
  "attributes": { "role": [ "staff" ] },
  "service": { "id": "https://app.example.org/login" },
  "registeredService": {
    "id": 1,
    "name": "Example",
    "serviceId": "^https://app.example.org",
    "friendlyName": "CAS Client"
  }
}

The application definition itself is not sent, so that client secrets, keys and other credentials that it may carry are never disclosed to the remote endpoint.