Table of Contents

Freja eID enrollment - Self service

Warning

Please note, this document is using the legacy authenticators - in order to use the new protocol agnostic authenticators, you need to apply relevant modifications to the configuration examples outlined in this article.

This guide will give you a rough instruction on how to configure the Freja eID enrollment.

The usecase is when a user will perform a self service enrollment.

Add FrejaEIDSAML

Create an FrejaEIDSAML authenticator to be used for protection of the enrollment application.

Configuration

Download and zip the templates from this zip-file and place them in PAS-FOLDER\overlay\auth-http\files\templates\Freja-enrollment

The alias of the authenticator has to be called "frejaeidpersonal" in order to be able to follow this instruction.

Start by following these instructions.

Configure the keystoreId with a reference to YOUR Freja Keystore.

Configure the loginTemplate parameter with a reference to the login template.

Configure the mode parameter with production_personal

Configure the attributesToGet paremeter with EMAIL_ADDRESS,SSN,BASIC_USER_INFO

Example:

{
        "id": "6491086b-4a36-4803-9a71-887c70d32547",
        "alias": "frejaeidpersonal",
        "name": "FrejaEIDSAML",
        "displayName": "Freja eID personal",
        "configuration": {
            "pipeID": "ccb06eb0-464a-4bef-95a1-1ee4ce586383",
            "idpID": "2a3f19f1-2c0d-45b8-a254-54d1cba107dd",
            "keystoreId": "Replace-Value-with-ID-of-Freja-Keystore",
            "loginTemplate": "C:\\Program Files\\PhenixID\\Server\\overlay\\auth-http\\files\\templates\\Freja-enrollment\\frejaeid_v2-enrollment.template",
            "mode": "production_personal",
            "attributesToGet": "EMAIL_ADDRESS,SSN,BASIC_USER_INFO"
        },
        "created": "2022-05-03T06:43:08.137Z"
}

Configure execution flow

The SAML-assertion created by the flow have to use uid as NameID and these additional attributes: adminuser,sn,mail,givenname,pnr,uid

Please look at the following screenshots for an example configuration:

NA

NA

NA

NA

Enrollment App

Add the block below to the Auhentication - HTTP bucket.

Replace these strings before commiting:

Value to replace Comment
Replace-Value-with-DNS-For-Your-Server
The DNS-name of your server, ex: pas.company.org
{
    "alias": "frejaenroll",
    "name": "Registration",
    "id": "frejaenroll",
    "configuration": {
        "stages": [
            {
                "pipeid": "FrejaOrgIdEnroll",
                "template": "C:\\Program Files\\PhenixID\\Server\\overlay\\auth-http\\files\\templates\\Freja-enrollment\\freja-enroll",
                "sessionValues": [
                    "givenname",
                    "sn",
                    "mobile",
                    "username",
                    "mail",
                    "roles",
                    "adminuser",
                    "pnrsub",
                    "pnr",
                    "uid"
                ],
                "translation": [
                    "phxverify.messages.information.title",
                    "phxverify.messages.information.searchuser",
                    "phxverify.messages.username",
                    "phxverify.messages.querybox",
                    "phxverify.messages.or",
                    "phxverify.messages.logout",
                    "phxverify.messages.information.title",
                    "phxverify.messages.givenname",
                    "phxverify.messages.snname",
                    "phxverify.messages.mobile",
                    "phxverify.messages.mail",
                    "phxverify.messages.information.choose_method",
                    "phxverify.messages.cancel",
                    "phxverify.messages.bid"
                ],
                "templateVariables": {
                    "searchmethods": [
                        {
                            "type": "username",
                            "title": "phxverify.messages.username"
                        },
                        {
                            "type": "mail",
                            "title": "phxverify.messages.mail"
                        },
                        {
                            "type": "mobile",
                            "title": "phxverify.messages.mobile"
                        }
                    ],
                    "settings": {
                        "sp_url": "/frejaenroll/authenticate/frejaenrollsp/"
                    }
                },
                "errorTranslation": []
            },
            {
                "pipeid": "phxverify-complete",
                "template": "C:\\Program Files\\PhenixID\\Server\\overlay\\auth-http\\files\\templates\\Freja-enrollment\\freja-enroll-complete",
                "templateVariables": {
                    "useBid": ""
                },
                "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": [
                    "givenname",
                    "sn",
                    "mobile",
                    "username",
                    "mail",
                    "roles",
                    "adminuser",
                    "pnrsub",
                    "pnr",
                    "uid"
                ],
                "errorTranslation": []
            }
        ]
    }
},
{
    "id": "frejaenrollsp",
    "alias": "frejaenrollsp",
    "name": "SAMLServiceProviderAuthN",
    "displayName": "frejaenrollsp IdP",
    "configuration": {
        "successURL": "/frejaenroll/authenticate/frejaenroll/",
        "sp": "https://Replace-Value-with-DNS-For-Your-Server/frejaenroll",
        "pipeID": "FrejaEnrollSPPipe",
        "targetIDP": "https://Replace-Value-with-DNS-For-Your-Server/saml/authenticate/frejaeidpersonal",
        "acsUrl": "https://Replace-Value-with-DNS-For-Your-Server/frejaenroll/authenticate/frejaenrollsp",
        "entityID": "https://Replace-Value-with-DNS-For-Your-Server/frejaenroll"
    }
},

