Configuring Single Sign-On


Table of Contents
Single Sign-On Configuration Overview
SSO Configuration Details

Single Sign-On Configuration Overview

OpenID Connect is an authentication protocol based on the OAuth 2.0 family of specifications. AMS supports OpenID Connect to authenticate AMS users without having to own and manage password files.

With Single Sign-On enabled through the AMS.conf file, users can sign into the AMS web client through a supported OpenID Connect provider. Single Sign-On creates an identity binding between the AMS user account and the OpenID Connect provider account. The binding between AMS user and the provider ID is mapped to a table in AMS.

AMS supports the following OpenID Connect providers:

  • Auth0

  • Google

  • Ping Federate

For single sign-on to AMS to succeed, AMS requires a client ID and a client secret be obtained from the OpenID Connect provider and be configured in the AMS configuration file.

The default password is null for auto-created SSO users, which means the user cannot sign in locally until a non-null password is set through the management page.

Configuration Scenarios

When a user first tries to log into the AMS through an SSO provider (for example, Google), the default AMS behavior is to automatically create an AMS account with the user's email for an account name. Behind the scenes, the AMS maintains a mapping of the identity Google provided to the AMS account record.

Consider the following scenarios, for two configured users.

For the default behavior, if user A and B both sign into AMS through Google, there will be two AMS accounts and two mapping records:

  • Google-provided identity for user A > mapping record for user A > AMS account userA@example.com

  • Google-provided identity for user B > mapping record for user B > AMS account userB@example.com

For the non-default behavior (where the bindAction property in the AMS.conf file is set to SIGN_IN or SIGN_IN_OR_SIGN_UP), it is possible to have two Google identities map to the same AMS account:

  • Google-provided identity for user A > mapping record for user A > AMS admin account (or any other AMS account user A signed into on the first login through Google)

  • Google-provided identity for user B > mapping record for user B > AMS admin account (or any other AMS account user B signed into on the first login through Google)

In this scenario, a sign-in by user A would bounce user B, and vice-versa, since the two Google identities point to the same AMS account.

SSO Configuration Details

You configure the OpenIDConnectAuthenticationRealm root object in the AMS.conf file to set up the AMS side of the single sign-on binding, including:

  • Name, issuer, ID, and secret of one or more identity providers

  • What to do with users who authenticate against an OpenID Connect provider but do not have an AMS profile: auto-create the user or send the user to a sign-up and sign-in form.

  • OpenID Connect claim (email, name, family_name) used in identifying users.

  • Initial state of auto-created users: enabled or disabled.

  • Roles to assign to auto-created users.

  • Email domains to allow for auto-created users.

  • General-purpose filter for performing arbitrary checks before auto-creating users.

Additionally, you must enter a fully qualified domain name when configuring AMS for OpenID Connect. This enables the URL you use to log in from your browser to AMS to carry forward to the provider (Google, for example), which in turn is used when it redirects your browser back to the AMS server.

The following is a section of the AMS.conf configuration file that defines how to use OpenID Connect for Single Sign-on. For more information regarding supported properties, see AMS Configuration Properties in-Depth.

OpenIDConnectAuthenticationRealm {

        // Properties that control how identities are bound to AMS profiles after 
        // authenticating with an identity provider if no matching AMS profile is found.
        
        IdentityToAMSProfileBinding = {

        // Configure the action(s) to take when no binding exists between an 
        // identity and an AMS profile. Valid values are:
        // FAIL - Fails the login request.
        // AUTO_CREATE - Creates a new AMS profile using the configured OpenID 
        // Connect claim as the username.
        // SIGN_IN - Presents a login form to the user, who enters the credentials 
        // of an existing AMS profile, creating the binding between the identity 
        // and profile.
        // SIGN_IN_OR_SIGN_UP - Presents a login form to the user, who enters the 
        // credentials of an existing AMS profile or requests the creation of a new profile.

        bindAction = "AUTO_CREATE"

        // The OpenID Connect claim used for the username of auto-created AMS profiles. 
        // Valid values include: email, name, family_name

        autoCreateUsernameClaim = "email"

        // Determines whether auto-created users, or users created through the sign-up form, 
        // are initially enabled
        autoCreateUserEnabled = "false"

        // A comma-delimited list of roles to assign to auto-created users
        autoCreateDefaultRoles = ""

        // Zero or more filters to apply to auto-create AMS profile requests. A filter 
        // contains the name of a fully-qualified Java path that conforms to the 
        // com.tibco.ep.ams.auth. AMSAutoCreateFilter interface along with zero or more 
        // parameters associated with each filter. In the example below, a is used to 
        // restrict the creation of AMS profiles to users within a specific email domain. 
        // For an auto-create request to succeed, it must pass all the configured filters.
            autoCreateFilters = [
                {
                    javaClass = "com.tibco.ep.ams.auth.AMSAutoCreateEmailFilter"
                    params = [

                        // Comma-delimited list of acceptable email domains
                        {
                            name = "domains"
                            value = "example.com"
                        }
                    ]
                }
            ]
        }

        // Configuration for authentication against one or more OpenID Connect identity 
        // providers
        IdentityProviders = {

            providers = [
                {
                    name = "Example1"
                    issuer = "https://accounts.example.com"
                    clientId = "SomeExample"
                    clientSecret = "abc123"
                }
            ]
        }
    }