Set up CLIENT-PRINCIPAL token generation
- Last Updated: February 4, 2026
- 5 minute read
- OpenEdge
- Version 12.8
- Documentation
When a user is successfully authenticated by the Spring authentication manager,
OpenEdge creates a sealed CLIENT-PRINCIPAL token that is returned to
the ABL application for its own use and for getting access to OpenEdge database
connections. Note that there are a few differences between the way that the generic LDAP
authentication manager and the Active Directory authentication manager work to produce
the CLIENT-PRINCIPAL token.
CLIENT-PRINCIPAL token expiration
By default, CLIENT-PRINCIPAL tokens have no expiration interval.
However, you can set the LOGIN-EXPIRATION -TIMESTAMP attribute to
specify when a CLIENT-PRINCIPAL token expires. When a
CLIENT-PRINCIPAL token expires, the token can no longer
represent a user identity, and any started login session for the object ends. Note
that OpenEdge evaluates the value of this attribute only at the times when OpenEdge
either attempts to seal or validate the object.
About loading additional Active Directory account information into a CLIENT-PRINCIPAL token
The generic LDAP authentication manager loads all defined Active Directory
user account attributes as part of its authentication process. Those attributes are
not automatically added to the CLIENT-PRINCIPAL token that is
generated by PAS for OpenEdge. However, there may be some instances when the LDAP
user account attributes are relevant to your ABL application, and you can
selectively control which attributes to add into the
CLIENT-PRINCIPAL token's properties list.
You can specify these additional attributes by using the OEClientPrincipalFilter.loadAccntAttrList property in
the configuration of the generic LDAP authentication manager. This implementation
follows the standard inetOrgPerson LDAP object class as defined in RFC2798;
consult the applicable RFCs for details about the underlying schema. You can specify
the following user attributes to this property:
| Attribute | Description |
|---|---|
cn |
Common name for the object instance |
dn |
Distinguished name |
sn |
Surname |
uid |
User ID |
mail |
Electronic address |
employeeNumber |
Employee identification number |
title |
Employee job title |
ou |
Organization name |
o |
An organization within an enterprise |
givenName |
Employee's first name |
displayName |
Employee's preferred name (nickname) |
homePhone |
Home telephone number |
homePostalAddress |
Home postal address |
initials |
Employee's initials |
mobile |
Mobile phone number |
postalAddress |
Organization's postal address |
postalCode |
Organization's postal code |
roomNumber |
Office number at the organization's facility |
street |
Organization's street address |
telephoneNumber |
Office telephone number |
token_type |
Type of token |
Note the following when you specify the OEClientPrincipalFilter.loadAccntAttrList property:
- The default value is an asterisk (
*), which causes all attributes to be loaded into theCLIENT-PRINCIPALtoken properties. - You can specify mutliple attributes as a comma-separated list.
- You can specify a blank to load no additional account attributes.
- If a specified attribute is not present in the account object in Active
Directory, then nothing is loaded into the
CLIENT-PRINCIPALtoken properties for that attribute.
How the CLIENT-PRINCIPAL token role attribute is used
The CLIENT-PRINCIPAL token's role attribute is used by the PAS
for OpenEdge ABL application URL authorization process to control access to
APIs.
Support for multiple OpenEdge domains or tenants
Active Directory, like any LDAP server, is not multi-tenant enabled. It is an
identity store for a single enterprise. When your ABL application uses a single
OpenEdge domain or tenant, you can configure CLIENT-PRINCIPAL
properties to use that single domain name and supply its access code in the domain
registry file. However, when your ABL application does
support multiple OpenEdge domains or multiple tenants, you must perform additional
configuration work to ensure that a client cannot spoof access to tenant data to
which they are not authorized.
Active Directory user accounts do not have attribute data that identifies the specific tenant of which they are members. However, when you use the generic LDAP authentication manager, you can assert direct control over the specific OpenEdge domain or tenant to which an authenticated user account is assigned or validated against. You can do this by using LDAP group memberships as a way to allow the Active Directory administrator to control user membership in an OpenEdge domain or tenant. This uses the same principle whereby an LDAP user account is a member of an LDAP group membership and is authorized to access restricted data.
The OpenEdge domain or tenant is a collection of related users who are authorized to access restricted data. Therefore, by using a domain and LDAP groups, you can accomplish the same type of user grouping for authorization to tenant data. With LDAP group memberships, you can use an LDAP group to:
- Designate the OpenEdge domain or tenant to which a simple client-provided
user ID (for example,
dan) must be assigned before aCLIENT-PRINCIPALtoken can be created and sealed. - Validate that a fully qualified client-provided user ID (for example,
dan@acme.com) is a member of theacme.comOpenEdge domain or tenant.
PAS for OpenEdge provides the ability to control the mapping of user IDs to
domains and ensure correct tenant database access. You can do this by using the LDAP
user account’s granted group objects, which are mapped to Spring Security ROLE_* roles, to designate the domain in which the
user is a member. Using LDAP group objects in Active Directory in this way maintains
the secure central administration of enterprise user accounts and allows you to
designate the domain name of which each Active Directory user account is a
member.
The key to making this work is to create an LDAP group object in Active Directory for each OpenEdge domain. Then, each time the Active Directory administrator adds a user account, they must add that account to the LDAP group that represents the OpenEdge domain or tenant of which the account owner is a member. When that user account control process is in place, you can then configure PAS for OpenEdge to assign and validate the user’s tenancy automatically.
To set up LDAP group objects in Active Directory for use and an OpenEdge domain:
- Establish a naming format that allows OpenEdge and your application to
easily distinguish between a role used for URL authorization and one that is
used as the OpenEdge domain, for
example:
OED_openedge-domain-nameIn this example,
OED_is a prefix that designates that the specified name is related to an OpenEdge domain. The string openedge-domain-name corresponds to the domain name that is configured in the PAS for OpenEdge instance's domain registry as a valid domain name that includes an access code. The prefix you choose does not need to beOED_. It can be anything that the enterprise decides to use. OpenEdge strips this prefix for you before the ABL application receives theCLIENT-PRINCIPALtoken that is generated. - Work with the Active Directory administrator to create an LDAP group for
each OpenEdge domain that is configured in your application’s OpenEdge servers.
The administrator must use the designated naming format for the group object’s
common name (
CN) subfield of itsDN. Then, the administrator must assign a specific OpenEdge domain group object membership for each LDAP user account as they would usually do. - Configure PAS for OpenEdge to recognize the designated naming format for
the domain. You do this by using a standard, regular-expression,
group-pattern-matching mechanism. Using the example in Step 1, you designate the
regular expression group
pattern:
ROLE_OED_(.*)In the preceding search pattern:
ROLE_is the Spring Security prefix that is prefixed to LDAP group objectCNfield values to designate it for use in URL authorization.OED_is the prefix chosen to distinguish the LDAP group that specifically represents an OpenEdge domain.- The remaining characters in the pattern represent the OpenEdge domain name that is used in the CLIENT-PRINCIPAL token domain property.
Specify a domain role filter in the authentication manager
The primary use case for the domain role filter is to support multi-tenancy in OpenEdge. If you deploy a multi-tenant ABL application or configure a multi-tenant database, note that Windows itself is not multi-tenant; however, role name mapping can be used to support multi-tenancy. When you configure the generic LDAP authentication manager, you can specify the properties listed and described in the following table to obtain OpenEdge domain names from Active Directory and to validate a user's membership in an OpenEdge domain:
| Property | Description |
|---|---|
OEClientPrincipalFilter.domainRoleFilter |
This property is provided as a security measure to prevent a user from spoofing their membership in an OpenEdge domain or to provide a domain name to an unauthorized user. When you use this property, you specify a pattern using the following syntax:
When an OpenEdge domain name is missing from the client-provided user ID, this property causes PAS for OpenEdge to derive the user's OpenEdge domain membership from the LDAP user account's role names. PAS for OpenEdge also uses the specified pattern to validate that the client user ID's domain name corresponds to an LDAP user account's role. |
OEClientPrincipalFilter.validateClientDomain |
This property validates that the client’s user ID is mapped to a specific OpenEdge domain through role names that are loaded from Active Directory. |