PhenixID Verify User Identity for PAS 3.0 or later

Following the steps below creates a service to verify the identity of a user who is calling in to Help-desk or other functions in your organisation.

The users available verify methods will be displayed and the person handling the call can select one of the methods to verify the identity of the user.

Requirements

  • A Keystore configured, used by the SAML function in this configuration
  • Swedish BankID keystore should have been configured if Swedish BankID will be used
  • All methods to be used shall be configure

Step 1 - Authentication - HTTP

Add the following configuration to “Authentication - HTTP” 

	{
		"alias": "phxverify",
		"name": "Registration",
		"id": "phxverify",
		"configuration": {
			"stages": [
				{
					"pipeid": "phxverify-username",
					"template": "phxverify",
					"sessionValues": [
						"roles",
						"adminuser"
					],
					"translation": [
						"phxverify.messages.information.title",
						"phxverify.messages.information.searchuser",
						"phxverify.messages.username",
						"phxverify.messages.querybox",
						"phxverify.messages.or",
						"phxverify.messages.logout"
					],
					"templateVariables": {
						"searchmethods": [
							{
								"type": "username",
								"title": "phxverify.messages.username"
							},
							{
								"type": "mail",
								"title": "phxverify.messages.mail"
							},
							{
								"type": "mobile",
								"title": "phxverify.messages.mobile"
							}
						],
						"settings": {
							"sp_url": "/phxverify/authenticate/phxverifysp/"
						}
					},
					"errorTranslation": [
						{
							"key": "User does not exist",
							"value": "phxverify.error.usernotexist"
						},
						{
							"key": "Multiple users found",
							"value": "phxverify.error.multipleusersfound"
						},
						{
							"key": "Login failed",
							"value": "phxverify.error.loginfailed"
						}
					]
				},
				{
					"pipeid": "phxverify-verifychoice",
					"template": "phxverify",
					"templateVariables": {
						"useBid": "true",
						"methods": [
							{
								"type": "ot",
								"title": "phxverify.messages.ot"
							},
							{
								"type": "token",
								"title": "phxverify.messages.pp"
							},
							{
								"type": "sms",
								"title": "phxverify.messages.sms"
							},
							{
								"type": "mail",
								"title": "phxverify.messages.mail"
							},
							{
								"type": "bid",
								"title": "phxverify.messages.bid"
							}
						]
					},
					"sessionValues": [
						"phxverify-disabled-token",
						"phxverify-disabled-sms",
						"phxverify-disabled-ot",
						"phxverify-disabled-mail",
						"phxverify-disabled-bid",
						"givenname",
						"sn",
						"mobile",
						"username",
						"mail",
						"roles",
						"adminuser",
						"pnrsub"
					],
					"translation": [
						"phxverify.messages.information.title",
						"phxverify.messages.username",
						"phxverify.messages.givenname",
						"phxverify.messages.snname",
						"phxverify.messages.mobile",
						"phxverify.messages.mail",
						"phxverify.messages.information.choose_method",
						"phxverify.messages.cancel",
						"phxverify.messages.logout",
						"phxverify.messages.bid"
					],
					"errorTranslation": [
						{
							"key": "Wrong verification code",
							"value": "phxverify.error.wrongotp"
						},
						{
							"key": "User does not exist",
							"value": "phxverify.error.usernotexist"
						},
						{
							"key": "Multiple users found",
							"value": "phxverify.error.multipleusersfound"
						},
						{
							"key": "Login failed",
							"value": "phxverify.error.loginfailed"
						},
						{
							"key": "alreadyInProgress",
							"value": "phxverify.error.bid_alreadyinprogress"
						}
					]
				},
				{
					"pipeid": "phxverify-verifyOTP",
					"template": "phxverify",
					"templateVariables": {
						"useBid": "true"
					},
					"translation": [
						"phxverify.messages.information.title",
						"phxverify.messages.username",
						"phxverify.messages.enterotp",
						"phxverify.messages.givenname",
						"phxverify.messages.snname",
						"phxverify.messages.mobile",
						"phxverify.messages.mail",
						"phxverify.messages.ot",
						"phxverify.messages.otstatus",
						"phxverify.messages.sms",
						"phxverify.messages.mail",
						"phxverify.messages.pp",
						"phxverify.messages.verify",
						"phxverify.messages.information.verifyotp",
						"phxverify.messages.information.otpending",
						"phxverify.messages.information.bidpending",
						"phxverify.messages.information.ot_timedout",
						"phxverify.messages.information.bid_timedout",
						"phxverify.messages.cancel",
						"phxverify.messages.logout",
						"phxverify.messages.bid"
					],
					"sessionValues": [
						"phxverify-disabled-token",
						"phxverify-disabled-sms",
						"phxverify-disabled-ot",
						"phxverify-disabled-mail",
						"phxverify-disabled-bid",
						"givenname",
						"sn",
						"mobile",
						"username",
						"mail",
						"roles",
						"phxverify-verifyotp",
						"phxverify-otpending",
						"phxverify-bidpending",
						"adminuser",
						"pnrsub"
					],
					"errorTranslation": [
						{
							"key": "Wrong verification code",
							"value": "phxverify.error.wrongotp"
						},
						{
							"key": "User does not exist",
							"value": "phxverify.error.usernotexist"
						},
						{
							"key": "User rejected",
							"value": "ot_rejected"
						},
						{
							"key": "Pending user confirmation",
							"value": "ot_pending"
						},
						{
							"key": "User confirmation in progress",
							"value": "ot_inprogress"
						},
						{
							"key": "bid-outstandingTransaction",
							"value": "bid_outstandingTransaction"
						},
						{
							"key": "bid-noClient",
							"value": "bid_noClient"
						},
						{
							"key": "phxverify.messages.bid_startbankid",
							"value": "bid_startbankid"
						},
						{
							"key": "bid-started",
							"value": "bid_started"
						},
						{
							"key": "phxverify.messages.bid_usersign",
							"value": "bid_userSign"
						},
						{
							"key": "bid-expiredTransaction",
							"value": "bid_expiredTransaction"
						},
						{
							"key": "bid-certificateErr",
							"value": "bid_certificateErr"
						},
						{
							"key": "bid-userCancel",
							"value": "bid_userCancel"
						},
						{
							"key": "bid-cancelled",
							"value": "bid_cancelled"
						},
						{
							"key": "bid-startFailed",
							"value": "bid_startFailed"
						},
						{
							"key": "bid-unknown",
							"value": "bid_unknown"
						},
						{
							"key": "Multiple users found",
							"value": "phxverify.error.multipleusersfound"
						},
						{
							"key": "Login failed",
							"value": "phxverify.error.loginfailed"
						}
					]
				},
				{
					"pipeid": "phxverify-complete",
					"template": "phxverify",
					"templateVariables": {
						"useBid": "true"
					},
					"translation": [
						"phxverify.messages.information.title",
						"phxverify.messages.username",
						"phxverify.messages.enterotp",
						"phxverify.messages.givenname",
						"phxverify.messages.snname",
						"phxverify.messages.mobile",
						"phxverify.messages.mail",
						"phxverify.messages.ot",
						"phxverify.messages.otstatus",
						"phxverify.messages.sms",
						"phxverify.messages.mail",
						"phxverify.messages.pp",
						"phxverify.messages.cancel",
						"phxverify.messages.userverified",
						"phxverify.messages.logout",
						"phxverify.messages.bid"
					],
					"sessionValues": [
						"phxverify-disabled-token",
						"phxverify-disabled-sms",
						"phxverify-disabled-ot",
						"phxverify-disabled-mail",
						"givenname",
						"sn",
						"mobile",
						"username",
						"mail",
						"phxverify-newstatus",
						"roles",
						"adminuser",
						"pnrsub"
					],
					"errorTranslation": [
						{
							"key": "Wrong verification code",
							"value": "phxverify.error.wrongotp"
						},
						{
							"key": "User does not exist",
							"value": "phxverify.error.usernotexist"
						},
						{
							"key": "Multiple users found",
							"value": "phxverify.error.multipleusersfound"
						},
						{
							"key": "Login failed",
							"value": "phxverify.error.loginfailed"
						}
					]
				}
			]
		}
	},
	{
		"id": "phxverifysp",
		"alias": "phxverifysp",
		"name": "SAMLServiceProviderAuthN",
		"displayName": "PHXVerify IdP",
		"configuration": {
			"successURL": "/phxverify/authenticate/phxverify/",
			"sp": "https://replace_phxverify_address",
			"pipeID": "PHXVerifySPPipe",
			"targetIDP": "https://replace_phxverify_address/phxverify/authenticate/phxverifyidp",
			"acsUrl": "https://replace_phxverify_address/phxverify/authenticate/phxverifysp",
			"entityID": "https://replace_phxverify_address"
		}
	},
	{
		"id": "e93a1158-b7b4-4491-9770-24901c3b0296",
		"alias": "phxverifyidp2",
		"name": "PostUidAndPasswordSAML",
		"displayName": "PHXVerifyiDP",
		"configuration": {
			"pipeID": "d449c9a9-0601-484f-ac62-a273f5a4ecc9",
			"idpID": "9602d813-76c5-4ab7-b1f8-4ff51b40c3ff",
			"translation": [
				{
					"mapKeyTo": "phxverify.messages.information.title",
					"key": "login.messages.information.title"
				},
				{
					"mapKeyTo": "phxverify.messages.information.header",
					"key": "login.messages.information.header"
				},
				{
					"mapKeyTo": "phxverify.messages.information.body",
					"key": "login.messages.information.body"
				}
			]
		}
	},
	{
		"id": "002cd990-af32-4a27-9dc0-815eff7a717a",
		"alias": "phxverifysso",
		"name": "PostUidAndPasswordSAML",
		"displayName": "PHXVerifySSO",
		"configuration": {
			"pipeID": "951af7c4-0772-4030-b90a-c3f53c3332fb",
			"idpID": "1c650882-8e14-4bd6-9f6a-ef3553c5a43c"
		}
	},
	{
		"name": "Dispatch",
		"id": "phxverifyidp",
		"alias": "phxverifyidp",
		"configuration": {
			"idpID": "9602d813-76c5-4ab7-b1f8-4ff51b40c3ff",
			"mapping": [
				{
					"authenticator": "e93a1158-b7b4-4491-9770-24901c3b0296",
					"expression": "!request.getParameter('authenticatedrequest').equals('true')"
				},
				{
					"authenticator": "002cd990-af32-4a27-9dc0-815eff7a717a",
					"expression": "request.getParameter('authenticatedrequest').equals('true')"
				}
			]
		}
	}

