Perforce Integration with AuthPoint

Deployment Overview

This document describes how to set up multi-factor authentication (MFA) for Perforce with AuthPoint as an identity provider. Perforce must already be configured and deployed before you set up MFA with AuthPoint.

Perforce can be configured to support MFA in several modes. For this integration, we set up SAML with AuthPoint.

This integration was tested with Helix Core server (P4D) 2021.1 v2126753 on CentOS 7.

Perforce Authentication Data Flow with AuthPoint

AuthPoint communicates with various cloud-based services and service providers with the SAML protocol. This diagram shows the data flow of an MFA transaction for Perforce.

Diagram that shows the data flow of an MFA transaction for a SAML resource with the push authentication method.

Before You Begin

Before you begin these procedures, make sure that:

Configure Perforce

To start, you must download the metadata file from the Certificate Management page in the AuthPoint management UI. After you have that, you can configure Perforce.

  1. Log in to WatchGuard Cloud.
  2. From the navigation menu, select Configure > AuthPoint. If you have a Service Provider account, you must select an account from Account Manager.
  3. Select Resources.
  4. Click Certificate.

  1. Next to AuthPoint certificate you will associate with your resource, click and select Download Metadata. We recommend that you choose the certificate with the latest expiration date.

    The AuthPoint metadata provides your resource, in this case Perforce, with information necessary to identify AuthPoint as a trusted identity provider.

  1. On your Perforce server (a server where you have already added a Perforce package key and Perforce repository), run this command to install the Helix Authentication Service:
    sudo yum install helix-auth-svc
  2. Run this command to install the Git tool used to get the Helix Authentication Extension:
    yum install git
  3. Navigate to where you want to save the Helix Authentication Extension.
  4. Run this command to get the Helix-Authentication-Extension (HAE):
    git clone https://github.com/perforce/helix-authentication-extension.git
  5. We recommend that you replace the certificates in folders because the current certificates are for examples. You must also assign new certificates by your CA (if you use private CA) or a trusted public CA (if you do not have private CA). In our example, we have a private CA on a Linux server, so we use self-signed certificates to replace the certificates in our folders.
  6. Copy your ca.crt and ca.key file to a new folder where you will generate all of the certificates. Navigate to the folder.
  7. Run this command to get the HAE client.key and client.csr files:
    openssl req -newkey rsa:4096 -keyout client.key -out client.csr -nodes -days 365 -subj "/CN=LoginExtension"
  8. Run this command to generate client.crt:
    openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -out client.crt -set_serial 01 -days 365
  9. Run this command to get HAS server.key and server.csr:
    openssl req -newkey rsa:4096 -keyout server.key -out server.csr -nodes -days 365 -subj "/CN=AuthService"
  10. Run this command to generate server.crt:
    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -out server.crt -set_serial 01 -days 365
  11. Delete the client.csr and server.csr files.
  12. Run this command to replace the certificates:
    cp ca.* /opt/perforce/helix-auth-svc/certs/
  13. Run this command to replace the server certificates:
    cp server.* /opt/perforce/helix-auth-svc/certs/
  14. Run this command to replace the CA certificates:
    cp ca.crt <your prepared folder path>/helix-authentication-extension/loginhook
  15. Run this command to replace the client certificates:
    cp client.* <your prepared folder path>/helix-authentication-extension/loginhook
  16. To edit the HAS environment file, run sudo vi /opt/perforce/helix-auth-svc/.env.
    1. Comment out the OIDC_CLIENT_ID, OIDC_CLIENT_SECRET_FILE and OIDC_ISSUER_URI lines.
    2. Replace the SAML_IDP_SSO_URL value with the SingleSignOnService Location value from the AuthPoint metadata. This value should be 'https://sp.authpoint.usa.cloud.watchguard.com/saml/<WatchGuard Cloud account ID>/sso/spinit'.
    3. Replace the SAML_IDP_SLO_URL value with the SingleLogoutService Location value from the AuthPoint metadata file. This value should be 'https://sp.authpoint.usa.cloud.watchguard.com/saml/<WatchGuard Cloud account ID>/slo/spinit'.
    4. For the SAML_SP_ENTITY_ID value, type '<your issuer name here>'. When you configure a SAML resource in AuthPoint, this value is the entityID.
    5. Replace the SVC_BASE_URI value with your AuthService URL. This value should be 'https://<perforce server instance name>:3000'.
    6. Comment out the DEFAULT_PROTOCOL line.
    7. (Optional) If you want more details of the authentication, you can enable the log. Remove the comment tags from the LOGGING line, and keep the value as LOGGING='/opt/perforce/helix-auth-svc/logging.config.js'.
    8. Make sure CA_CERT_FILE, SP_CERT_FILE, SP_KEY_FILE lines are not marked with the comment tags.
    9. Save and quit.
  17. Run this command to reload the file and put your changes into effect:
    sudo systemctl stop helix-auth and sudo systemctl start helix-auth.

    To avoid problems from reloading the file, do not use restart command.

  18. Run this command to allow unsigned loginhooks:
    p4 configure set server.extensions.allow.unsigned=1
  19. Go to the HAE folder and run this command to get a zip file named loginhook.p4-extension:
    p4 extension --package loginhook
  20. Run this command:
    p4 extension --install loginhook.p4-extension -y
  21. You must configure a global configuration for your extension. Run p4 extension --configure Auth::loginhook.
    1. Change the ExtP4USER value to super.
    2. Set the Auth-Protocol value to be saml. This value does not need quotes.
    3. Set the Service-URL value to be https://<your AuthService URL>/.
    4. Save and quit.
  22. You must configure a single instance for your environment. Run p4 extension --configure Auth::loginhook --name <your instance name>.
    1. In the ExtConfig section, set enbale-logging to be true in case you need to troubleshoot an issue.
    2. Set the name-identifier value to be nameID.
    3. Delete the description for non-sso-groups and add your own group, which bypasses the SSO authentication.
    4. Set the non-sso-users value to be super. You can also add other users here.
    5. Set the user-identifier value to be email.
    6. Save and quit.
  23. Run this command to restart the service:
    p4 admin restart
  24. If you use private CA certificate, you must trust your CA certificate on every client that will run P4V to connect to P4 server.

