Federation - Add configuration to redirect to different authentication methods based on client ip

This document is written for PhenixID Server.

The reader should have some basic knowledge about PhenixID Server.

This document describes how to configure the system to redirect to different authentication methods based on client ip. The typical use case for this is to force strong authentication for clients connecting from the internet or a non-internal network while clients on the internal network is allowed to use a weaker authentication method, such as Windows SSO or username/password.

Prerequisites

- Setup strong authentication federation scenario using guides in Configuration Manager

- Setup username/password authentication federation scenario using guide in Configuration Manager

- Internal client access network ip range

Change IdP reference

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

Click on the strong authentication federation scenario

Click Execution flow

Expand the last flow

Expand the AssertionProvider

Copy the value of the targetEntityID parameter

 

Click on the weak authentication federation scenario

Click Execution flow

Expand the flow

Expand AssertionProvider

Paste the value fetched previously into the targetEntityID

Click Save

Go to the Advanced tab

Expand Authentication - HTTP

Locate the weak authenticator

Change the idpID parameter to the value fetched previously

 

Click Stage changes and then Commit changes

Change alias for strong authenticator

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

Click on the strong authentication federation scenario

Click Identity Provider

Get the value of the POST SSO URL

Fetch the value after /authenticate/

Go to the "Advanced" tab and press the pencil to the right of "Authentication - HTTP"

Find the authenticator with alias=<value fetched from previous step>

Change the alias value to idp2.

{
		"id": "02d5c28e-ea46-48c9-85b5-decb871820e0",
		"alias": "idp2",
		"name": "PostUidPasswordAndOTPSAML",
		"displayName": "UnPwSMS",
		"configuration": {
			"userValidationPipeID": "052f5421-8283-4f49-a84f-1e96dbfcb315",
			"otpValidationPipeID": "7554bc87-c963-485c-8366-9cdaaaf92187",
			"idpID": "788e37f8-9da9-49b5-83cd-e518e77ab765"
		},
		"created": "2017-04-04T14:03:38.505Z"
	}

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 the weak authentication

{
		"id": "d544a852-f6ee-40f2-ba0c-c9ef00847503",
		"alias": "unpwmultiplesps",
		"name": "PostUidAndPasswordSAML",
		"displayName": "UnPwMultipleSPs",
		"configuration": {
			"pipeID": "d453859c-4d1e-4948-a157-d750cabf6dce",
			"idpID": "788e37f8-9da9-49b5-83cd-e518e77ab765"
		},
		"created": "2017-03-26T10:00:03.291Z"
	}

- The authenticator used for strong authentication

{
		"id": "02d5c28e-ea46-48c9-85b5-decb871820e0",
		"alias": "idp2",
		"name": "PostUidPasswordAndOTPSAML",
		"displayName": "UnPwSMS",
		"configuration": {
			"userValidationPipeID": "052f5421-8283-4f49-a84f-1e96dbfcb315",
			"otpValidationPipeID": "7554bc87-c963-485c-8366-9cdaaaf92187",
			"idpID": "788e37f8-9da9-49b5-83cd-e518e77ab765"
		},
		"created": "2017-04-04T14:03:38.505Z"
	}

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 the value you fetched from this
step.

- Set "idpID" to the value you fetched from this step.

- Set "authenticator" to the values you fetched from this step.

- Change ip network range to suite your environment. (In the example below, internal client ip starts with 192.168.98)

- Change request parameter if needed. For example, if PhenixID Server sits behind a reverse proxy, the client ip request parameter is probably X-Forwarded-For.

{
		"name": "Dispatch",
		"id": "start","alias": "start",
		"configuration": {
			"idpID": "788e37f8-9da9-49b5-83cd-e518e77ab765",
			"mapping": [
				{
					"authenticator": "02d5c28e-ea46-48c9-85b5-decb871820e0",
					"expression": "!request.getParameter('remoteAddress').startsWith('192.168.98')"
				},
				{
					"authenticator": "d544a852-f6ee-40f2-ba0c-c9ef00847503",
					"expression": "request.getParameter('remoteAddress').startsWith('192.168.98')"
				}
			]
		}
	}

When done press Stage changes/Commit changes.

Protect weak authenticator

A person that knows the URL of the weak authenticator can address it directly simply by entering the URL in a web browser. To prevent external users to use the weak authenticator, follow these steps.

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

Click on the weak authentication federation scenario

Click Execution flow

Expand the Execution flow

Click Add valve

Enter FlowFailValve

Check Enabled

Click Add configuration parameter

Key= exec_if_expr, Value=!request['remoteAddress'].startsWith('192.168.98')

(Change the ip address range and/or the request parameter name to suite your environment, see previous step)

Click Add configuration parameter

Key=message, Value=common.messages.failure

Click Add Valve

Move to the newly added valve to be executed first

 

Test

From internal client:

Browse to the alias of the Dispatch authenticator (..../authenticate/start)

Verify that weak authentication method is presented and that the authentication works

 

From external client:

Browse to the alias of the Dispatch authenticator (..../authenticate/start)

Verify that strong authentication method is presented and that the authentication works

 

From external client:

Browse to the alias of the weak authenticator

Try authenticating

Make sure a Failure message is presented.