STEP Authentication Guide
STEP Authentication Guide
Version 1.0.0
Table of Contents
Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
LDAP integration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Basic usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Group synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Attributes Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Example for setting up SSO, STEP application server and LDAP servers . . . . . . . . . . . . . . . . . . . . . . . . . 22
Trusted Headers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
OAuth Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
IMPORTANT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
SAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Usage flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
User synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Logout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Example settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Workbench SSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Smartsheet SSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
HTTP-Based APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Tool access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Test configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Test Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Limitations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
User Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Caveats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Basic properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Single-Sign-On properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
This document describes how Step functionality for LDAP integration (authentication and user
synchronization) and the Single Sign On solutions supported by Step work, and how they can be
configured.
LDAP integration
Basic usage
STEP offers the option to validate passwords in one or more LDAP repositories like Microsoft Active
Directory, for example. This means that users can use the same password for STEP as they use for logging
on to their computer and in other applications.
Once the connection to an LDAP server has been set up and configured in STEP, the users must use the
user name and password registered in the LDAP server when logging on to STEP. Users must still be
created as users in STEP and placed in STEP user groups before they can log on. If preferred, users can be
created automatically based on synchronization of group associations, as described below. It is not
sufficient to have users in the LDAP repository since that would not provide any information about STEP
user groups or privileges.
When using STEP LDAP, access to password maintenance must take place in the LDAP repository,
according to the rules set up there.
When authenticating a user, STEP will first search for the user ID provided at login. If the user is found,
STEP will retrieve the user distinguished name (UDN) and use this in order to perform authentication.
If multiple users are found by the search, STEP will throw an exception and forbid connection. If no users
are found by the search, STEP will throw an exception and forbid connection. The query used for this
search is configurable, so it can be written to only return users that are not disabled.
The diagram below illustrates the sequence flow in a use case scenario for authentication and user
synchronization, which involves two LDAP servers configured, with multiple search queries for the first
server.
Once the user has been found in LDAP and authentication was successful, STEP will attempt to
synchronize the user’s group memberships and attributes.
After successfully authenticating the user, STEP will attempt to perform group synchronization.
If group synchronization is enabled, then the user’s STEP group memberships are synchronized to the
LDAP group memberships. If the user doesn’t exist in STEP, he/she will be created as part of the
synchronization process.
If group synchronization is disabled, the user must have already been created in STEP in
NOTE
order to log in. Otherwise, the user’s login will be rejected.
Once the user is found and authenticated, the user’s LDAP group memberships are determined. If the
user is not a member of any LDAP groups, the user’s login attempt is rejected.
The next step is to lookup all STEP groups. For each STEP group that has a value in the LDAP
Synchronization ID attribute, the value of LDAP Synchronization ID is matched against the list of LDAP
groups. If a match is found, the user will be created in this STEP group if not already there. If no match is
found, the user is removed from that STEP group.
If the group that the user belongs to in LDAP has no mapping in STEP (there are no STEP groups with that
synchronization ID), the login attempt is rejected unless one or more ‘default groups’ are setup for LDAP
synchronization. A default group is just a user group that is marked as “Default LDAP group”. If such
groups are configured, then the users that cannot be placed in any other groups will be added to the
default groups and will get the privileges set up for those groups.
Group attribute "Default LDAP group" - groups that will be used as default synchronization groups, i.e.
if a user is attempting to login with valid credentials, but the groups he belongs to are not mapped in
STEP, he will then be added to the default groups.
Attributes Synchronization
Step has the capability of synchronizing a user’s STEP attributes from his/her attributes in LDAP. In order
to enable this functionality, the attributes that should be synchronized have to be configured in the
LDAP.Resource.n.Synchronize.Attributes property.
E.g.: LDAP.Resource.n.Synchronize.Attributes=%email=mail,?common_name=cn
In the above example, the key (%email) is the Step attribute ID and the second value (mail) is the name of
the LDAP attribute where the value should be taken from. Using this configuration, STEP will synchronize
the user’s email in STEP with the value in LDAP.
“common_name” is marked with a question mark, meaning that STEP will only synchronize it if the STEP
user object has the “common_name” STEP attribute.
The synchronization solution does not take privileges into account. Even though the company’s LDAP may
be set up to handle a set of privileges, synchronization of group membership ONLY considers group
names. If additional privileges need to be added to a STEP group, this must be done manually. This
solution is a one-time synchronization on login from a STEP Web Ui application or STEP Workbench.
The LDAP user synchronization is only supported through STEP Workbench and STEP Web Ui.
Authentication on the LDAP server may be configured to take place using the following mechanisms
supported by the Simple Authentication and Security Layer (SASL) Internet standard (RFC 2222): .
GSSAPI/Kerberos v5 (also requires access from the application server to a Kerberos Key Distribution
Center) . LDAP over SSL (Secure Socket Layer [TLS/SSL] using x.509 type certificates). . Plain LDAP (not
recommended - for testing only)
The system uses JAAS (Java™ Authentication and Authorization Service) to authenticate a principal to
Kerberos and obtain credentials (a trusted ticket) that proves the user’s identity. This ticket is used with
GSS-API (Generic Security Service API) to establish a secure context to the LDAP server.
Regardless if the user is known in STEP, the user ID and password from the login dialog is used for
authentication against Kerberos and LDAP.
Kerberos configuration - if the customer has used LDAP Authentication before, two necessary
configuration files step-jaas.conf and krb5.conf must be in place:
1. step-jaas.conf: This file specifies which Kerberos plugin to use. Normally, it would be
com.sun.security.auth.module.Krb5LoginModule, but on IBM Websphere systems, it should point out
com.ibm.security.auth.module.Krb5LoginModule. The entries “spnego-client” and “spnego-server” are
used by the STEP standard web ui Single-Sign-On (SSO) solution. If SSO is enabled, this file would
The preferred location for these files is: /workarea/ldap. An example for these files can be
NOTE
found in the Configuration examples section.
STEP must be configured with information about the LDAP server’s certificate in order to establish secure
transport ("LDAPS"). It is the customer’s responsibility to provide a certificate for the LDAP server and to
provide a keystore/truststore to install on the STEP server. Typically, a client-truststore file will be
generated and put on the file system, reachable from the STEP application.
When using Secure Socket Layer for communication, an X.509 compliant certificate must be provided
from the LDAP server and included in the STEP server’s truststore.
The configuration names that STEP should use have to be configured in the property
LDAP.ResourceNames.
STEP will only read the configurations for the resources mentioned in that property (server1 and server2
for example), even though the configuration file contains configurations for more than those two
resources. This makes it easy to enable or disable an LDAP configuration – just remove its name from that
list. The rest of the configuration for that resource can be left in the configuration file without affecting
anything since it will not be read by STEP.
When STEP is searching for a user, it will iterate through the resources (in the order mentioned in the
LDAP.ResourceNames) and search in each LDAP server until the user is found. Using the above example,
STEP will try “server1” first and if the user is not found, it will try “server2”. Once the user is found, it is
added to a cache together with a reference to the LDAP server so that, next time STEP needs to perform
an operation for that user (authentication, synchronization), it will connect directly to the LDAP server that
has the user.
When searching, STEP will iterate through the list of queries configured in the
LDAP.Resource.n.QueryNames property (same principle as for the LDAP.ResourceNames). These queries
will be used in the order in which they were configured, and when the user is found, the search is
stopped, even though not all the queries were used. STEP will use only the queries specified in the
QueryNames property. Queries can be left out by removing them from that list. For each search query
that STEP should use, a UserFilter and a UserBaseDN need to be configured. If one of them is missing, or
if no search queries can be used for searching, STEP will throw a configuration error.
E.g.: LDAP.Resource.server1.QueryNames=query1,query2
LDAP.Resource.server1.Query.query1.UserBaseDN=DC=domaintest,DC=corp LDAP.Resource.
server1.Query.query1.UserFilter=(&(sAMAccountName=%u)(userAccountControl=512))
In the above example, query1 will search for the user that has the same sAMAccountName as the login ID
and has a normal account (not expired, not disabled, etc.), and query2 will search for a user that has the
same userPrincipalName as the login ID.
When multiple domains are configured, the login interface will have a dropdown menu allowing the user
to select which domain to be used for the search queries. The user also has the option to enter a domain,
if there is a login pattern that will match the input.
If Step is configured with only one LDAP server configuration and multiple ldap domains
NOTE for that configuration (See example Simple authentication – multiple ldap domains), the
LDAP servers must use a global catalogue, which will be the entry point for STEP.
Example: LDAP.Resource.multi-domains.DomainIDs=D2,ST,test
LDAP.Resource.multi-domains.Domain.D2.Name=domain2,DC=mydomain LDAP.Resource.multi-
domains.Domain.D2.DisplayName=domain2
LDAP.Resource.multi-domains.Domain.ST.Name=steptest
In the above example, there are three domains configured: domain2, steptest and test.
The DomainIDs list contains three IDs: D2, ST and test. These IDs will be used for generating the STEP
user ID, which will have the following format: USER@DOMAINID. Using the above configuration, the users
Using domain IDs when creating the STEP user ID removes the problem caused by very long domain
names. For example, when appended to the user ID, the STEP user ID becomes very long and might
exceed the limit in the database.
When the user logs in to STEP (either workbench or web ui), he/she selects the domain to be used from a
dropdown list, which contains the domain display name. If the domain display name is not configured,
then the list will contain the domain name. If there is no domain name, the list will contain the ID. The list
will also contain an empty line, which can be used when there is no domain to be used for the user (e.g.
step service- or superusers such as stepsys or dba). The above example illustrates all three cases:
The selected domain is used depending on how the search queries have been configured. Below are two
examples of search queries using the domain chosen during login.
Example 1: LDAP.Resource.multi-domains.QueryNames=query1
LDAP.Resource.multi-domains.Query.query1.UserBaseDN=DC=%d,DC=corp LDAP.Resource.multi-
domains.Query.query1.UserFilter=(sAMAccountName=%u)
In this example, the domain is used for the UserBaseDN. %d will be replaced with the name of the
selected domain.
For domain2, the UserBaseDN value will be “DC=domain2,DC= mydomain,DC=corp”. For steptest it will be
“DC=steptest,DC=corp”. For test it will be “DC=test,DC=corp”.
Example 2: In this example, the domain is used in order to construct the user principal name.
LDAP.Resource.multi-domains.DomainIDs=D2,ST,test LDAP.Resource.multi-
domains.Domain.D2.Name=domain2.mydomain.corp LDAP.Resource.multi-
domains.Domain.D2.DisplayName=domain2 LDAP.Resource.multi-
domains.Domain.ST.Name=steptest.corp
LDAP.Resource.multi-domains.QueryNames=query
As mentioned above, STEP can also be configured to allows users to type the domain name manually, as
part of their login username. For this to work, login patterns have to be configured so STEP knows how to
extract the username and the domain from the input provided by the user.
Example: LDAP.Resource.multi-domains.LoginIdPatterns=(?<domain>.?)\\\\(?<user>.?),(?<user>.*?)
This pattern will match the following input: domain\user. If the user inserts a domain, this will be used
instead of the one selected in the dropdown menu.
STEP uses regular expressions with named groups for the login patterns.
The names of the groups are “user” and “domain”. The “user” group is required.
1. (?<domain>.?)\\\\(?<user>.?) This pattern uses both a user and a domain group. Both of these will
accept any character and are separate by a backslash. Note that there’s four backslashes, as the
“backslash” character in properties files and regular expressions is a reserved character that needs to
be “escaped”. This pattern will match any input of type “domain\user” e.g. “steptest\user”. STEP will
extract the domain value and the user id value from the input based on the groups configured. These
values are then used in search queries.
2. (?<user>.*?) This pattern will accept any kind of input from the user, but it will be treated as a user ID.
STEP will not attempt to extract a domain, since this group is not configured.
Global properties
Property Description
LDAP.InitialContextfactory The fully qualified name of the Initial Context factory to use for LDAP
JNDI lookup. Default is "com.sun.jndi.ldap.LdapCtxFactory", which
will be the typical value to use.
LDAP.ResourceNames A comma separated list of strings. It contains the names of the ldap
connections that STEP should use. STEP will connect to the servers in
the order they have been added to this list.
Property Description
LDAP.Preauthentication.UserName Property used with the SPNEGO Kerberos single-sign web ui solution
to specify the Principal used for pre-authentication. Not used at all
for ordinary LDAP operations.
LDAP.Preauthentication.Password Property used with the SPNEGO Kerberos single-sign web ui solution
to specify the Password used for pre-authentication.
In the properties names below, “n” represents the LDAP configuration name, which has to
NOTE
be present in the “LDAP.ResourceNames” list in order to be used.
“m” represents the query name, which needs to be present in the “LDAP.Resource.n.QueryNames” list in
order to be used.
Property Description
LDAP.Resource.n.BindAccount.DN The bind account used when searching after users, user groups,
attributes and changing passwords. It is NOT used for Web UI SSO
authentication mechanisms. The Web UI standard SSO has its own
property LDAP.Preauthentication.UserName which it uses as Bind
account. The format should always be: user@realm for Kerberos,
UDN for simple authentication
LDAP.Resource.n.AuthenticationMechanism Default is "simple", which will typically be used with SSL. Alternatively
use “GSSAPI” (Kerberos).
LDAP.Resource.n.SecurityProtocol The protocol to use for communicating with the LDAP server. Set this
to ssl if you wish to communicate via secure socket layer. Otherwise
leave blank (which is the default).
LDAP.Resource.n.JAASConfigurationEntryName Name of the entry in the JAAS configuration file to use. Typical value
is "STEP".
LDAP.Resource.n.QueryNames A comma separated list of strings. Used for specifying the search
query names. The names will be referenced by the
“LDAP.Resource.n.Query.m” properties.
LDAP.Resource.n.Query.m.UserBaseDN The DN base used for searches specific for user attributes. The value
may contain a “%d” which will be replaced with the domain entered
by users at login time when using multi domains.
LDAP.Resource.n.Query.m.UserFilter The filter to use for looking up a user in LDAP. This filter may contain
the attribute to use for locating a userid. %u (e.g.:
"(sAMAccountName=%u)"). At runtime it will be replaced by
username from login. It may also contain a “%d” which will be
replaced with the domain entered by users during login.
LDAP.Resource.n.DomainIDs A comma separated list of strings. Used for specifying the IDs of the
login domains. If only one domain, leave out (default).
LDAP.Resource.n.Domain.d.Name The name of the domain. “d” represents the ID configured in the
LDAP.Resource.n.Domains. Used to replace “%d” in the search
queries. If blank, it will be replaced by the domain ID.
LDAP.Resource.n.Domain.d.DisplayName The text that will be used in order to display the domain in the GUI.
“d” represents the domain ID configured in
LDAP.Resource.n.Domains. If blank, it will be replaced by the
LDAP.Resource.n.Domain.d.Name
Property Description
LDAP.Resource.n.Synchronize.GroupMembership Set this to true to synchronize the group memberships of the user.
I.e. if the user is member of a LDAP group that is marked in STEP as
LDAP managed, this membership will be inherited in STEP. In fact,
this allows an unknown STEP user to be automatically created in
STEP if he is authorized against LDAP and at least one LDAP group
membership matches a STEP group. Default set to false.
LDAP.Resource.n.Synchronize.GroupMembership.Attribute This is the name of the attribute in LDAP that contains membership.
If this property is blank or doesn’t exist, and group synchronization is
enabled, STEP will throw an error.
LDAP.Resource.n.Synchronize.GroupMembership.Revoke Control whether STEP will remove the users from STEP groups not
contained in the ldap group query. Default set to true, meaning the
group membership in STEP will always mirror the group membership
from LDAP. Please note that if disabled, the group membership from
ldap is not reflected in STEP and this can lead to users having more
privileges than intended!
Property Description
LDAP.Resource.n.AllowChangePassword Set this to true to be able to change passwords in LDAP. For some
ldap servers, it will only work if the security protocol is ssl. Default set
to false.
LDAP.Resource.n.PasswordPolicy.DN The distinguished name for which the password policy is enabled
LDAP.Resource.n.ChangePasswordAttributeName The name of the attribute for the user password in ldap.
LDAP.Resource.n.ServerType The name of the ldap server type (e.g: MicrosoftAD). To be used
when performing server specific operations like getting the
password expiration date. STEP will use this server type ID in order to
determine how to handle the specific operations. Server type IDs
currently supported: MicrosoftAD
LDAP.Resource.n.NotifyDaysBeforeExpire Upon login, the user will be notified about his LDAP password expiry
the specified number of days before. Default set to 10.
LDAP.Resource.simple-auth.BindAccount.Password=password
LDAP.Resource.simple-auth.AuthenticationMechanisms=simple
LDAP.Resource.simple-auth.SecurityProtocol=simple
LDAP.Resource.simple-auth.QueryNames=query1,query2
LDAP.Resource.simple-auth.Query.query1.UserBaseDN=DC=company,DC=com
LDAP.Resource.simple-auth.Query.query1.UserFilter=(&(sAMAccountName=%u)(userAccountControl=512))
LDAP.Resource.simple-auth.Query.query2.UserBaseDN=DC= company-fr,DC=com
LDAP.Resource.simple-auth.Query.query2.UserFilter=(sAMAccountName=%u)
LDAP.Resource.simple-auth.Synchronize.GroupMembership.Attribute=memberOf
LDAP.Resource.simple-auth.Synchronize.GroupMembership=true
LDAP.Resource.simple-auth.Synchronize.Attributes=%email=mail
LDAP.Enabled=true
LDAP.ResourceNames=ssl-auth
LDAP.Timeout=15
LDAP.InitialContextfactory=com.sun.jndi.ldap.LdapCtxFactory
SSL.Truststore=path to truststore
SSL.TruststorePassword=password
LDAP.Resource.ssl-auth.ServerURL=ldaps://ldapserver.company.com:636
LDAP.Resource.ssl-auth.BindAccount.DN= CN=TestUser,CN=Users,DC=company,DC=com
LDAP.Resource.ssl-auth.BindAccount.Password=password
LDAP.Resource.ssl-auth.AuthenticationMechanisms=simple
LDAP.Resource.ssl-auth.SecurityProtocol=ssl
LDAP.Resource.ssl-auth.QueryNames=query1
LDAP.Resource.ssl-auth.Query.query1.UserBaseDN=DC=company,DC=com
LDAP.Resource.ssl-auth.Query.query1.UserFilter=(&(sAMAccountName=%u)(userAccountControl=512))
LDAP.Resource.ssl-auth.Query.query2.UserBaseDN=DC=company-fr,DC=com
LDAP.Resource.ssl-auth.Query.query2.UserFilter=(sAMAccountName=%u)
LDAP.Resource.ssl-auth.AllowChangePassword=true
LDAP.Resource.ssl-auth.PasswordPolicy.DN=DC=company,DC=com
LDAP.Resource.ssl-auth.ChangePasswordAttributeName=unicodePwd
LDAP.Resource.ssl-auth.NotifyDaysBeforeExpire=10
LDAP.Resource.ssl-auth.ServerType=MicrosoftAD
LDAP.Enabled=true
LDAP.ResourceNames=gssapi-auth
LDAP.Timeout=15
LDAP.InitialContextfactory=com.sun.jndi.ldap.LdapCtxFactory
LDAP.KerberosConfigurationFile=../ldap/krb5.conf
LDAP.JAASConfigurationFile=../ldap/step-jaas.conf
LDAP.Resource.gssapi-auth.ServerURL=ldap://ldapserver.company.com:389
LDAP.Resource.gssapi-auth.BindAccount.DN=binduser@company.com
LDAP.Resource.gssapi-auth.BindAccount.Password=password
LDAP.Resource.gssapi-auth.AuthenticationMechanisms=GSSAPI
LDAP.Resource.gssapi-auth.SecurityProtocol=simple
LDAP.Resource.gssapi-auth.JAASConfigurationEntryName=STEP
LDAP.Resource.gssapi-auth.QueryNames=query1
LDAP.Resource.gssapi-auth.Query.query1.UserBaseDN=DC=comapny,DC=com
LDAP.Resource.gssapi-auth.Query.query1.UserFilter=(sAMAccountName=%u)
LDAP.Resource.gssapi-auth.Synchronize.GroupMembership.Attribute=memberOf
LDAP.Resource.gssapi-auth.Synchronize.GroupMembership=true
LDAP.Resource.gssapi-auth.Synchronize.Attributes=%email=mail
#----------------------------------------------------
#LDAP Settings - gssapi-auth configuration
#----------------------------------------------------
LDAP.Resource.gssapi-auth.ServerURL=ldap://ldapserver.company.com:389
LDAP.Resource.gssapi-auth.BindAccount.DN=binduser@company.com
LDAP.Resource.gssapi-auth.BindAccount.Password=password
LDAP.Resource.gssapi-auth.AuthenticationMechanisms=GSSAPI
LDAP.Resource.gssapi-auth.SecurityProtocol=simple
LDAP.Resource.gssapi-auth.JAASConfigurationEntryName=STEP
LDAP.Resource.gssapi-auth.QueryNames=query1
LDAP.Resource.gssapi-auth.Query.query1.UserBaseDN=DC=comapny,DC=com
LDAP.Resource.gssapi-auth.Query.query1.UserFilter=(sAMAccountName=%u)
LDAP.Resource.gssapi-auth.Synchronize.GroupMembership.Attribute=memberOf
LDAP.Resource.gssapi-auth.Synchronize.GroupMembership=true
LDAP.Resource.gssapi-auth.Synchronize.Attributes=%email=mail
#----------------------------------------------------
#LDAP Settings - server2-gssapi configuration
#----------------------------------------------------
LDAP.Resource.server2-gssapi.ServerURL=ldap://ldap-anotherserver.ldaptest.corp:389
LDAP.Resource.server2-gssapi.BindAccount.DN=user@ldaptest.corp
LDAP.Resource.server2-gssapi.BindAccount.Password=mypass
LDAP.Resource.server2-gssapi.AuthenticationMechanisms=GSSAPI
LDAP.Resource.server2-gssapi.SecurityProtocol=simple
LDAP.Resource.server2-gssapi.JAASConfigurationEntryName=GSSApiEntry2
LDAP.Resource.server2-gssapi.QueryNames=findUser
LDAP.Resource.server2-gssapi.Query.findUser.UserBaseDN=DC=steptest,DC=corp
LDAP.Resource.server2-gssapi.Query.findUser.UserFilter=(sAMAccountName=%u)
LDAP.Resource.server2-gssapi.Synchronize.GroupMembership.Attribute=memberOf
LDAP.Resource.server2-gssapi.Synchronize.GroupMembership=true
LDAP.Resource.server2-gssapi.Synchronize.Attributes=%email=mail
krb5.conf file
[realms]
COMPANY.COM = {
kdc = ldapserver.company.com:88
default_domain = COMPANY.COM
}
LDAPTEST.CORP = {
kdc = ldap-anotherserver.ldaptest.corp:88
default_domain = LDAPTEST.CORP
}
[domain_realm]
.company.com = COMPANY.COM
company.com = COMPANY.COM
.ldaptest.corp = LDAPTEST.CORP
ldaptest.corp = LDAPTEST.CORP
[logging]
kdc = FILE:krb5kdc.log
default = FILE:krb5lib.log
LDAP.Resource.tivoli.ServerURL=ldap://tivoli-ldap:389
LDAP.Resource.tivoli.BindAccount.DN=cn=root
LDAP.Resource.tivoli.BindAccount.Password=pass
LDAP.Resource.tivoli.AuthenticationMechanisms=simple
LDAP.Resource.tivoli.SecurityProtocol=simple
LDAP.Resource.tivoli.Synchronize.GroupMembership.Attribute=ibm-allgroups
LDAP.Resource.tivoli.Synchronize.GroupMembership=true
LDAP.Resource.tivoli.QueryNames=simple-tivoli
LDAP.Resource.tivoli.Query.simple-tivoli.UserBaseDN=cn=Realm1,dc=domaintest,dc=corp
LDAP.Resource.tivoli.Query.simple-tivoli.UserFilter=(uid=%u)
Using this configuration, the user will not receive a notification about password expiration
NOTE
–it is currently supported only for Microsoft AD
LDAP.Resource.multi-domains.ServerURL=ldap://ldap-windev2.domain2.steptest.corp:3268
LDAP.Resource.multi-domains.BindAccount.DN=testuser@steptest.corp
LDAP.Resource.multi-domains.BindAccount.Password=pass
LDAP.Resource.multi-domains.AuthenticationMechanisms=simple
LDAP.Resource.multi-domains.SecurityProtocol=simple
LDAP.Resource.multi-domains.DomainIDs=D2,ST,test
LDAP.Resource.multi-domains.Domain.D2.Name=domain2,DC=steptest
LDAP.Resource.multi-domains.Domain.D2.DisplayName=domain2
LDAP.Resource.multi-domains.Domain.ST.Name=steptest
LDAP.Resource.multi-domains.LoginIdPatterns=(?<domain>.*?)\\\\(?<user>.*?),(?<user>.*?)
LDAP.Resource.multi-domains.QueryNames=query1
LDAP.Resource.multi-domains.Query.query1.UserBaseDN=DC=%d,DC=corp
LDAP.Resource.multi-domains.Query.query1.UserFilter=(sAMAccountName=%u)
LDAP.Resource.multi-domains.Synchronize.GroupMembership.Attribute=memberOf
LDAP.Resource.multi-domains.Synchronize.GroupMembership=true
LDAP.Resource.multi-domains.Synchronize.Attributes=%email=userPrincipalName
Unless specifically disabled, manual login is possible when SSO solutions are used – if no
NOTE
SSO plugin can authenticate the user, the manual login page will be presented.
In the properties names below, “n” represents the authentication plugin configuration
NOTE name, which has to be present in the “HttpAuthentication.ResourceNames” list in order to
be used.
Property Description
HttpAuth.Resource.n.Type The type of authentication plugin to use (the plugin ID). Available
types: TrustedHeaders, KerberosSSO, GoogleAccountOAuth, Blocker
(prevents initial manual login), LegacyTrustedHeaders, LegacySSO,
LegacyGoogleAccountOAuth. NOTE: If the resource names match the
types exactly, then this configuration is not needed.
The authentication plugins are invoked in the order they were added to the
HttpAuthentication.ResourceNames list. If one of the plugins cannot authenticate the user, the process
will continue until one of the plugins can authenticate. If none of them can, the user will be presented
with the login page for manual login.
Out of the box, user synchronization is possible only when LDAP is enabled. If LDAP is not
NOTE
enabled, disabling or enabling the “DisableUserSynchronization” property has no effect.
The solution only works for STEP systems running "Stand Alone", and which don’t use
NOTE
application servers such as Websphere or Weblogic.
When the Web UI has Kerberos SSO enabled, users who are logged on to a domain with a Windows
computer should not have to provide a username and password when accessing the Web UI. When using
Kerberos SSO, the LDAP users are also synchronized in the STEP database following the same rules as
described in Group Synchronization section.
Configuration
In order for the Kerberos SSO solution to work, the following configuration needs to be in place:
HttpAuthentication.ResourceNames=KerberosSingleSignOn
HttpAuthentication.Resource.KerberosSingleSignOn.Type=KerberosSSO
In order to enable Kerberos SSO, the user and the user’s computer need to be authorized against an LDAP
server like Microsoft Active Directory (AD) or something similar. When accessing the Web UI, the browser
must be set up to allow Kerberos SSO on the Web UI server. In order to enable Kerberos SSO, the browser
must be told to allow automatic login for the Web UI website.
Internet Explorer
• Go to "Internet Options" → open the "Security" tab → select "Local intranet" → click the "Sites" button.
• In the popup box, check the "Automatically detect intranet network" → Click the "Advanced" button.
• In the new popup box, enter the URL of the server where the Web UI is hosted. E.g. if the Web UI is
hosted at "http://portalserver.stibo.com/webui/someportal/index.html", you can enter
"http://portalserver.stibo.com".
• Port numbers are not important in this setting. If your browser is already pointed to the Web UI URL,
the address will be pre-populated in the text field.
• Click the "Close" button → Click the "OK" button in the underlying popup.
• In the Security tab and click Local Intranet → Custom Level and select “Automatic log-on with current
user name and password” (under User Authentication, Log-on).
• These settings can also be found in the Control Panel under "Change security settings" (Windows 7).
Older versions of Internet Explorer contain a bug which will sometimes cause all requests
sent after the first authentication request to have an empty body. This empty body will
cause this GWT error: java.lang.IllegalArgumentException: encodedRequest cannot be
empty. A very nice explanation of the bug can be found here: http://stackoverflow.com/
NOTE
questions/18990109/exception-while-dispatching-incoming-rpc-call-encodedrequest-
cannot-be-empty Microsoft has made a hotfix for this bug, compatible with all versions of
Internet Explorer, but this hotfix is disabled by default. If needed, further information
about the hotfix can be found here: https://support.microsoft.com/da-dk/kb/895954
• Double-click the entry "network.automatic-ntlm-auth.trusted-uris" (may also need to add the URL to
"network.negotiate-auth.trusted-uris").
• Click OK.
• The name of the setting is a little misleading because we are actually not using NTLM, but Kerberos
for the authentication and NTLM is not supported. However, this setting applies for both scenarios.
• Chrome will use the Windows security settings mentioned in the "Internet Explorer" section above.
NOTE: In order to make Kerberos SSO work, the fully qualified URL must be used for accessing the
Web UI, e.g. http://portalserver.stibo.com/webui/someportal/login.html and NOT http://portalserver/
webui/someportal/index.html
The STEP server of a Web UI application must also be authorized to access the LDAP Server(s) and must
have an account that is allowed to look up and authenticate other users. The STEP server does not
necessarily have to be logged on to the domain in order to perform authentication.
The preauthentication user settings are global, which means that this user must be created on all the
LDAP servers used for Kerberos SSO, and an SPN must be setup for STEP, using that account.
It is necessary to setup a Service Principal Name (SPN) for the Web UI service. An SPN is used for mapping
the Web UI service to a user so that the AD knows that the Web UI server is allowed to authenticate users
for the Web UI. If multiple LDAP servers are used for Kerberos SSO, the spn must be created for all the
LDAP servers, using the same preauthentication username.
If the SPN is not created for the preauthentication user, then login will fail with a
NOTE
“Checksum failed” error.
To see which servers are already configured for a specific preauthentication user:
The Web UI URL used in this command must be the fully qualified URL, even if the server can be reached
by its short name (e.g. http://portalserver). Note that it is NOT supposed to be http:// but just http/
If the Web UI is hosted on a port different from the default port 80, the port number must also be
specified in the setSPN command, e.g. http/portalserver.stibo.com:8080 (i.e. both with and without port
number)
Web UI SSO uses kerberos tokens for secure communication, which means that the LDAP Server must
support Kerberos. Kerberos has been the standard recommended by Microsoft since Windows 2000
server, and it has been the default on Windows servers ever since.
If LDAP is enabled for the workbench, but Kerberos SSO is not wanted for the Web UI, use this setting: *
Portal.UseSSO=false
The Kerberos SSO solution can be used together with multiple LDAP domains. For information on how to
configure multiple LDAP domains, please see Support for multiple LDAP domains and Simple
authentication – multiple ldap domains.
Besides the requirements described in the Setting up Kerberos SSO, LDAP server and Support for multiple
LDAP domains, the SSO solution adds new requirements both to the LDAP server configuration and the
STEP configuration.
As mentioned in the referenced sections, the LDAP servers must be setup with a global catalogue.
Furthermore, the servers running the domains for which SSO is desired must have an SPN for the service
account, as described the Setting up Kerberos SSO, LDAP server section. If an SPN is not created, the user
authentication will fail with the “Checksum failed” error.
When configuring the multiple domains on the Step server, the LDAP.Resource.n.Domain.d.DisplayName
must match the Kerberos realm. The login patters configured must also contain the simple pattern that
matches the user id (?<user>.*?), else the login will not work for SSO users.
E.g.:
LDAP.Resource.sso-multi-domains.DomainIDs=D2,ST
LDAP.Resource.sso-multi-domains.Domain.D2.Name=domain2,DC=steptest
LDAP.Resource.sso-multi-domains.Domain.D2.DisplayName=domain2.steptest.corp
LDAP.Resource.sso-multi-domains.Domain.ST.Name=steptest
LDAP.Resource.sso-multi-domains.Domain.ST.DisplayName=steptest.corp
#for sso, we need (?<user>.*?), else it won't match
LDAP.Resource.sso-multi-domains.LoginIdPatterns=(?<domain>.*?)\\\\(?<user>.*?),(?<user>.*?)
If unsure what the correct realm name is, you can enable finest logging on the SSO plugin and then try to
login with SSO. The realm and username used for authentication will be logged in the STEP logs.
E.g.:
Log.Level.com.stibo.sso.provider.KerberosSSOProviderPlugin=FINEST
The ldap servers used in this configuration example are dc1-auth.domain1.local and dc2-
auth.domain1.local.
Settings needed in the config.properties file for Kerberos SSO to work (using synchronization)
#----------------------------------------------------
#LDAP Settings - sso configuration
#----------------------------------------------------
LDAP.Resource.sso.ServerURL=ldap://dc1-auth.domain1.local:389
LDAP.Resource.sso.BindAccount.DN=stepbind@domain1.local
LDAP.Resource.sso.BindAccount.Password=Abcd1234!
LDAP.Resource.sso.AuthenticationMechanisms=GSSAPI
LDAP.Resource.sso.SecurityProtocol=simple
LDAP.Resource.sso.JAASConfigurationEntryName=GSSApi
LDAP.Resource.sso.QueryNames=query2
LDAP.Resource.sso.Query.query2.UserBaseDN=DC=domain1,DC=local
LDAP.Resource.sso.Query.query2.UserFilter=(sAMAccountName=%u)
LDAP.Resource.sso.Synchronize.GroupMembership.Attribute=memberOf
LDAP.Resource.sso.Synchronize.GroupMembership=true
LDAP.Resource.sso.Synchronize.Attributes=%email=userPrincipalName
#----------------------------------------------------
#LDAP Settings – sso-2 configuration
#----------------------------------------------------
LDAP.Resource.sso-2.ServerURL=ldap://dc2-auth.domain2.local:389
LDAP.Resource.sso-2.BindAccount.DN=bindUser@domain2.local
LDAP.Resource.sso-2.BindAccount.Password=Test1234!
LDAP.Resource.sso-2.AuthenticationMechanisms=GSSAPI
LDAP.Resource.sso-2.SecurityProtocol=simple
LDAP.Resource.sso-2.JAASConfigurationEntryName=GSSApi2
LDAP.Resource.sso-2.QueryNames=query2
LDAP.Resource.sso-2.Query.query2.UserBaseDN=DC=domain2,DC=local
LDAP.Resource.sso-2.Query.query2.UserFilter=(sAMAccountName=%u)
LDAP.Resource.sso-2.Synchronize.GroupMembership.Attribute=memberOf
LDAP.Resource.sso-2.Synchronize.GroupMembership=true
LDAP.Resource.sso-2.Synchronize.Attributes=%email=userPrincipalName
krb5.conf:
[realms]
DOMAIN1.LOCAL = {
kdc = dc1-auth.domain1.local:88
default_domain = DOMAIN1.LOCAL
}
DOMAIN2.LOCAL = {
kdc = dc2-auth.domain2.local:88
default_domain = DOMAIN2.LOCAL
}
[domain_realm]
.domain1.local = DOMAIN1.LOCAL
domain1.local = DOMAIN1.LOCAL
.domain2.local = DOMAIN2.LOCAL
domain2.local = DOMAIN2.LOCAL
[logging]
kdc = FILE:krb5kdc.log
default = FILE:krb5lib.log
step-jaas.conf :
spnego-client {
com.sun.security.auth.module.Krb5LoginModule required;
};
spnego-server {
com.sun.security.auth.module.Krb5LoginModule required
storeKey=true;
};
STEP {
com.sun.security.auth.module.Krb5LoginModule required;
};
GSSApi {
com.sun.security.auth.module.Krb5LoginModule required;
};
GSSApi2 {
com.sun.security.auth.module.Krb5LoginModule required;
};
The use of Trusted Headers as authentication method does not require any settings on the client’s
browser but relies on the trust relationship between the authentication proxy and STEP, where STEP will
trust that any request, which contains the specified header, has been authenticated.
All requests coming to STEP from the web UI need to have trusted headers in the
NOTE
requests!
If the requests do not have headers present, the user will be prompted with the Login
NOTE
page to manually authenticate to STEP.
When using Trusted Headers with STEP, unless it is used together with LDAP (see below), the user can
only log in if they already exist in STEP.
HttpAuthentication.ResourceNames=TH
HttpAuthentication.Resource.TH.Type=TrustedHeaders
The Trusted Headers authentication can be used together with LDAP in order to synchronize users and
their group memberships to STEP before logging them in.
In order for LDAP integration to work, this needs to be enabled and configured:
LDAP.Enabled=true
<the rest of the ldap configuration>
(See LDAP configuration for more properties related to LDAP integration and synchronization)
When a user wants to use a smartsheet (or a quicksheet), he/she is prompted for their username and
password. These credentials are then sent to STEP as basic authentication, as part of the Authorization
request header. STEP will then extract those credentials and validate them against the STEP database or
the ldap server.
When trusted headers authentication is enabled, the authentication for the smartsheet will fail if the user
is not maintained in an LDAP server integrated with STEP. In order to avoid this situation, STEP can be
configured to authenticate the smartsheet requests using trusted headers, making it possible to
authenticate users who are maintained in a database that cannot be accessed by STEP.
In order for the STEP to verify the trusted headers instead of the basic authentication headers when using
smartsheets, the following configurations need to be set:
Excel.UseTrustedHeaders=true
Excel.TrustedHeaders.Username= [Name of the header which contains the User ID]
Excel will send the username and password as basic authentication along with each request. For that
reason it is necessary to have an authentication proxy which can:
• Extract the User ID and password from the basic authentication request header
• Forward all requests including all payloads from Excel to STEP if the request is authenticated
The url to which the smartsheet requests are sent depends on this configuration property:
SmartSheet.ValidationService.URL=the URL that the Excel applications will use for validation
Excel.UseTrustedHeaders=true
Excel.TrustedHeaders.Username=sm_user
SmartSheet.ValidationService.URL= http://authproxy.company.corp/smartsheet
Property Description
.GoogleAccountOAuth.Redirect.Url URL that is used for the purpose of basic callback-redirection. This
should be a globally accessible url in the form
of:http://step.system.hostname
HttpAuthentication.ResourceNames=OAuth
HttpAuthentication.Resource.OAuth.Type=GoogleAccountOAuth
# Account access scope (it is used to allow the application some scope of user data)
HttpAuthentication.Resource.OAuth.GoogleAccountOAuth.Authenticating.Scope=profile
# This is the hint displayed at the 1st step at provider side (Google will show "email" in the appropriate fields for typing the account
credentials)
HttpAuthentication.Resource.OAuth.GoogleAccountOAuth.Authenticating.Hint=email
HttpAuthentication.Resource.OAuth.GoogleAccountOAuth.Client.Id=449161492363-
1bopd4q69vb43p6j660lndpdtvnjq8ea.apps.googleusercontent.com
HttpAuthentication.Resource.TH.Type=TrustedHeaders
HttpAuthentication.Resource.TH.TrustedHeaders.Header.Username=sm-account
HttpAuthentication.Resource.TH.TrustedHeaders.Header.SessionId =sm-sessionID
HttpAuthentication.Resource.KerberosSingleSignOn.Type=KerberosSSO
Raising this value will REDUCE the security provided by steptokens, and we recommend that STEP servers
are always configured with the default value of this property.
Description
It is possible to raise the expiry time value for renew tokens in hours. This config property will extend the
time frame in which workbench renew tokens will be valid. The workbench won’t timeout as long as it is
able to communicate with the STEP server before this time frame is exceeded. Raising this value makes it
possible for the workbench to survive longer periods of time without server connectivity, but at the cost of
REDUCED security.
Step.Token.ExpiryTimeInHours=4
SAML
Introduction
SAML (Security Assertion Markup Language) is a standard for exchanging authentication and
authorization data between different security domains. SAML SSO solution for STEP allows for the access
to STEP (the Service Provider) to be controlled by any external Identity Provider (IDP). STEP is compatible
with SAML in version 2.0.
Usage flow
There are two main authentication flows available when working with SAML: one for authentication
requests initialized by the Service Provider (STEP in this case), and another for requests initiated by
IdentityProvider, where the user then selects the Service Provider for connection. Below, sequence
diagrams and descriptions are presented for each flow.
1. User opens the WebStart page in browser and clicks a link to a specific Web UI configuration.
2. STEP checks if the user is already authenticated. If not, STEP prepares a request for the configured
Identity Provider. STEP encodes this request in Base64 format and returns it as part of a redirect URL
for the Identity Provider.
4. Identity Provider prompts user for credentials (given that the user is not already authenticated).
5. After passing valid credentials, the Identity Provider redirects user back to STEP. Response containing
additional information about the user (SAML token) is returned as part of the HTML form that is
automatically submitted to a STEP servlet.
6. STEP validates the response from the Identity Provider, and if successful, returns the requested
resource to the user.
1. User accesses intranet page that provides access to multiple different Service Providers and for which
Identity Provider authentication is required.
2. User chooses to access STEP Web UI from a page presenting available Service Providers.
3. Identity Provider prompts user for credentials (given that the user is not already authenticated).
4. User submits credentials and Identity Provider (after successful user authentication) sends request to
STEP assertion consumer servlet, which is then parsed and validated by STEP.
Notice, that by default, STEP only allows for Identity Provider-initiated access to Web UIs. To work for the
workbench client as well, additional configuration is required, namely relative paths to allowed resources
must be defined for the property:
SAML.ServiceProvider.Step.RelayState.SupportedPathsForIDPInitiatedAuthentication.
User synchronization
User synchronization is turned on by default. This means that during authentication, user information will
be synchronized between the STEP system and the corresponding Identity Provider. The synchronization
mechanism works similarly to the LDAP mechanism. Without additional configuration, only user groups
and attributes received from IDP assertion responses are synchronized. During user groups
1. STEP receives an assertion containing three groups "GROUP_A", "GROUP_B", "GROUP_C" (they are
retrieved from assertion XML from an attribute with ID defined in configuration property:
SAML.IdentityProvider.n.Assertions.Attribute.Groups).
2. STEP prepares a list of existing groups in STEP, based on a collection from point 1.
5. If a default user group cannot be found, an exception is thrown, and processing is stopped (user will
be prevented from accessing STEP).
8. Finish synchronization.
Apart from group synchronization, STEP also synchronizes user attributes. Two user attributes,
DisplayName and Email, are always synchronized. Values are retrieved from the assertion XML attributes
with IDs specified by the properties:
SAML.IdentityProvider.n.Assertions.Attribute.Email
SAML.IdentityProvider.n.Assertions.Attribute.DisplayName
STEP can also synchronize additional user properties. To do so, mappings between assertion and the STEP
system are required. You are not allowed to map base attributes representing groups, display name, and
email. Mappings are defined with the configuration property:
SAML.IdentityProvider.n.Assertions.Attributes.Mappings=IDPPhone=phone,IDPCompany=company
Similarly to the LDAP approach, if an attribute does not exist in STEP and is present in assertion, an
exception will be thrown. To avoid that, mark the STEP attribute as optional. This means that property
values will only be synchronized if the attributes exist in STEP. In this case, STEP attribute IDs should be
prefixed with a question mark, as presented on example below.
STEP also allows for users to be automatically created if they do not exist. This functionality is turned off
by default but can be enabled with the property:
SAML.ServiceProvider.Step.Users.AutoProvision
If set, when processing assertions, a user will be created in STEP and assigned to the groups defined in
the assertion or to the default group.
Logout
If SAML is enabled, when a user logs out of Web UI, a request is sent to the Identity Provider to log user
out from IDP as well. After logout, the user is redirected to either the STEP WebStart page (on success) or
the STEP SAML error page (if an error occurs).
The SAML authentication plugin works differently from the other authentication options described in this
document. This is due to the fact that full responsibility for authentication is delegated to an external
system (Identity Provider), meaning that STEP is not able to determine whether or not the user is valid
until a result has been received from the Identity Provider. For this reason, SAML authentication is
restricted from use with the other plugins presented in this document as defined below.
SAML authentication plugin does not invoke other plugins if any failure occurred during Workbench SSO
and Smartsheets SSO authentication. However, it is fully compliant with other plugins while performing
the authentication process in Web UI (it requires enabling an additional property - see the general
configuration table for more details). This means that if the SAML authentication process failed, the user
will be allowed to skip it and try logging in with another enabled plugin (like Kerberos or Trusted
Headers). The image below is the error message with an optional button for skipping SAML
authentication process.
Be aware that skipping SAML authentication will result in omitting the SAML
NOTE
authentication plugin until browser has been closed.
Skipping Web UI SAML Authentication is possible by adding following parameter to the request:
skipSAMLLogin=true
To authenticate again with SAML it is necessary to either clear browser cookies or close the browser.
Configuration
Details about the available configuration properties can be found in table below. As shown in the table
below, some of the properties are cluster node specific, while others are system wide. Cluster node
specific properties should be set in [STEP_HOME]/config.properties while system wide properties should
be set in [WORKAREA]/sharedconfig.properties.
In the properties' names below, “n” represents the identity provider name, which has to be
NOTE present in the “SAML.IdentityProviders.Names” property. Currently only one Identity
Provider with which ServiceProvider will communicate is supported.
The current version of the SAML component allows for auto-generating self-signed certificates used for
signing and encrypting requests/assertions sent between Service Provider and Identity Provider. It is not
required to use this mechanism for generating the certificates. If external certificates are used, it is
required only to pass paths to file/keystore, add an additional passphrase (for keystore/file and private
key/certificate), and optionally aliases (if keystore is used). All certificate-generation related properties are
global and must be the same among all cluster nodes.
SAML.Enabled,
SAML.ServiceProvider.Step.EntityID,
SAML.ServiceProvider.Step.AssertionConsumerService.Location,
SAML.ServiceProvider.Step.SingleLogoutService.Location,
SAML.IdentityProviders.Names,
SAML.IdentityProvider.n.Metadata.Endpoint,
SAML.IdentityProvider.n.EntityId
properties connected with certificates/private keys.
Example settings
Below example is based on configuration for open-source "shibboleth" Identity Provider server.
SAML.Enabled = true
SAML.IdentityProviders.Names=Test
SAML.IdentityProvider.Test.EntityId=https://idptest/idp/shibboleth
SAML.IdentityProvider.Test.Metadata.Endpoint=https://idptest/idp/shibboleth
SAML.IdentityProvider.Test.Metadata.OfflineCache.Path=workarea/STEP-LOCALHOST.xml
SAML.ServiceProvider.Step.EntityID=https://stepwebstart
SAML.ServiceProvider.Step.AssertionConsumerService.Location=https://stepwebstart/saml/StepAssertion
SAML.ServiceProvider.Step.SingleLogoutService.Location=https://stepwebstart/saml/StepLogout
SAML.ServiceProvider.Step.Signing.Certificate.File=${SHARED_DIR}/test/signing/stepTestSigning.cert
SAML.ServiceProvider.Step.Signing.PrivateKey.File=${SHARED_DIR}/test/signing/stepTestSigning.pkcs8
SAML.ServiceProvider.Step.Signing.PrivateKey.Password=s3cr3t
SAML.ServiceProvider.Step.Encryption.Certificate.File=${SHARED_DIR}/test/encryption/stepTestEncryption.cert
SAML.ServiceProvider.Step.Encryption.PrivateKey.File=${SHARED_DIR}/test/encryption/stepTestEncryption.pkcs8
SAML.ServiceProvider.Step.Encryption.PrivateKey.Password=s3cr3t
HttpAuthentication.Resource.CoreSAML.Type=CoreSAML
HttpAuthentication.ResourceNames=CoreSAML
# Keystore information
SAML.ServiceProvider.Step.KeyStore.Password=changeit
SAML.ServiceProvider.Step.KeyStore.File=${SHARED_DIR}/keystore.store
SAML.ServiceProvider.Step.Signing.Certificate.CountryName=DK
SAML.ServiceProvider.Step.Signing.Certificate.StateOrProvinceName=North Denmark
SAML.ServiceProvider.Step.Signing.Certificate.City=Aarhus
SAML.ServiceProvider.Step.Signing.Certificate.OrganizationName=StiboSystems
SAML.ServiceProvider.Step.Signing.Certificate.OrganizationUnitName=RD
SAML.ServiceProvider.Step.Signing.Certificate.CommonName=StiboSystems
SAML.ServiceProvider.Step.Signing.Certificate.EmailAddress=test@stibosystems.com
SAML.ServiceProvider.Step.Signing.Certificate.ValidDays=3650
SAML.ServiceProvider.Step.Encryption.Certificate.CountryName=DK
SAML.ServiceProvider.Step.Encryption.Certificate.StateOrProvinceName=North Denmark
SAML.ServiceProvider.Step.Encryption.Certificate.City=Aarhus
SAML.ServiceProvider.Step.Encryption.Certificate.OrganizationName=StiboSystems
SAML.ServiceProvider.Step.Encryption.Certificate.OrganizationUnitName=RD
SAML.ServiceProvider.Step.Encryption.Certificate.CommonName=StiboSystems
SAML.ServiceProvider.Step.Encryption.Certificate.EmailAddress=test@stibosystems.com
SAML.ServiceProvider.Step.Encryption.Certificate.ValidDays=3650
Workbench SSO
Single Sign On functionality, already configured for the Web UI, can also be enabled for the workbench. In
order to enable SSO for the workbench, the SSO for the WebUI must already be enabled, via the following
configuration:
Workbench.Authentication.UseSSO=true
When SSO is enabled for the workbench, the user will be authenticated on the webstart page, before
downloading the workbench.
Although this will disable the manual workbench login prompt, it is still possible to perform manual
http://step.server.hostname/workbenchlauncher/manualwblogin
Smartsheet SSO
In order to enable SSO for smartsheets, set the SSO on configuration property:
SmartSheet.Authentication.Method=SSO
When SSO is enabled for the smartsheet, users will be authenticated via the configured SSO provider
when performing an action requiring access to STEP data.
Please be aware that this will disable basic authentication in smartsheets. Also remember that SSO won’t
be working for older smartsheet files downloaded before the configuration property has been set to use
SSO mode.
When manual authentication is used, by default STEP presents the user with the Login page. However, if
the user logged in using an SSO solution, the following login screen is displayed:
From here, the user can choose to login automatically again, using the SSO solutions, or login manually as
another user.
Once the user logs in manually, the state of the session will change and he/she cannot
NOTE
login using SSO unless the browser is restarted.
If the default behavior is not wanted, this can be changed with customizations to the post logout action.
• Java 10:
Select the "Network" tab on the Web Settings tab.
If https(secure) communication is needed, then this can be enabled by selecting the "Advanced Network
Settings (Java8)" or "Refine (Java10)" option, and configuring the additional parameters.
User Interfaces
With OAuth2-based authentication enabled, authentication for all STEP user interfaces (Web UIs,
Workbench, STEP Homepage, STEP System Administration etc.) will be handled centrally. In practice, when
a user accesses a Web UI or the STEP Homepage without being authenticated, he/she will be redirected to
the central login page and will upon successful authentication be able to access all STEP user interfaces
without having to re-enter credentials.
{
"username": "myusername",
"password": "mypassword"
}
Notice that the [server]/auth/token functionality only works with credentials for users maintained and
authenticated in STEP or a user federation database.
Tool access
The “Http Authentication Test Tool” is hosted on the following URL: http://step.server.hostname/webui/
webui/authenticationtest
It can accessed directly or through the link on the Admin Web UI’s “Tools” page (right-click on the link and
select “open in new tab” to stay in Admin Web UI).
Test configurations
To avoid interferences with the configuration of the running STEP server, the test tool will load its own
separate configurations from a predefined file.
Property Description
This is not a hot property, so adding or changing it only takes effect when the STEP server
NOTE
is restarted.
The test configuration file is loaded as hot properties, and changes applied to that file will
NOTE take effect “immediately”. However as mentioned earlier you are not allowed to change
the file name property without restarting server.
For security reasons it is not possible to output test configuration errors during the test
NOTE itself. If the test is failing for unknown reasons it is therefore necessary to consult the STEP
log files.
None of the configured authentication plugins were able to handle authentication of the user accessing
the servlet. This might be caused by a misconfiguration in the test configuration file on the client, or on
external resources. Consult the STEP logs for available info.
One of the configured authentication plugins was able to handle authentication of the user “username”
accessing the servlet. Consult the STEP logs for available info.
One of the configured authentication plugins was in the process of handling authentication of the user
accessing the servlet. The “Responded” status means that the plugin is awaiting a response from an
external source. This might be due to a misconfiguration of external services that are not redirecting
correctly to the servlet, or the nature of the authentication solution which might not be compatible with
this test solution. Consult the STEP logs for available info.
The test configurations could not be loaded or one of the configured plugins encountered an internal
error. Consult the STEP logs for available info.
Limitations
User Synchronization
User synchronization is currently not supported by the Http Authentication Test Tool.
Caveats
• Multiple authentication mechanisms are not supported previous to STEP 7.4.
• If none of the STEP groups have a "LDAP Synchronization ID" and there is no default group
configured, the user is rejected from login with "username does not exist".
• If a STEP user is not a member of any LDAP groups that match a STEP group’s
• If a user is member of a group in LDAP, this membership is only subject to synchronization if the LDAP
group name is registered in the "LdapSynchronizationID" field on a STEP group.
• If a user is member of a STEP group with a valid "LdapSynchronizationID", he may be removed from
this group if he is not member of the corresponding group in LDAP.
• If a user is member of a STEP group with a valid "LdapSynchronizationID", he will not be removed
from this group if not known to the LDAP.
• If a user logs in through the STEP Workbench and leaves the client instance open for several days, the
user will not be affected by changes to the user’s group memberships in LDAP until the user logs off
and in again.
• It may be necessary to do some security modifications if the SSL communication with the LDAP server
does not work. Due to import control restrictions, the version of JCE policy files that are bundled in the
JDK™ environment allow "strong" but limited cryptography to be used. Therefore, it is necessary to
download and install the "Unlimited Strength Java Cryptography Extension Policy Files".
Appendix
Deprecated LDAP configuration properties
The section contains the deprecated configuration properties used for authentication. The global LDAP
properties (Global properties) can be used together with the deprecated configuration properties.
NOTE The deprecated configuration only supports synchronization of the email attribute!
Basic properties
Property Description
LDAP.BaseDN The distinguished name of the node to search for user in your
company’s LDAP, e.g.
"OU=Catalog,OU=Hoejbjerg,OU=DK,OU=Domain
Users,DC=stibo,DC=corp". NOTE: This field is mandatory if
LDAP.AuthenticateAndSynchronize=true. If this value is not specified,
lookup of user in LDAP will fail.
LDAP.UserBaseDN The DN base used for searches specific for user attributes. Normally,
this is the same as LDAP.BaseDN, and is used instead of
LDAP.BaseDN in most cases. To specify multiple user baseDNs
separate them with the new line character "\n" : DC=test\nDC=other.
If configured, the number of user baseDN configurations must
match the number of LDAP.FindUserDNFilter. If not configured, the
LDAPBaseDN will be used.
LDAP.FindUserDNFilter The search filter used for looking up a user or user’s groups in LDAP.
This filter may contain the attribute to use for locating a userid. %u
(e.g. in the default value: "(sAMAccountName=%u)") will at runtime
be replaced by username from login. It may as well contain a search
filter to directly find the groups that the user is member of (Again,
use %u for replacement). For configuring multiple filters, separate
them by the new line character "\n" : (filter1)\n(filter2)
Property Description
LDAP.SecurityProtocol The protocol to use for communicating with the LDAP server. Set this
to ssl if you wish to communicate via secure socket layer. Otherwise
leave blank (which is the default).
Property Description
LDAP.JAASConfigurationEntryName Name of the entry in the JAAS configuration file to use. Typical value
is "STEP". Do not use “spnego-server” entry which is used for Web UI
standard SSO.
Property Description
LDAP.MemberOfAttributeName (Only used with Microsoft AD) This is the name of the attribute in
LDAP that contains membership. If this property is blank or
nonexistent, it is assumed that group memberships are not to be
found in an attribute on the user entity.
LDAP.SynchronizeUserEMailFrom The ID of the attribute in LDAP containing the email address of the
user. This is typically “mail”. If the property is set, the email stored in
LDAP for the user will be synchronized to the user in STEP.
Property Description
LDAP.NotifyDaysBeforeExpire Upon login, the user will be notified about his LDAP password expiry
the specified number of days before. Defaults to 10 days.
LDAP.BindAccount.DN The bind account used when searching after users. This is NOT used
for authentication but for synchronization and password expiration
warning mechanisms. And it is NOT used for Web UI SSO
mechanisms. The Web UI standard SSO has its own property
LDAP.Preauthentication.UserName which it uses for synchronization.
Mandatory property if trusted headers are configured with LDAP.
Single-Sign-On properties
Property Description
LDAP.Preauthentication.UserName Property used with the SPNEGO Kerberos single-sign Web UI solution
to specify the Principal used for pre-authentication. Not used at all
for ordinary LDAP operations.
LDAP.Preauthentication.Password Property used with the SPNEGO Kerberos single-sign Web UI solution
to specify the Password used for pre-authentication.
Property Description
The following example configures STEP to access LDAP via Kerberos. Members of groups are listed as
"uniqueMember" on the "groupOfUniqueNames" group entity.
LDAP.SynchronizeUserEMailFrom=mail
LDAP.MemberOfAttributeName=memberOf
LDAP.FindUserDNFilter=(sAMAccountName=%u)
LDAP.BaseDN=dc=company,dc=com
LDAP.UserBaseDN=dc=company,dc=com
LDAP.UserDistinguishedName=%u
LDAP.Domains=company.com
LDAP-AuthenticationMechanisms=GSSAPI
LDAP.SecurityProtocol=simple
LDAP.ServerURL=ldap://ldap-server.company.com:389
LDAP.JAASConfigurationEntryName=STEP
LDAP.KerberosConfigurationFile=/home/stibosw/step/shared/jaas/krb5.conf
LDAP.JAASConfigurationFile=/home/stibosw/step/shared/jaas/step-jaas.conf
[libdefaults]
default_realm = COMPANY.COM
default_tkt_enctypes = aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha1-96 rc4-hmac
default_tgs_enctypes = aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha1-96 rc4-hmac
udp_preference_limit = 1
[realms]
DOMAINTEST.CORP = {
kdc = ldap-server.company.com:88
default_domain = COMPANY.COM
}
[domain_realm]
. COMPANY.COM = COMPANY.COM
kdc = FILE:krb5kdc.log
default = FILE:krb5lib.log
spnego-client {
com.sun.security.auth.module.Krb5LoginModule required;
};
spnego-server {
com.sun.security.auth.module.Krb5LoginModule required
storeKey=true
isInitiator=false;
};
Property Description
# Account access scope (it is used to allow the application some scope of user data)
OAuth.Authenticating.Scope=profile
# This is the hint displayed at the 1st step at provider side (Google will show "email" in the appropriate fields for typing the account
credentials)
OAuth.Authenticating.Hint=email
# This url is the point where the user is redirected in the end (even if the authentication failed on some reason)
OAuth.Redirect.Url=http://stibo-auth.com:9870/
To see which servers are already configured for a specific preauthentication user: * setSPN -L
[preauthentication user]
To add an SPN for Web UI located at http://portalserver.stibo.com/webui, run the setSPN command on
the LDAP Server (instructions apply for Windows ADs only): * setSPN -a http/[server] [preauthentication
user] e.g.: setSPN -a http/portalserver.stibo.com preauthUser
The Web UI URL used in this command must be the fully qualified URL, even if the server can be reached
by its short name (e.g. http://portalserver). Note that it is NOT supposed to be http:// but just http/
If the Web UI is hosted on a port different from the default port 80, the port number must also be
specified in the setSPN command, e.g. http/portalserver.stibo.com:8080 (i.e. both with and without port
Web UI SSO uses kerberos tokens for secure communication, which means that the LDAP Server must
support Kerberos. Kerberos has been the standard recommended by Microsoft since Windows 2000
server, and it has been the default on Windows servers ever since.
LDAP.Enabled=true
LDAP.AuthenticateAndSynchronize=true
LDAP.InitialContextfactory=com.sun.jndi.ldap.LdapCtxFactory
LDAP.Timeout=15
Portal.UseSSO=true
LDAP.SynchronizeUserEMailFrom=mail
LDAP.MemberOfAttributeName=memberOf
LDAP.FindUserDNFilter=(sAMAccountName=%u)
LDAP.BaseDN=dc=company,dc=com
LDAP.UserBaseDN=dc=company,dc=com
LDAP.UserDistinguishedName=%u
LDAP.Domains=company.com
LDAP-AuthenticationMechanisms=GSSAPI
LDAP.SecurityProtocol=simple
LDAP.ServerURL=ldap://ldap-server.company.com:389
LDAP.JAASConfigurationEntryName=STEP
LDAP.KerberosConfigurationFile=[path]/krb5.conf
LDAP.JAASConfigurationFile=[path]/step-login.conf
LDAP.Preauthentication.UserName=[user name for the authentication account on the LDAP server]
LDAP.Preauthentication.Password=[password for the authentication account on the LDAP server]
If LDAP is enabled for the workbench, but SSO is not desired for the Web UI, use this setting: *
Portal.UseSSO=false
Configuration
Portal.TrustedHeaders=true
TrustedHeaders.Header.Username=[Name of the header which contains the user name]
TrustedHeaders.Header.SessionId=[Name of the header which contains the user Session ID from the authentication server]
TrustedHeaders.LoginUrl=[URL for redirect on fail]
Portal.UseSSO=false
LDAP.Enabled=true
(See LDAP configuration for more properties related to LDAP integration and synchronization)