SAML SP

Add the block below to the SAML 2 Service provides bucket.

Replace these strings before commiting:

Value to replace Comment
Replace-Value-with-DNS-For-Your-Server
The DNS-name of your server, ex: pas.company.org
Replace-Value-with-ID-of-SAML-Signing-Keystore
The ID of the keystore used to sign SAML-tokens
{
    "id": "https://Replace-Value-with-DNS-For-Your-Server/frejaenroll",
    "keystoreSign": "Replace-Value-with-ID-of-SAML-Signing-Keystore",
    "keystoreEncrypt": "Replace-Value-with-ID-of-SAML-Signing-Keystore",
    "entityID": "https://Replace-Value-with-DNS-For-Your-Server/frejaenroll"
}

Pipes

Add the block below to the Pipes bucket.

Replace these strings before commiting:

Value to replace Comment
Replace-Value-With-Organizaion-Name
Your organization name. This value will be displayed for the user when authenticating, ex Our Company.
Replace-With-Friendly-Name-Of-UserID
The friendly name of the userid. This value will be displayed for the user when authenticating, ex: AnvändarID.
Replace-Value-with-ID-of-Freja-Keystore
The id of the keystore previously uploaded to PAS for communication with Freja Backend
{
    "id": "FrejaOrgIdEnroll",
    "valves": [
        {
            "name": "SessionLoadValve",
            "config": {
                "id": "{{request.session_id}}"
            }
        },
        {
            "name": "ItemCreateValve",
            "config": {
                "dest_id": "user"
            }
        },
        {
            "name": "PropertyAddValve",
            "config": {
                "name": "userInfo",
                "value": "{\"country\":\"SE\",\"ssn\":\"{{session.pnr}}\"}",
                "splitter": "@"
            }
        },
        {
            "name": "PropertyStringBase64EncoderValve",
            "config": {
                "source": "userInfo",
                "dest": "userInfob64"
            }
        },
        {
            "name": "PropertyAddValve",
            "config": {
                "name": "initAddOrganisationIdRequest",
                "value": "{ \"userInfoType\": \"SSN\", \"userInfo\": \"{{item.userInfob64}}\", \"organisationId\": { \"title\": \"Replace-Value-With-Organizaion-Name\", \"identifierName\": \"Replace-With-Friendly-Name-Of-UserID\", \"identifier\": \"{{session.uid}}\" } }",
                "splitter": "@"
            }
        },
        {
            "name": "PropertyStringBase64EncoderValve",
            "config": {
                "source": "initAddOrganisationIdRequest",
                "dest": "initAddOrganisationIdRequestb64"
            }
        },
        {
            "name": "PropertyAddValve",
            "config": {
                "name": "body",
                "value": "initAddOrganisationIdRequest={{item.initAddOrganisationIdRequestb64}}",
                "splitter": "@"
            }
        },
        {
            "name": "HttpPostRequestValve",
            "config": {
                "url": "https://services.prod.frejaeid.com/organisation/management/orgId/1.0/initAdd",
                "body": "{{item.body}}",
                "http_crypto_protocol": "TLS",
                "trust_all_certs": "true",
                "keystore": "Replace-Value-with-ID-of-Freja-Keystore"
            }
        }
    ]
},
{
    "id": "FrejaEnrollSPPipe",
    "valves": [
        {
            "name": "AssertionConsumer",
            "config": {}
        },
        {
            "name": "FlowFailValve",
            "config": {
                "message": "User does not exist",
                "exec_if_expr": "flow.items().isEmpty()"
            }
        }
    ]
}