Skip to main content

Auth0

This page documents configuring an Auth0 Web Application and Machine to Machine Application for Pomerium to read user data. It assumes you have already installed Pomerium.

caution

While we do our best to keep our documentation up to date, changes to third-party systems are outside our control. Refer to Applications in Auth0 from Auth0's docs as needed, or let us know if we need to re-visit this page.

Log in to your Auth0 account and head to your dashboard. Select Applications → Applications on the left menu. On the Applications page, click the Create Application button to create a new app.

Auth0 Applications Dashboard

Create Regular Web Application

  1. On the Create New Application page, name your application and select the Regular Web Application for your application. This is the application that your users will login to.

    Auth0 Create Application Select Platform

  2. Under the Settings tab, note the Domain, Client ID, and Client Secret values. We'll provide these to Pomerium at the end of the process.

  3. Provide the following information for your application settings:

    FieldDescription
    NameThe name of your application.
    Application Login URIAuthenticate Service URL (e.g. https://${authenticate_service_url})
    Allowed Callback URLsRedirect URL (e.g. https://${authenticate_service_url}/oauth2/callback).
  4. Under Advanced SettingsOAuth, confirm that JSON Web Token (JWT) Signature Algorithm is set to "RS256".

  5. Click Save Changes at the bottom of the page when you're done.

Configure Pomerium

You can now configure Pomerium with the identity provider settings retrieved in the previous steps. Your config.yaml keys or environmental variables should look something like this.

idp_provider: 'auth0'
idp_provider_url: 'https://awesome-company.auth0.com'
idp_client_id: 'REPLACE_ME' # from the web application
idp_client_secret: 'REPLACE_ME' # from the web application
tip

Remember to prepend the provider URL from Auth0 with https://.

Groups

Custom Claim

To authorize users based on their group membership (roles in Auth0), a claim can be added to the identity and access tokens with a login action.

  1. Create an action named add groups with the following code:

    exports.onExecutePostLogin = async (event, api) => {
    if (event.authorization) {
    api.idToken.setCustomClaim(
    'pomerium.io/groups',
    event.authorization.roles,
    );
    api.accessToken.setCustomClaim(
    'pomerium.io/groups',
    event.authorization.roles,
    );
    }
    };
  2. Deploy the action:

    Auth0 Create Login Action

  3. Add it to the login flow:

    Auth0 Create Login Flow

Now when users login they will have a claim named pomerium.io/groups that contains their groups (Auth0 roles) and the claim PPL criterion can be used for authorization:

routes:
- from: 'https://verify.localhost.pomerium.io'
to: 'https://verify.pomerium.com'
policy:
- allow:
and:
- claim/pomerium.io/groups: admin