Replace the following settings :

"replace_phxverify_address" with the address to your PhenixID Server and port to use, example "phxverify.phenixid.se:8443"

Disable Swedish BankID as an option to verify user :

  • Change all "useBid": "true" to "useBid": "" in the configuration above
  • Remove the following from "methods" sections in the configuration above
    {
    "type": "bid",
    "title": "phxverify.messages.bid"
    }

 

Step 2 - Guide configuration

Add the following configuration to "Guide configuration”

	{
		"id" : "ba6e71aa-4e32-4a5c-88df-a2ed6ee1709e",
		"name" : "PHXVerifyIdP",
		"description" : "PHXVerifyIdP",
		"type" : "guides.authentication.saml.samluidpwd2",
		"config" : {
			"pipeID" : "d449c9a9-0601-484f-ac62-a273f5a4ecc9",
			"idp_ref" : "9602d813-76c5-4ab7-b1f8-4ff51b40c3ff",
			"auth_ref" : "e93a1158-b7b4-4491-9770-24901c3b0296",
			"ldap_connection_ref" : "replace_ldap_id"
			}
	},
	{
		"id": "51265e65-b112-4948-a285-4851d772ec5c",
		"name": "PHXVerifySSO",
		"description": "PHXVerifySSO",
		"type": "guides.authentication.saml.samluidpwd2",
		"config": {
			"pipeID": "951af7c4-0772-4030-b90a-c3f53c3332fb",
			"idp_ref": "1c650882-8e14-4bd6-9f6a-ef3553c5a43c",
			"auth_ref": "002cd990-af32-4a27-9dc0-815eff7a717a",
			"ldap_connection_ref": "replace_ldap_id"
		}
	}

