Configuring user access with OpenID
Operational Decision Manager (ODM) for production can be configured with OpenID Connect (OIDC), which is an authentication framework that is built on the OAuth 2.0 protocol. ODM servers use it to verify a user's identity with an OIDC provider, and to authorize access to the ODM applications and APIs. The servers also use it to obtain basic profile information about the user.
Before you begin
To help you manage authentication using different single sign-on (SSO) tools, check out the following step-by-step tutorials:
- Deploying IBM® Operational
Decision Manager using Azure AD (Active Directory)

- Deploying IBM Operational
Decision Manager using Okta

- Deploying IBM Operational
Decision Manager using Keycloak

- Deploying IBM Operational
Decision Manager using Cognito

- Deploying IBM Operational
Decision Manager using PingFederate

About this task
You must configure a basic or LDAP authentication registry for your ODM services before you can configure ODM with OpenID. To better understand ODM roles, see User roles and groups.
ODM with OpenID uses hardcoded roles with six users and six
groups for each role. All authenticated users have by default the rtsUser role.
The following lines show the ODM configuration.
rtsAdministrators:
<user name="rtsAdmUser1" access-id="${odm.rtsAdministrators.user1}"/>
<user name="rtsAdmUser2" access-id="${odm.rtsAministrators.user2}"/>
<user name="rtsAdmUser3" access-id="${odm.rtsAdministrators.user3}"/>
<user name="rtsAdmUser4" access-id="${odm.rtsAdministrators.user4}"/>
<user name="rtsAdmUser5" access-id="${odm.rtsAdministrators.user5}"/>
<user name="rtsAdmUser6" access-id="${odm.rtsAdministrators.user6}"/>
<group name="rtsAdmGroup1" access-id="${odm.rtsAdministrators.group1}"/>
<group name="rtsAdmGroup2" access-id="${odm.rtsAdministrators.group2}"/>
<group name="rtsAdmGroup3" access-id="${odm.rtsAdministrators.group3}"/>
<group name="rtsAdmGroup4" access-id="${odm.rtsAdministrators.group4}"/>
<group name="rtsAdmGroup5" access-id="${odm.rtsAdministrators.group5}"/>
<group name="rtsAdmGroup6" access-id="${odm.rtsAdministrators.group6}"/>
Similar users and groups exist for the other roles
rtsConfigManagers, rtsInstallers,
resAdministrators, resExecutors, resMonitors, and
resDeployers. You can find an example in the Example section at the end of this
topic.
You need to create a number of secrets before you can install an ODM instance with OpenID and use web application single sign-on (SSO). The following diagram shows the ODM services with OpenID after a successful installation.

- You need to configure the connection to the OpenID server.
- Create an OpenID administrator secret to be referenced by the oidc.adminRef parameter.
- Create a secret with the OpenID certificates to be referenced by the customization.securitySecretRef parameter.
- Set the allowed domain names in the oidc.allowedDomains parameter.
- If you choose to use NodePort to access ODM services, you must manually register the URLs of the ODM services to the OpenID server, after deployment, by editing the configmap named release_name-odm-oidc-redirect-uris-configmap.
- You can define the mapping between the Liberty roles and the LDAP groups
by updating the secret
release_name-odm-oidc-auth-secret. This default secret sets the OpenID admin user with all the administrator roles.
Procedure
Advanced configuration
Results
The ODM services are accessible only when the job release_name-odm-oidc-job-registration is complete. If you take the route or Ingress option, the registration is done automatically through the Helm chart parameters. If you use the node port option, refer to Using node ports in step 4 to complete the installation
To use OpenID with Rule Designer, see Configuring Rule Designer.
Five predefined registered ports are provided to connect to the OpenID server (9081-9085).
You must also import the security certificate that is used in
the ODM instance into Rule Designer. For more information,
see Importing a security certificate in Rule Designer. To provide the
truststore.jks file to the eclipse.ini, you can identify
the ODM pods with the kubectl get pods | grep odm command, and then copy the file
by running the kubectl cp
command.
kubectl cp project_name/ODM_pod_name:/config/security/truststore.jks ./truststore.jksThe
default password of the provided truststore.jks file is
changeit. The clientId and clientSecret
parameters can be set in step 5.
REST API management
If you want to call the REST API, you must get an access token by running a cURL command with the following endpoint.
https://oidc.serverUrl/oidc/endpoint/oidc.provider/token
You can then authenticate with the Bearer access-token
. For
more information, see Invoking the Token Endpoint for OpenID Connect
.
The following diagram shows the API invocations with OpenID.

