How to add Token Revocation to PhenixID Authentication Services OAuth2 Authorization Server

Prerequisites

- PAS 3.0 or higher installed

- OpenID Connect Provider configured using Scenarios->OIDC

- The PhenixID OIDC token endpoint must have returned an OAuth2 access_token, which value is bound to the session as an alias.

Add token revocation as an allowed operation

- Login to configuration manager

- Click the Advanced tab

- Open Modules (click on the pen)

- Locate the api module (com.phenixidentity~phenix-api-authenticate)

- Locate the tenant for the OpenID Connect Provider configured

- Add revoke as an allowed operation.

Example:

{
		"module": "com.phenixidentity~phenix-api-authenticate",
		"enabled": "true",
		"config": {
			"tenant": [
				{
					"id": "t1",
					"displayName": "Tenant1",
					"allowedOperation": [
						"revoke"
					]
}
			]
		},
		"id": "authapi_module"
	}

NB! If you have multiple logical OpenID Connect Providers (=tenants) and you would like to configure different token revocation logic for different providers, then rename revoke to something unique for the tenant, for example revoke_t1. Also make sure to set the pipe id to the same value (see later step).

- Click Stage Changes and Commit Changes

 

Add pipe to perform token revocation

- Click the Advanced tab

- Open Pipes (click on the pen)

- Add this pipe.

{
		"id": "revoke",
		"description": "Token revocation",
		"valves": [
			{
				"name": "RPBasicAuthentictionValve",
				"enabled": "true",
				"config": {}
			},
			{
				"name": "SessionLoadValve",
				"config": {
					"id": "{{request.token}}"
				}
			},
			{
				"name": "SessionRemoveValve",
				"config": {}
			}
		]
	}	
}

- If the revoke operation was named something else, set the same value as the pipe id.

- Click Stage Changes and Commit Changes

Add revocation endpoint to Discovery data

- Click the Advanced tab

- Click OIDC_OP

- Locate the OP configuration for the OP provider (tenant)

- Add the token revocation endpoint by adding the config parameter revocation_endpoint with a value pointing to the pipe previously added. Also, add the tenant ID to the URL. 

"revocation_endpoint" : "https://<PAS_SERVER>/api/authentication/revoke?tenant=<TENANT_ID>",


FULL EXAMPLE:
{
        "id": "t1",
        "tenant": "t1",
        "guide_ref": "guides.authentication.oidc.uidpwdsms",
        "config": {
            "authorization_endpoint": "https://demo.phenixid.net/oidc/authenticate/oidc_otp",
            "userinfo_endpoint": "https://demo.phenixid.net/api/authentication/userinfo?tenant=t1",
            "revocation_endpoint": "https://demo.phenixid.net/api/authentication/revoke?tenant=t1",
            "issuer": "https://demo.phenixid.net/t1",
            "token_endpoint": "https://demo.phenixid.net/api/authentication/2a4b03b4-7073-4728-9149-6bb7409187e7?tenant=t1",
            "jwks_uri": "https://demo.phenixid.net/oidc_otp/.well-known/openid-configuration/jwks",
            "response_types_supported": [
                "code"
            ],
            "grant_types_supported": [
                "authorization_code"
            ],
            "subject_types_supported": [
                "public"
            ],
            "id_token_signing_alg_values_supported": [
                "RS256"
            ],
            "scopes_supported": [
                "openid"
            ],
            "token_endpoint_auth_methods_supported": [
                "none"
            ],
            "claims_supported": [
                "iss",
                "ver",
                "sub",
                "given_name",
                "family_name"
            ],
            "end_session_endpoint": "https://demo.phenixid.net/oidc/authenticate/logout/",
            "request_parameter_supported": "true",
            "signStore": "956bee24-98f0-41a5-9e27-76f8c89d1e1d"
        },
        "created": "2019-10-21T07:59:30.621Z"
    }


- If the revoke operation was named something else, set the same value as the last part of the revocation_endpoint uri.

Example:

"revocation_endpoint": "https://demo.phenixid.net/api/authentication/revoke_t1?tenant=t1",

Test

Use a HTTP rest client for testing and debugging. Follow the document OAuth2 Token revocation - integration guide for developers to structure the HTTP requests properly.