How to setup the HTTP API for ticket translation oAuth2 Bearer token - SAML2 (eHM SAML Token use case)

Prerequisites

- PAS 2.7 installed

- Previous authentication must have returned an access_token, which value is bound to the session as an alias.

- User information must have been stored in the session during authentication (using session* valves in the pipe). Consult the valves documentation for usage examples.

- Proxy (such as apache) in front of the PAS server

- PhenixID Authentication Services SAML IdP configured

- SAML SP Metadata uploaded

Proxy config

Add this rule to the your proxy server (example below is for Apache) and restart the proxy to make it effective.

<Location /api/authentication/ehmSAMLToken>
SetEnvIfNoCase Authorization "(.{36}\z)" HTTP_AUTHORIZATION=$1
RequestHeader set session_id "%{HTTP_AUTHORIZATION}e"
RequestHeader unset Authorization
</Location>

Add local http-api module

- Login to configuration manager

- Click the Advanced tab

- Open Modules (click on the pen)

- Add this module (if module is already added, only add tenant and/or allowedOperation):

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

- Click Stage Changes and Commit Changes

- Open NODE_GROUPS (click on the pen)

- Add id of the newly added module to module_refs. Example below. (You can skip this step if the module was already added)

{
		"name": "WIN-DHB3ICNDG4E",
		"description": "Default node (created automatically)",
		"config": {
			"module_refs": "authapi_module,sealapp,signapp_1,......"
		},
		"created": "2017-07-03T11:38:03.135Z",
		"id": "493afd0e-0fe8-40e4-b1a1-a24a5e2df6e2",
		"modified": "2017-07-03T14:39:43.257Z"
	}

- Click Stage Changes and Commit Changes

 

Add pipes to fetch SAML response from oAuth2 Bearer access_token

In this example, no client certificate is used. Please read the Valves documentation on how to configure a client certificate to the pipe.

- Click the Advanced tab

- Open Pipes (click on the pen)

- Add this pipe.

{
		"id": "ehmSAMLToken",
		"description": "Get SAML Token from oAuth2 access_token",
		"valves": [
			{
				"name": "ItemCreateValve",
				"config": {
					"dest_id": "samlToken"
				}
			},
			{
				"name": "SessionLoadValve",
				"config": {
					"id": "{{request.session_id}}"
				}
			},
			{
				"name": "PropertyFromSessionToItem",
				"config": {
					"source": "givenName"
				}
			},
			{
				"name": "PropertyFromSessionToItem",
				"config": {
					"source": "surName"
				}
			},
			{
				"name": "PropertyFromSessionToItem",
				"config": {
					"source": "saml_authn_context"
				}
			},
			{
				"name": "PropertyFromSessionToItem",
				"config": {
					"source": "personalNumber"
				}
			},
			{
				"name": "PropertyCopyValve",
				"config": {
					"source": "personalNumber",
					"dest": "http://sambi.se/attributes/1/personalIdentityNumber"
				}
			},
			{
				"name": "PropertyCopyValve",
				"config": {
					"source": "givenName",
					"dest": "http://sambi.se/attributes/1/givenName"
				}
			},
			{
				"name": "PropertyCopyValve",
				"config": {
					"source": "surName",
					"dest": "http://sambi.se/attributes/1/surname"
				}
			},
			{
				"name": "AssertionProvider",
				"config": {
					"targetEntityID": "ec676be5-d967-4ffe-ba28-b98b51117512",
					"nameIDAttribute": "http://sambi.se/attributes/1/personalIdentityNumber",
					"additionalAttributes": "http://sambi.se/attributes/1/personalIdentityNumber,http://sambi.se/attributes/1/givenName,http://sambi.se/attributes/1/surname",
					"sourceID": "https://www6.example.se/authenticate/validateeleglogin-PROD-FED",
					"authMetod": "urn:oasis:names:tc:SAML:2.0:ac:classes:XMLDSig"
				}
			},
			{
				"name": "PropertyKeepValve",
				"config": {
					"name": "SAMLResponse"
				}
			}
		]
	}

- Change targetEntityID - this must point to the id of your defined SAML Identity Provider

- Change sourceID - this must be the entityID of the SAML SP

- Click Stage Changes and Commit Changes

Test

Use a HTTP rest client for testing and debugging. Follow the document Using PhenixID HTTP API for ticket translation oAuth2 Bearer token - SAML2 (eHM SAML Token use case) to structure the HTTP requests properly.