"replace_ldap_id" with the LDAP Scenario ID.


Step 3 - Pipes

Add the following configuration to “Pipes”

	{
		"id": "phxverify-username",
		"valves": [
			{
				"name": "SessionLoadValve",
				"config": {
					"id": "{{request.session_id}}"
				}
			},
			{
				"name": "FlowFailValve",
				"config": {
					"message": "Login failed",
					"skip_if_expr": "request.get('authenticatedrequest').equals('true')"
				}
			},
			{
				"name" : "SessionPropertyRemoveValve",
				"config": {
					"name":"username,generated_otp,phxverify-verifyotp,ot_verify,phxverify-otpending,phxverify-bidpending,phxverify-disabled-bid,phxverify-newstatus,phxverify-disabled-sms,phxverify-disabled-mail,phxverify-disabled-token,phxverify-disabled-ot,givenname,OATH,PKI,username,mobile,sn,mail,pnr,pnrsub"
				}
			},
			{
				"name": "LDAPSearchValve",
				"config": {
					"connection_ref": "replace_ldap_id",
					"base_dn": "replace_ldap_base_dn",
					"scope": "SUB",
					"size_limit": "0",
					"filter_template": "replace_phxverify_user_attrib={{request.username}}",
					"attributes": "mobile,givenName,sn,mail,replace_phxverify_bankid_attrib",
					"exec_if_expr": "request.get('username')!=null"
				}
			},
			{
				"name": "LDAPSearchValve",
				"config": {
					"connection_ref": "replace_ldap_id",
					"base_dn": "replace_ldap_base_dn",
					"scope": "SUB",
					"size_limit": "0",
					"filter_template": "mail={{request.mail}}",
					"attributes": "mobile,givenName,sn,mail,replace_phxverify_user_attrib,replace_phxverify_bankid_attrib",
					"exec_if_expr": "request.get('mail')!=null"
				}
			},
			{
				"name": "LDAPSearchValve",
				"config": {
					"connection_ref": "replace_ldap_id",
					"base_dn": "replace_ldap_base_dn",
					"scope": "SUB",
					"size_limit": "0",
					"filter_template": "mobile={{request.mobile}}",
					"attributes": "mobile,givenName,sn,mail,replace_phxverify_user_attrib,replace_phxverify_bankid_attrib",
					"exec_if_expr": "request.get('mobile')!=null"
				}
			},
			{
				"name": "FlowFailValve",
				"config": {
					"message": "User does not exist",
					"exec_if_expr": "flow.items().isEmpty()"
				}
			},
			{
				"name": "FlowFailValve",
				"config": {
					"message": "Multiple users found",
					"skip_if_expr": "flow.isSingle()"
				}
			},
			{
				"config": {
					"name": "username",
					"value": "{{request.username}}",
					"exec_if_expr": "request.get('username')!=null"
				},
				"name": "SessionPropertyAddValve"
			},
			{
				"config": {
					"name": "username",
					"value": "{{item.replace_phxverify_user_attrib}}",
					"exec_if_expr": "request.get('mail')!=null || request.get('mobile')!=null"
				},
				"name": "SessionPropertyAddValve"
			},
			{
				"name": "GetTokenExistsValve",
				"config": {
					"username_attribute": "{{session.username}}",
					"token_type": "OATH",
					"get_value_attribute_key": "OATH"
				}
			},
			{
				"name": "GetTokenExistsValve",
				"config": {
					"username_attribute": "{{session.username}}",
					"token_type": "PKI",
					"get_value_attribute_key": "PKI"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "OATH",
					"value": "{{item.OATH}}"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "PKI",
					"value": "{{item.PKI}}"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "mobile",
					"value": "{{item.mobile}}"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"dest_id": "{{session.pki_user}}",
					"name": "givenname",
					"value": "{{item.givenName}}"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "sn",
					"value": "{{item.sn}}"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "mail",
					"value": "{{item.mail}}"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "pnr",
					"value": "{{item.replace_phxverify_bankid_attrib}}"
				}
			},
			{
				"name": "PropertyAddValve",
				"config": {
					"name": "pnr2sub",
					"value": "{{item.replace_phxverify_bankid_attrib}}"
				}
			},
			{
				"name": "PropertySubstringValve",
				"config": {
					"source": "pnr2sub",
					"end_index": "8",
					"begin_index": "0",
					"exec_if_expr": "request.get('replace_phxverify_bankid_attrib')!=null"
				}
			},
			{
				"config": {
					"name": "pnrsub",
					"value": "{{item.pnr2sub}}xxxx"
				},
				"name": "SessionPropertyAddValve"
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "phxverify-disabled-bid",
					"value": "disabled",
					"exec_if_expr": "",
					"skip_if_expr": "flow.items().get(0).containsProperty('replace_phxverify_bankid_attrib')"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "phxverify-disabled-sms",
					"value": "disabled",
					"exec_if_expr": "",
					"skip_if_expr": "flow.items().get(0).containsProperty('mobile')"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "phxverify-disabled-mail",
					"value": "disabled",
					"exec_if_expr": "",
					"skip_if_expr": "flow.items().get(0).containsProperty('mail')"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "phxverify-disabled-token",
					"value": "disabled",
					"exec_if_expr": "flow.property('OATH').equals('false')"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "phxverify-disabled-ot",
					"value": "disabled",
					"exec_if_expr": "flow.property('PKI').equals('false')"
				}
			},
			{
				"name": "SessionPersistValve",
				"config": {}
			}
		]
	},
	{
		"id": "phxverify-verifychoice",
		"valves": [
			{
				"name": "SessionLoadValve",
				"config": {
					"id": "{{request.session_id}}"
				}
			},
			{
				"name" : "SessionPropertyRemoveValve",
				"config": {
					"name":"ot_verify, phxverify-otpending,phxverify-bidpending,phxverify-verifyotp,generated_otp,transactionID"
				}
			},
			{
				"name": "ItemCreateValve",
				"config": {
					"dest_id": "{{request.session_id}}"
				}
			},
			{
				"name": "OTPGeneratorValve",
				"config": {
					"length": "6",
					"alpha_numeric": "false",
					"name": "generated_otp",
					"valid_time_in_seconds": "300",
					"exec_if_expr": "",
					"skip_if_expr": ""
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "generated_otp",
					"value": "{{item.generated_otp}}",
					"skip_if_expr": ""
				}
			},
			{
				"name": "OTPBySMSValve",
				"config": {
                                        "message_gateway_settings" : "replace_gw_id",					
					"recipient_param_name": "{{session.mobile}}",
					"generated_otp_name": "generated_otp",
					"use_flash": "true",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('sms')",
					"skip_if_expr": ""
				}
			},
			{
				"name": "OTPBySMTPValve",
				"config": {
					"smtp_settings": "replace_smtp_settings",
					"start_tls_enabled": "true",
					"userid_param_name": "{{session.username}}",
					"mail_param_name": "{{session.mail}}",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('mail')"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "phxverify-verifyotp",
					"value": "true",
					"exec_if_expr": "request.get('type') != null && (request.get('type').contains('sms') || request.get('type').contains('token') || request.get('type').contains('mail'))"
				}
			},
			{
				"name": "IssueAssignmentValve",
				"config": {
					"userNameParameter": "{{session.username}}",
					"serviceName": "Phenixid",
					"authMessage": "Verify your user ID",
					"serviceMessage": "",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('ot')"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "ot_verify",
					"value": "{{item.assignmentid}}",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('ot')",
					"skip_if_expr": ""
				}
			},
			{
				"name": "BankIDAuthenticateValve",
				"config": {
					"bankid_keystore": "replace_phxverify_bankid_keystore",
					"mode": "test",
					"pnr": "{{session.pnr}}",
					"client_ip_request_param": "X-Forwarded-For",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid')"
					}
			},
			{
				"name": "ItemMergeValve",
				"config": {
					"dest_id": "{{request.session_id}}"
					}
			},
			{
				"name": "FlowFailValve",
				"config": {
					"message": "alreadyInProgress",
					"exec_if_expr": "flow.property('errorCode').equals('alreadyInProgress')",
					"item_include_expr" : "item.containsProperty('errorCode')"
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "transactionID",
					"value": "{{item.transactionID}}"
					}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "phxverify-otpending",
					"value": "true",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('ot')",
					"skip_if_expr": ""
				}
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "phxverify-bidpending",
					"value": "true",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid')",
					"skip_if_expr": ""
				}
			},
			{
				"name": "SessionPersistValve",
				"config": {}
			}
		]
	},
	{
		"id": "phxverify-verifyOTP",
		"valves": [
			{
				"name": "SessionLoadValve",
				"config": {
					"id": "{{request.session_id}}"
				}
			},
			{
				"name": "ItemCreateValve",
				"config": {
					"dest_id": "{{request.session_id}}"
				}
			},
			{
				"name": "PropertyAddValve",
				"config": {
					"name": "username",
					"value": "{{session.username}}"
				}
			},
			{
				"name": "OTPValidationValve",
				"config": {
					"provided_otp_param_name": "{{request.otp}}",
					"generated_otp_param_name": "generated_otp",
					"proceed_on_error": "true",
					"exec_if_expr": "request.get('type').contains('sms')"
				}
			},
			{
				"name": "OTPValidationValve",
				"config": {
					"provided_otp_param_name": "{{request.otp}}",
					"generated_otp_param_name": "generated_otp",
					"proceed_on_error": "true",
					"exec_if_expr": "request.get('type').contains('mail')"
				}
			},
			{
				"name": "TokenValidationValve",
				"config": {
					"provided_otp_param_name": "{{request.otp}}",
					"otp_length": "6",
					"userid_param_name": "{{item.username}}",
					"exec_if_expr": "request.get('type').contains('token')"
				}
			},
			{
				"name": "FlowFailValve",
				"config": {
					"message": "Wrong verification code",
					"exec_if_expr": "attributes.user_authenticated === false"
				}
			},
			{
				"name": "AssignmentStatusValve",
				"config": {
					"id": "{{session.ot_verify}}",
					"dest": "userverifiedot",
					"exec_if_expr": "request.get('type').contains('ot')"
				}
			},
			{
				"name": "BankIDCollectAuthenticationStatusValve",
				"config": {
					"bankid_keystore": "replace_phxverify_bankid_keystore",
					"mode": "test",
					"transactionID": "{{session.transactionID}}",
					"customerID": "{{session.tenant}}",
					"exec_if_expr": "request.get('type').contains('bid')"
					}
				},
				{
				"name": "ItemMergeValve",
				"enabled": "true",
				"config": {
					"dest_id": "{{request.session_id}}"
					}
			},
			{
				"name": "FlowFailValve",
				"config": {
					"message": "User rejected",
					"exec_if_expr": "flow.property('userverifiedot').equals('REJECTED') && request.get('type').contains('ot')"
				}
			},
			{
				"name": "FlowFailValve",
				"config": {
					"message": "Pending user confirmation",
					"exec_if_expr": "flow.property('userverifiedot').equals('PENDING') && request.get('type').contains('ot')"
				}
			},
			{
				"name": "FlowFailValve",
				"config": {
					"message": "User confirmation in progress",
					"exec_if_expr": "flow.property('userverifiedot').equals('IN_PROGRESS') && request.get('type').contains('ot')"
				}
			},
			{
				"config": {
					"message": "bid-outstandingTransaction",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid') && flow.property('hintCode').equals('outstandingTransaction')"
				},
				"name": "FlowFailValve"
			},
			{
				"config": {
					"message": "bid-noClient",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid') && flow.property('hintCode').equals('noClient')"
				},
				"name": "FlowFailValve"
			},
			{
				"config": {
					"message": "bid-started",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid') && flow.property('hintCode').equals('started')"
				},
				"name": "FlowFailValve"
			},
			{
				"config": {
					"message": "bid-userSign",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid') && flow.property('hintCode').equals('userSign')"
				},
				"name": "FlowFailValve"
			},
			{
				"config": {
					"message": "bid-expiredTransaction",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid') && flow.property('hintCode').equals('expiredTransaction')"
				},
				"name": "FlowFailValve"
			},
			{
				"config": {
					"message": "bid-certificateErr",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid') && flow.property('hintCode').equals('certificateErr')"
				},
				"name": "FlowFailValve"
			},
			{
				"config": {
					"message": "bid-userCancel",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid') && flow.property('hintCode').equals('userCancel')"
				},
				"name": "FlowFailValve"
			},
			{
				"config": {
					"message": "bid-cancelled",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid') && flow.property('hintCode').equals('cancelled')"
				},
				"name": "FlowFailValve"
			},
			{
				"config": {
					"message": "bid-startFailed",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid') && flow.property('hintCode').equals('startFailed')"
				},
				"name": "FlowFailValve"
			},
			{
				"config": {
					"message": "bid-unknown",
					"exec_if_expr": "request.get('type') != null && request.get('type').contains('bid') && flow.property('hintCode').equals('unknown')"
				},
				"name": "FlowFailValve"
			},
			{
				"name": "SessionPropertyAddValve",
				"config": {
					"name": "phxverify-newstatus",
					"value": "ok"
				}
			},
			{
				"name": "SessionPersistValve",
				"config": {}
			}
		]
	},
	{
		"id": "phxverify-complete",
		"valves": [
			{
				"name": "SessionLoadValve",
				"config": {
					"id": "{{request.session_id}}"
				}
			},
			{
				"name": "SessionRemoveValve",
				"config": {}
			}
		]
	},
	{
		"id" : "PHXVerifySPPipe",
		"valves" : [
			{
				"name" : "AssertionConsumer",
				"config" : {}
			},
			{
				"name" : "FlowFailValve",
				"config" : {
					"message" : "User does not exist",
					"exec_if_expr" : "flow.items().isEmpty()"
				}
			},
			{
				"name": "PropertyAddValve",
				"config": {
					"name": "roles",
					"value": "auth:7313aa29-f399-4a5b-afd3-fb1d7a88ae93",
					"enable_multi_value": "true"
				}
			}
		]
	},
	{
		"id" : "d449c9a9-0601-484f-ac62-a273f5a4ecc9",
		"name" : "Find user and validate password",
		"description" : "Pipe performing username and password authentication",
		"enabled" : "true",
		"config" : {
			"valve_refs" : "a3d20fa0-b556-41aa-985d-aa30d4dc993c,1073e906-05ec-48ea-8888-1cde79e40219,28309e6a-b1cb-479e-8432-fb7e9ec28771,phxverifyadm1,phxverifyadm2,phxverifyadm3,cf0cbbde-597f-4ecd-85e3-72a46903d727"
			}
	},
	{
		"id": "951af7c4-0772-4030-b90a-c3f53c3332fb",
		"name": "Find user and validate password",
		"description": "Pipe performing username and password authentication",
		"enabled": "true",
		"config": {
			"valve_refs": "a6920bf0-b1a3-473e-b669-20cbedf2e8af,878b91e8-a4c0-42ef-b963-9fd0c437b0e0,phxverifyadm1,phxverifyadm2,phxverifyadm3,88a8b3be-2e54-4294-92ad-8ba88c40e427"
		},
		"guide_ref": "4cd62bf9-a01d-4a3d-aa55-2dda957e26cc"
	}