With the default configuration, the access token is
validated for all requests. The validation process has an impact on the Decision Server Runtime performance. To
improve the performance, LtpaToken cookies are enabled in the
openidConnectClient Liberty configuration to manage the token. However, for
demanding applications that require high performance, LtpaToken cookies are
sometimes not enough. In this case, use basic authentication to call the Decision Server Runtime.
Here are the details for each solution.
- Using
LtpaTokencookiesA client that launches a decision service must manage
LtpaTokencookies. The following steps describe how to get a cookie.- Get an OpenID access token. For more information, see Invoking the Token Endpoint for OpenID Connect
. - Call a decision service to get a cookie from the access token. For example, the following call
uses a cURL
command:
curl -H "Content-Type: application/json" -k --data @loanvalidation.json -H "Authorization: Bearer <TOKENID>" https://DecisionServerRuntime:Port/DecisionService/rest/LoanValidationDS/1.0/loan_validation_with_score_and_grade/1.0 -c cookie.txt
- Get an OpenID access token. For more information, see Invoking the Token Endpoint for OpenID Connect
- Using basic authentication
The Liberty OpenID configuration contains a parameter that manages basic authentication. The default configuration in webSecurity.xml provides a basic registry with a resExecutor user that has the resExecutors role, as illustrated in the following code sample.
<server> <basicRegistry id="basic" realm="basic"> <user name="resExecutor" password="resExecutor"/> <group name="basicResExecutors"> <member name="resExecutor" /> </group> </basicRegistry> <variable name="odm.resExecutors.group1" value="group:basic/basicResExecutors"/> </server>So you can call a decision service like this:
curl -H "Content-Type: application/json" -k --data @loanvalidation.json -H "Authorization: Basic cmVzRXhlY3V0b3I6cmVzRXhlY3V0b3I=" https://DecisionServerRuntime:Port/DecisionService/rest/LoanValidationDS/1.0/loan_validation_with_score_and_grade/1.0Where
cmVzRXhlY3V0b3I6cmVzRXhlY3V0b3I=is the base64 encoding of the current username:password resExecutor:resExecutorYou can modify the default basic registry, users, and groups by modifying the webSecurity.xml file.
Example
- oidcFullAccess, a group to manage all ODM roles.
- oidcRtsAdministrator, a group for the
rtsAdministratorsrole. - oidcRtsConfigManager, a group for the
rtsConfigManagersrole. - oidcRtsInstaller, a group for the
rtsInstallersrole. - oidcResAdministrator, a group for the
resAdministratorsrole. - oidcResMonitor, a group for the
resMonitorsrole. - oidcResExecutor, a group for the
resExecutorsrole. - oidcResDeployer, a group for the
resDeployersrole.
The OpenID users and groups must be defined in the OpenID server. The names that you intend to use must exist in an associated registry so that they can be mapped to an ODM user or group.
The following OpenID server definition shows an example of this mapping with an OpenID group
defined in a basic registry,
and an OpenID group
group:o=defaultWIMFileBasedRealm/oidcAllRoles
defined in an LDAP registry.group:o=defaultWIMFileBasedRealm/cn=oidcRtsAdministrator,ou=memberlist,ou=examplegroups,o=example.org
<server>
<federatedRepository id="vmm">
<primaryRealm name="o=defaultWIMFileBasedRealm">
<participatingBaseEntry name="o=BasicRegistry"/>
<participatingBaseEntry name="o=example.org"/>
</primaryRealm>
</federatedRepository>
<basicRegistry id="basicRegistry">
<!-- User with full access through oidcAllRoles group -->
<user name="odmAdmin" password="odmAdmin" />
<!-- Group that has full access -->
<group name="oidcAllRoles">
<member name="odmAdmin" />
</group>
</basicRegistry>
<ldapRegistry baseDN="o=example.org" host="mydomain.example.org"
id="bp" ldapType="IBM Security Directory Server" port="389">
<ldapEntityType name="PersonAccount">
<objectClass>mycompanyPerson</objectClass>
<searchBase>ou=mydomain,o=example.org</searchBase>
</ldapEntityType>
<ldapEntityType name="Group">
<objectClass>groupOfUniqueNames</objectClass>
<searchBase>ou=memberlist,ou=examplegroups,o=example.org</searchBase>
</ldapEntityType>
<idsFilters userFilter="(&(objectclass=Person)(|(uid=%v)(mail=%v)))"
groupFilter="(&(cn=%v)(objectclass=groupOfUniqueNames))"
groupMemberIdMap="groupOfUniqueNames:uniqueMember" />
</ldapRegistry>
</server>
- An OpenID user generalAdmin (defined through an LDAP registry). A user that has access to all applications.
- An OpenID group oidcAllRoles (defined through a basic registry). A group of users that has access to all applications.
- An OpenID group oidcRtsAdministrator (defined through an LDAP registry). A group of users that has admin access to Decision Center.
- An OpenID group oidcRtsConfigmanager (defined through an LDAP registry). A group of users that can configure deployments in Decision Center.
- An OpenID group oidcResAdministrator (defined through an LDAP registry). A group of users that has admin access to Decision Server console.
- An OpenID group oidcResDeployer (defined through an LDAP registry). A group of users that can deploy in Decision Server console.
- An OpenID group oidcResMonitor (defined through an LDAP registry). A group of users that can monitor Decision Server console.
- An OpenID group oidcResExecutor (defined through an LDAP registry). A group of users that can run decisions in Decision Server Runtime.