OIDC / OAuth - Add configuration to achieve Single-Sign-On (SSO)

This document is written for PhenixID Authentication Services (PAS).

The reader should have some basic knowledge about PAS.

This document describes how to configure the system to achieve SSO (Single-Sign on) for OpenID Connect / OAuth authentication flows.

Overview

- If you are using PAS as OP-SAML_SP bridge with a SAML Identity Provider, the SSO should take place on the SAML IdP. If you are using another authentication mechanism on the OP, please follow the steps below.

Prerequisites

- At least one OIDC OP configured (using guide in PAS Configuration Manager). This OP is referred to below as OP1.

Add SSO authenticator

  • Log in to the configuration UI, go to the "Scenarios" tab
  • Click OIDC
  • Add a new OIDC OP by clicking the plus sign to the right of Username and Password (This OP will be referred to below as OP_SSO.)
  • Name the OIDC OP "SSO"
  • Select the same flow type, allowed RPs etc as OP1
  • Set tenant = dummy
  • Once done, click Execution flow
  • Remove the LDAPBindValve from the flow. (Or modify the sql statement if the users are located in a sql store)
  • If needed, modify the execution flow (the first one) with the same modifications as OP1
  • Click View OP Discovery
  • Fetch the OP_SSO startpoint alias by copying the last part of the authorization_endpoint URL. This will be used in later steps. Example:

 

Fetch OP1 original startpoint alias

  • Log in to the configuration UI, go to the "Scenarios" tab
  • Click the OP1 configuration
  • Click View OP Discovery
  • Copy the last part of the authorization_endpoint URL for later usage. Example:

Change alias for OP1

- Log in to the configuration UI, go to the "Scenarios" tab

- Click Advanced

- Click on the pen to the right of Authentication - HTTP

- Search for the OP1 alias fetched in previous step (oidc_otp in the above example).

- Change the alias value by adding _auth to the old value. Example below.

- Click Stage changes and Commit changes

Find authenticator IDs

Log in to the configuration UI, go to the "Advanced" tab and press the pencil to the right of "Authentication - HTTP".

Fetch the id parameter value of the authenticators:

- The authenticator used for OP1:

{
		"alias": "oidc_otp_auth",
		"name": "OIDCPostUidPasswordAndOTP",
		"configuration": {
			"userValidationPipeID": "9945b2a3-a25c-4f22-b618-affed640eabf",
			"otpValidationPipeID": "b283e3dd-a672-4c41-a909-64ac0f75d5f1",
			"allowedRP": [
				"ff"
			],
			"loginTemplate": "login.template",
			"otp": "otp",
			"userNameParamName": "username",
			"otpParamterName": "otp",
			"requireConsent": "false",
			"consentTemplate": "oidcconsent",
			"enableHoneypot": "true"
		},
		"created": "2019-10-21T07:03:06.794Z",
		"id": "74859296-96c2-4e5f-b257-4fe3ee94dc8d"
	}

- The authenticator used for OP_SSO:

{
		"alias": "oidc_az",
		"name": "OIDCPostUidAndPassword",
		"configuration": {
			"pipeID": "39ed8579-1509-4d58-9025-cd028d3c56a9",
			"allowedRP": [
				"ff"
			],
			"loginTemplate": "login.template",
			"userNameParamName": "username",
			"passworParamterName": "password",
			"requireConsent": "false",
			"consentTemplate": "oidcconsent",
			"enableHoneypot": "true"
		},
		"created": "2020-04-16T12:45:28.429Z",
		"id": "818cc560-fa60-44d2-9e16-cff7b0aeaa22"
	}

Add Dispatch authenticator

Log in to the configuration UI, go to the "Advanced" tab and press the pencil to the right of "Authentication - HTTP".

Add a new Dispatch authenticator object.

- Set "alias" to OP1 original startpoint alias

- Set "idpID" to "dummy"

- Set the first "authenticator" value to OP1 id

- Set the second "authenticator" value to OP_SSO id

{
		"name": "Dispatch",
		"id": "start",
      "alias": "oidc_otp",
		"configuration": {
			"idpID": "dummy",
			"mapping": [
				{
					"authenticator": "4859296-96c2-4e5f-b257-4fe3ee94dc8d",
					"expression": "!request.getParameter('authenticatedrequest').equals('true')"
				},
				{
					"authenticator": "818cc560-fa60-44d2-9e16-cff7b0aeaa22",
					"expression": "request.getParameter('authenticatedrequest').equals('true')"
				}
			]
		}
	}

When done press Stage changes/Commit changes.

Modify SSO authenticator

To prevent anonymous execution of the SSO authentication flow, please follow these steps:

- Log in to the configuration UI, go to the "Scenarios" tab

- Click on the OP_SSO oidc scenarion

- Click Execution flow

- Expand the first Execution flow

- Click Add valve

- Enter FlowFailValve

- Check Enabled

- Click Advanced and add this below skip if expression:

request.get('authenticatedrequest').equals('true')

- Move to the newly added valve to be executed first

- Save changes

 

Test

- Open the RP and click login

- Make sure you're logged in to the RP correctly

- Logout from the RP (not from the OP)

- With the browser still open, try to login to the RP again

- You should now be logged in to the RP without having to authenticate again.