Replace the following settings :

"replace_ldap_id" with your LDAP connection id, example “731c93fb-f123-403a-9b4f-45720eeed474”

"replace_ldap_base_dn" with your “base_dn”, example “DC=phenixid,DC=local”

"replace_phxverify_user_attrib" with either "sAMAccountName" if you have Active Directory or "uid" for other LDAP catalogs

"replace_phxverify_bankid_attrib" with the attribute used for Swedish BankID in the LDAP directory, example "employeeID"

"replace_gw_id" with the Scenario ID for the Message Gateway

"replace_phxverify_bankid_keystore" with the Swedish BankID keystore ID, example "22962990-a11a-4f3e-b6b4-2554b9b9072e"



Step 4 - SAML 2 Identity providers

Add the following configuration to “SAML 2 Identity providers”

	{
		"id" : "9602d813-76c5-4ab7-b1f8-4ff51b40c3ff",
		"name" : "SAML IDP",
		"description" : "PHXVerifyIdP",
		"keystore" : "replace_keystore_id",
		"entityID" : "https://"replace_phxverify_idp"/phxverify/authenticate/phxverifyidp",
		"requireSigned" : "true",
		"postSSOURL" : "https://"replace_phxverify_idp"/phxverify/authenticate/phxverifyidp"
	},
	{
		"id": "1c650882-8e14-4bd6-9f6a-ef3553c5a43c",
		"name": "SAML IDP",
		"description": "PHXVerifySSO",
		"keystore": "replace_keystore_id",
		"entityID": "https://"replace_phxverify_idp"/phxverify/authenticate/phxverifysso",
		"requireSigned": "true",
		"postSSOURL": "https://"replace_phxverify_idp"/phxverifysaml/authenticate/phxverifysso"
	}