Configure AuthPoint

Before AuthPoint can receive authentication requests from Perforce, you must add a SAML resource in AuthPoint. You must also create an authentication policy for the Perforce resource to determine which users can authenticate and log in to Perforce and which authentication methods they can use (Push, QR code, and OTP).

Add a SAML Resource in AuthPoint

From the AuthPoint management UI:

  1. From the navigation menu, select Resources.
  2. From the Choose a Resource Type drop-down list, select SAML. Click Add Resource.

  1. Type a name for this resource. In our example, we type Perforce.
  2. From the Application Type drop-down list, select Perforce.
  3. In the Service Provider Entity ID text box, type your Perforce issuer name. This should be the same value from the previous section.
  4. In the Assertion Consumer Service text box, type https://<your Perforce AuthService URL>/saml/sso.
  5. From the AuthPoint Certificate drop-down list, select the certificate to associate with your resource. This must be the same certificate that you downloaded the metadata for in the previous section.
  6. Click Save.

Add a Group in AuthPoint

You must have at least one user group in AuthPoint to configure MFA. If you already have a group, you do not have to add another group.

To add a group to AuthPoint:

  1. From the navigation menu, select Groups.
  2. Click Add Group.
    The New Group page appears.

Screenshot that shows the Groups page.

  1. In the Name text box, type a descriptive name for the group.
  2. (Optional) In the Description text box, type a description of the group.

Screen shot of the New Group page.

  1. Click Save.
    Your group is listed on the Groups page.

Screenshot of the Save button on the New Group page.

Add an Authentication Policy to AuthPoint

Authentication policies specify which resources users can authenticate to and which authentication methods they can use (Push, QR code, and OTP).

You must have at least one authentication policy in AuthPoint that includes the Perforce resource. If you already have authentication policies, you do not have to create a new authentication policy. You can add this resource to your existing authentication policies.

Users that do not have an authentication policy for a specific resource cannot authenticate to log in to that resource.

To configure an authentication policy:

  1. From the navigation menu, select Authentication Policies.
  2. Click Add Policy.

Screenshot of the Add Policy button on the Authentication Policies page.

  1. Type a name for this policy.
  2. From the Select the authentication options drop-down list, select Authentication options and select which authentication options users can choose from when they authenticate.

    For SAML resources, if you select more than one authentication option, users must select one of the available options when they authenticate. For example, if you select OTP and Push, users can choose to type their OTP or approve a push to authenticate. You cannot require that they do both.

  1. Select which groups this policy applies to. You can select more than one group. To configure this policy to apply to all groups, select All Groups.
  2. Select the resource that you created in the previous section. If you want this policy to apply to additional resources, select each resource this policy applies to. To configure this policy to apply to all resources, select All Resources.

Screenshot of the Add Policy page with the groups and resources selected

  1. (Optional) If you have configured policy objects such as a Network Location, select which policy objects apply to this policy. When you add a policy object to a policy, the policy only applies to user authentications that match the conditions of the policy objects. For example, if you add a Network Location to a policy, the policy only applies to user authentications that come from that Network Location. Users who only have a policy that includes a Network Location do not get access to the resource when they authenticate outside of that Network Location (because they do not have a policy that applies, not because authentication is denied).

    If you configure policy objects, we recommend that you create a second policy for the same groups and resources without the policy objects. The policy with the policy objects should have a higher priority.

Screenshot of the Policy Objects drop-down list.

  1. Click Save.
    Your policy is created and added to the end of the policy list.

    When you create a new policy, we recommend that you review the order of your policies. AuthPoint always adds new policies to the end of the policy list.

Screenshot of the Save button on the Add Policy page.

Add Users to AuthPoint

Before you assign users to a group, you must add the users to AuthPoint. There are two ways to add AuthPoint user accounts:

  • Sync users from an external user database
  • Add local AuthPoint users

Each user must be a member of a group. You must add at least one group before you can add users to AuthPoint.

Test the Integration

To test AuthPoint MFA with Perforce, you can authenticate with a mobile token on your mobile device. For SAML resources, you can choose any method (push, QR code, or one-time password).

In this example, we show the push authentication method (users receive a push notification in the mobile app that they must approve to authenticate).

  1. Open your P4V client.
  2. Type your server address and user name. Click OK.
    A new window appears and redirects you to AuthPoint authentication page.
  3. Type your user name and password.
  4. For the authentication method, select Push.
  5. Click Send.
  6. Approve the authentication request that is sent to your mobile device.
    You are logged in to Perforce.