Replace the following settings :

"replace_phxverify_idp" with the address to your PhenixID Server and port to use, example "phxverify.phenixid.se:8443"

"replace_keystore_id" with the id for the keystore to use.

Step 5 - SAML 2 Service providers

Add the following configuration to “SAML 2 Service providers”

	{
	"id" : "replace_phxverify_sp",
	"keystoreSign" : "replace_sp_keystore",
	"keystoreEncrypt" : "replace_sp_keystore",
	"entityID" : "replace_phxverify_sp"
	}

Replace the following settings :

"replace_phxverify_sp" with the address to your PhenixID Server and port to use, example "https://phxverify.phenixid.se:8443"

"replace_sp_keystore" with the keystore ID to be used by the Service Provider (SP), example "44962990-a11a-4f3e-b6b4-2554b9b9072f"

Step 6 - Pipe valves

Add the following configuration to “Pipe valves"

	{
		"id" : "a3d20fa0-b556-41aa-985d-aa30d4dc993c",
		"name" : "InputParameterExistValidatorValve",
		"enabled" : "true",
			"config" : {
			"param_name" : "password",
			"skip_if_expr" : "request.authenticatedrequest === 'true'"
			}
	},
	{
		"id" : "1073e906-05ec-48ea-8888-1cde79e40219",
		"name" : "LDAPSearchValve",
		"enabled" : "true",
		"config" : {
			"connection_ref" : "replace_ldap_id",
			"base_dn" : "replace_ldap_base_dn",
			"scope" : "SUB",
			"size_limit" : "0",
			"_filter_template" : "replace_phxverify_user_attrib={{request.username}}",
			"filter_template": "(&(replace_phxverify_user_attrib={{request.username}})(replace_phxverify_group_member))",
			"guide_ref" : "4a3714f3-99dd-49fe-8154-8beded40d0d0"
			}
	},
	{
		"id" : "28309e6a-b1cb-479e-8432-fb7e9ec28771",
		"name" : "LDAPBindValve",
		"enabled" : "true",
		"config" : {
			"connection_ref" : "replace_ldap_id",
			"password_param_name" : "password",
			"lockout_enabled" : "false",
			"lockout_login_attempts" : "3",
			"lockout_login_window" : "30",
			"lockout_time" : "60",
			"guide_ref" : "4a3714f3-99dd-49fe-8154-8beded40d0d0"
			}
	},
	{
		"id" : "cf0cbbde-597f-4ecd-85e3-72a46903d727",
		"name" : "AssertionProvider",
		"enabled" : "true",
		"config" : {
			"targetEntityID" : "9602d813-76c5-4ab7-b1f8-4ff51b40c3ff",
			"sourceID" : "replace_phxverify_sp",
			"nameIDAttribute" : "replace_phxverify_user_attrib",
			"guide_ref" : "4a3714f3-99dd-49fe-8154-8beded40d0d0"
			}
	},
	{
		"id": "a6920bf0-b1a3-473e-b669-20cbedf2e8af",
		"name": "FlowFailValve",
		"enabled": "true",
		"config": {
			"skip_if_expr": "request.get('authenticatedrequest').equals('true')",
			"proceed_on_error": "false",
			"message": "common.messages.failure"
		},
		"pipe_ref": "951af7c4-0772-4030-b90a-c3f53c3332fb"
	},
	{
		"id": "878b91e8-a4c0-42ef-b963-9fd0c437b0e0",
		"name": "LDAPSearchValve",
		"enabled": "true",
		"config": {
			"connection_ref": "replace_ldap_id",
			"base_dn": "replace_ldap_base_dn",
			"scope": "SUB",
			"size_limit": "0",
			"filter_template": "replace_phxverify_user_attrib={{request.username}}",
			"guide_ref": "4cd62bf9-a01d-4a3d-aa55-2dda957e26cc"
		}
	},
	{
		"id": "phxverifyadm1",
		"name": "SessionLoadValve",
		"config": {
			"id": "{{request.session_id}}"
		}
	},
	{
		"id": "phxverifyadm2",
			"name": "SessionPropertyAddValve",
			"config": {
				"name": "adminuser",
				"value": "{{item.givenName}} {{item.sn}}"
		}
	},
	{
			"id": "phxverifyadm3",
			"name": "SessionPersistValve",
			"config": {}
	},
	{
		"id": "88a8b3be-2e54-4294-92ad-8ba88c40e427",
		"name": "AssertionProvider",
		"enabled": "true",
		"config": {
			"targetEntityID": "9602d813-76c5-4ab7-b1f8-4ff51b40c3ff",
			"sourceID": "replace_phxverify_sp",
			"nameIDAttribute": "replace_phxverify_user_attrib",
			"guide_ref": "4cd62bf9-a01d-4a3d-aa55-2dda957e26cc"
		}
	}

Replace the following settings :

"replace_ldap_id" with your LDAP connection id, example “731c93fb-f123-403a-9b4f-45720eeed474”

"replace_ldap_base_dn" with your “base_dn”, example “DC=phenixid,DC=local”

"replace_phxverify_user_attrib" with either "sAMAccountName" if you have Active Directory or "uid" for other LDAP catalogs

"replace_phxverify_group_member" with the security group used to control who can use this service, example "memberOf=CN=PhenixID-PhxVerifyAdmin,OU=Groups,DC=phenixid,DC=se"

"replace_phxverify_sp" with the address to your PhenixID Server and port to use, example "https://phxverify.phenixid.se:8443"