Plugin Referenz - Airlock IAM 8.4.1
Plugin Index
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Abort Step
errorCode
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) stepId
) customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.application.configuration.step.AbortStepConfig
id: AbortStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
errorCode:
preCondition:
requiresActivation: false
skipCondition:
stepId:
AcaPy SSI Service
adminApiEndpoint
) apiKey
) httpClient
)
type: com.airlock.iam.ssi.application.configuration.acapy.AcaPySsiServiceConfig
id: AcaPySsiServiceConfig-xxxxxx
displayName:
comment:
properties:
adminApiEndpoint:
apiKey:
httpClient:
Accepted SSO Tickets Clean-up Task
Task to clean up expired accepted SSO tickets entries from the database.
It is recommended to schedule this task during a time with little traffic. Depending on the number of expired accepted SSO tickets, the task may take some time to complete.
Note: The clean up task ignores tenant IDs, all expired SSO tickets are deleted regardless of their tenant IDs.
acceptedSsoTicketRepository
) Defines the accepted SSO ticket repository from which expired tickets are to be removed.
Note that this repository may be different from the one configured in the service container which stores accepted SSO tickets used to access it and rejects previously accepted ones.
batchSize
) During clean-up, accepted SSO tickets are deleted in batches of this size.
This ensures that any row locks on the database are very short-lived, not affecting parallel ticket insertions. This value should not be set too high to prevent very long running transactions. Accepted SSO ticket clean-up will repeat deleting this number of tickets until all expired tickets have been cleaned up. Therefore, this task can take some time when a lot of accepted SSO tickets are present.
This size should be chosen so that every batch does not take longer than 5 seconds. The average runtime of the batches can be found in the task's logs.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.sso.AcceptedSsoTicketsCleanupTaskConfig
id: AcceptedSsoTicketsCleanupTaskConfig-xxxxxx
displayName:
comment:
properties:
acceptedSsoTicketRepository:
batchSize: 1000
Accepting Authenticator
There are no configuration properties.
The plugin writes the canonical class name description of this plugin to the context data container. The class name is stored under the key authPluginClassName
. A short description of this authentication method is stored under the key authMethodShortDesc
. This information may be used by callers.
type: com.airlock.iam.core.misc.impl.authen.AcceptingAuthenticator
id: AcceptingAuthenticator-xxxxxx
displayName:
comment:
properties:
Accepting Password Service
type: com.airlock.iam.core.misc.impl.authen.AcceptingPasswordService
id: AcceptingPasswordService-xxxxxx
displayName:
comment:
properties:
Access Cookie Identity Propagator
This plugin performs a HTTP POST request with the username and the password the user entered on a login form to the configured application and it expects this application to set an access cookie. This access cookie is then set to the response object involved in the identity propagation process.
This plugin requires that the caller of the identity propagator puts the username and the password into the parameter map. The username must be stored under the key USERNAME
and the password under the key PASSWORD
.
The plugin is thought to be used in situations where there is a legacy application providing access cookies after a weak authentication process (username and password) and these access cookie should be used in a different authenticaiton process for telling other legacy applications (that are "used to" the access cookie) about the authenticated user.
accessCookieSourceUrl
) See note in plug-in description when using SSL (HTTPS instead of HTTP).
httpParamUsername
) httpParams
) In many cases, the submit button value must be sent to an application to make it think that the button has been pressed.
httpParamPassword
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- In keystores like JKS, the keystore can be opened and used but the integrity of the keystore is not checked.
- In keystores like PKCS12, the keystore cannot be opened an an error occurs.
connectTimeout
) correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) cookies
)
type: com.airlock.iam.core.misc.impl.sso.AccessCookieIdentityPropagator
id: AccessCookieIdentityPropagator-xxxxxx
displayName:
comment:
properties:
accessCookieSourceUrl:
allowOnlyTrustedCerts: true
connectTimeout: 10
cookies:
correlationIdHeaderName:
httpParamPassword:
httpParamUsername:
httpParams:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
verifyServerHostname: true
Account Link Consistency User Change Listener
- on user deletion: delete all account links assigned to that user.
- on user name change: update the account links to the new user name.
persisterConfig
)
type: com.airlock.iam.login.application.configuration.oauth2.persistence.AccountLinkConsistencyUserChangeListener
id: AccountLinkConsistencyUserChangeListener-xxxxxx
displayName:
comment:
properties:
persisterConfig:
Account Link Database Repository
sqlDataSource
) tableName
) sequenceName
) tenantId
) If no value is configured, then 'no_tenant' is used as value on the database.
logQueries
)
type: com.airlock.iam.common.application.configuration.accountlink.persistence.AccountLinkDatabasePersisterConfig
id: AccountLinkDatabasePersisterConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sequenceName:
sqlDataSource:
tableName: account_link
tenantId:
Account Link Linking Initiation Step
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.AccountLinkLinkingInitiationStepConfig
id: AccountLinkLinkingInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Account Link Management Config
accountLinkPersister
)
type: com.airlock.iam.admin.application.configuration.accountlink.AccountLinkManagementConfig
id: AccountLinkManagementConfig-xxxxxx
displayName:
comment:
properties:
accountLinkPersister:
Account Link Management UI
Depending on the configuration, the user interface allows an authenticated user:
- to delete an account link.
- to add an account link.
The account link management interface is accessible at /<loginapp-uri>/ui/app/protected/account-links after user authentication.
flowToLinkAccount
) flowToUnlinkAccount
) pageExitTarget
) If configured, an additional button is displayed on the account link management to exit the page. On click, this button redirects the user to the configured target.
To redirect to a target application, redirect to the corresponding "Authentication Flow". If the flow can be skipped due to the obtained tags, the user is directly forwarded to the target application.
type: com.airlock.iam.selfservice.application.configuration.ui.accountlinks.AccountLinkManagementUiConfig
id: AccountLinkManagementUiConfig-xxxxxx
displayName:
comment:
properties:
flowToLinkAccount:
flowToUnlinkAccount:
pageExitTarget:
Account Link Management UI Redirect
type: com.airlock.iam.selfservice.application.configuration.ui.accountlinks.AccountLinkManagementFlowRedirectTargetConfig
id: AccountLinkManagementFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
Account Link Removal Initiation Step
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.AccountLinkDeletionInitiationStepConfig
id: AccountLinkDeletionInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Account Linking Lists Self Services
accessCondition
) Precondition that must be fulfilled for a user to access the account link and provider list.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.token.AccountLinkingListsSelfServiceRestConfig
id: AccountLinkingListsSelfServiceRestConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
Account Linking Required Red Flag
name
)
type: com.airlock.iam.oauth2.application.configuration.accountlinking.AccountLinkingRequiredRedFlagConfig
id: AccountLinkingRequiredRedFlagConfig-xxxxxx
displayName:
comment:
properties:
name: OAUTH2_ACCOUNT_LINKING_REQUIRED
Account Linking Required Red Flag Condition
redFlag
)
type: com.airlock.iam.oauth2.application.configuration.accountlinking.AccountLinkingRequiredConditionConfig
id: AccountLinkingRequiredConditionConfig-xxxxxx
displayName:
comment:
properties:
redFlag:
Account Linking Self Service Config
askForConfirmationBeforeLinking
) accountInfo
) This property is helpful to display data that uniquely and understandably identifies an account, e.g. to display the user's email if available.
type: com.airlock.iam.oauth2.application.configuration.accountlinking.AccountLinkingSelfServiceConfig
id: AccountLinkingSelfServiceConfig-xxxxxx
displayName:
comment:
properties:
accountInfo:
askForConfirmationBeforeLinking: true
Ace Radius Token Verifier
This plug-in supports multiple ACE/RSA servers and failover.
The ACE server must be installed/configured to support RADIUS. Here are some configuration hints (may be different for more recent ACE server versions):
- RADIUS support must be activated.
- Create an agent host of type "Unix Agent" with the name and the IP of the host running this client. This makes sure that the ACE server accepts RADIUS requests from the client host.
- Activate the users you like to use on the just created agent host.
Since the RADIUS protocol does not know anything about the different challenge responses (next token required, new pin required, etc.), some RSA/ACE server versions encode them in the state attribute (like a session id). This implementation can check for these special state values and behave accordingly. This is the default setting. If the next token mode (and new pin mode) does not work properly, enable the property Interpret Challenge Messages
. In this case, this plug-in intreprets the reply messages rather than the special state attributes.
radiusServers
) Non-backward compatibility: Before hierarchical plugins were released, the RadiusServer informations were all configured directly in this plugin with a comma separated list. This must be converted by hand.
interpretChallengeMessages
) TRUE
, this plug-in will look at the reply messages in RADIUS responses. The messages are used to distinguish next-token-mode, new-pin-mode, and new-pin-accepted-mode.If the property is set to
FALSE
(default), this plugin interprets the RADIUS state attribute to make this distinction. This is may not work with newer RSA/ACE servers. nasIdentifier
)
type: com.airlock.iam.core.misc.impl.tokenverifier.ace.AceRadiusTokenVerifier
id: AceRadiusTokenVerifier-xxxxxx
displayName:
comment:
properties:
interpretChallengeMessages: false
nasIdentifier:
radiusServers:
Acknowledge Message Step
This can be used for example to inform users about a concrete event happening inside the flow, e.g., a successful mandatory password change, steps inside user self-registration, etc. This step can return a static message ID or a message that was generated by the server. At least one has to be configured. The message ID expects the client to display a corresponding message, while the server message is composed on the server and can therefore contain dynamic properties available in the IAM flow.
The message ID and the server message will both be provided as an additional attribute inside the flow response under the key messageId and serverMessage respectively.
messageId
) serverMessage
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.acknowledgemessage.AcknowledgeMessageStepConfig
id: AcknowledgeMessageStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
messageId:
onFailureGotos:
preCondition:
requiresActivation: false
serverMessage:
skipCondition:
stepId:
tagsOnSuccess:
ACR to Flow Application ID Mapping
acrValue
) flowApplicationId
)
type: com.airlock.iam.login.application.configuration.oauth2.OpenIdConnectAcrToApplicationIdConfig
id: OpenIdConnectAcrToApplicationIdConfig-xxxxxx
displayName:
comment:
properties:
acrValue:
flowApplicationId:
Active Authentication Method
authMethod
)
type: com.airlock.iam.authentication.application.configuration.selection.condition.AuthMethodBasedConditionConfig
id: AuthMethodBasedConditionConfig-xxxxxx
displayName:
comment:
properties:
authMethod:
Active Directory Authentication Failure Mapper
- data 525 - user not found
- data 52e - invalid credentials
- data 530 - not permitted to logon at this time
- data 531 - not permitted to logon at this workstation
- data 532 - password expired
- data 533 - account disabled
- data 701 - account expired
- data 773 - user must reset password
- data 775 - user account locked
type: com.airlock.iam.core.misc.impl.authen.ldap.ActiveDirectoryAuthenticationFailureMapper
id: ActiveDirectoryAuthenticationFailureMapper-xxxxxx
displayName:
comment:
properties:
Active Directory Connector
General Information
If a Microsoft Active Directory is used to manage the users, only this Plugin needs to be configured to handle the different user-related directory tasks. This MS AD connector implements the Airlock IAM Plugin interfaces: Authenticator, UserIterator, LicenseUserCounter, UserPersister, CredentialPersister, PasswordService, PasswordPolicy, and PasswordAuthenticator
- Only standard Active Directory user attributes are used. Therefore its not necessary to extend the schema.
- Active Directory features like recursive group membership, password policies and password histories are supported.
- Changing passwords is possible when the connection to the AD is secured using SSL/TLS.
- Multiple AD servers can be configured for failover or load balancing.
- Multiple "User Search Bases" and "Group Search Bases" can be specified.
This plugin works best with Microsoft Active Directory server 2008R2 and later.
Note on Stealth-Mode (Zero-Information Leakage)
This plugin provides "stealth" in the sense that it does not reveal information about the factor that prevented the successful login but it does not provide protection against denial of service attacks based on locking user accounts.
If used in conjunction with the "Stealth Mode" (see "Main Authenticator" plugin), it is strongly recommended to enable the "soft account lock" feature of this plugin (see property below).
Note on using this plugin only for password checks
When only using this plugin to check the user's password, additional features like role lookup or context data retrieval may not work as expected.
connectionPool
) isReadOnly
) If enabled, the Active Connector plugin does not write any data to the AD except for new passwords (changing and setting passwords can be disabled in the global password settings).
This allows using a service account user with only few privileges.
If enabled, the following data is not written to the AD (and therefore some features may not work as expected):
- Context data (e.g. changes to user's postal address)
- Credential data (e.g. change of mobile phone number)
- User unlocking (after password change or from the Adminapp)
- Enforcing password change (after setting a new password in the Adminapp)
Note that individual context attributes can be made read-only using the configuration property "Read-Only Attributes".
userIdAttributeName
) credentialDataAttribute
) The LDAP attribute with credential data (e.g. mobile phone number for mTAN/SMS authentication or email address for certificate validation).
If the same attribute is listed in the property "Binary Attributes", it will be treated as binary data, otherwise it is assumed to be UTF-8 string data.
This property is only required when an additional credential should be checked besides the password.
userSearchBases
) The separate property "User Search Scope" controls whether users are only searched in the nodes defined by this property or in its subtrees as well.
userSearchScope
) - ONE_LEVEL: Search users only in the specified "User Search Bases" - the subtree is ignored.
- SUBTREE: Search users recursively in the specified "User Search Bases" - considers the complete subtree.
- SUBORDINATE_SUBTREE: Search users recursively in the specified "User Search Bases" - considers the complete subtree from one level below the specified "User Search Bases" and ignores users directly in it.
- BASE: Only the exact entries in the specified "User Search Bases" are considered.
userSearchFilter
) LDAP search filter expression applied when searching for users.
Note that this filter is automatically combined (logical AND) with a username filter based on the "Username Attribute".
The format and interpretation of filter follow RFC 2254.
Example 1 - Consider only entries with object class user: (objectCategory=user)
Example 2 - Consider only entries with object class person: (objectClass=person)
Example 3 - Consider only users in a specific group (no nested groups): (&(objectCategory=Person)(memberOf=cn=snakeOilDepartment,ou=groups,dc=company,dc=com))
Example 4 - Same as example 1 but considering nested groups: (&(objectCategory=Person)(memberOf:1.2.840.113556.1.4.1941:=cn=snakeOilDepartment,ou=groups,dc=company,dc=com))
usernameConversionPattern
) Regular expression pattern containing a group (a region embraced by parentheses) that can be used in conjunction with property "Username Conversion Replacement" in order to transform the username before it is used for searching the user in the directory. If the username does not match the pattern at all, no transformation is performed.
Example: The pattern "(.*)" and the replacement pattern "user.$1" will transform the username "jdoe" to "user.jdoe" before it is used in the directory.
Example: The pattern "user\.(.*)" and the replacement pattern "$1" will transform the username "user.jdoe" to "jdoe" before it is used in the directory.
usernameConversionReplacement
) groupSearchBases
) Groups/roles are not searched if this property is not configured.
The separate property "Group Search Scope" controls whether groups are only searched in the nodes defined by this property or in its subtrees as well.
groupSearchScope
) - ONE_LEVEL: Search groups only in the specified "Group Search Bases" - the subtree is ignored.
- SUBTREE: Search groups recursively in the specified "Group Search Bases" - considers the complete subtree.
- SUBORDINATE_SUBTREE: Search groups recursively in the specified "Group Search Bases" - considers the complete subtree from one level below the specified "Group Search Bases" and ignores groups directly in it.
- BASE: Only the exact entries in the specified "Group Search Bases" are considered.
groupSearchFilter
) Note that this filter is automatically combined (logical AND) with a username filter based on the "Username Attribute".
The format and interpretation of filter follow RFC 2254.
resolveNestedGroups
) Notice that in any case, only groups in the "Group Search Bases" will be found.
staticRoles
) roleFilters
) matchRolesCaseSensitive
) useGroupsFromMemberOfAttribute
) Note that nested roles can NOT be resolved via the memberOf attribute. This can only be done using the groups search. The role lookup through the memberOf attribute is readonly, as is the lookup through the groups search.
searchResultPageSize
) If set to a value greater than zero and the Active Directory supports the SimplePaging control, "paging" is enabled for LDAP searches: This property defines the number of entries to fetch at once when searching in a directory.
This setting may be useful if the Active Directory limits the number of entries in a search result.
If the property is set to zero (the default) or if the server does not announce to support the SimplePaging control, paging is disabled
suppressSubstringSearch
) This may greatly improve search performance in large directories.
softAccountLock
) Lock users when they have more than the configured number of successive incorrect password checks on the AD. (E.g.: the value "2" means that 2 incorrect passwords are still OK).
If the number is smaller than the corresponding setting in AD, this allows "soft-locking" the account if accessed via Airlock IAM without actually locking the account on the AD. This feature may be used to prevent AD accounts from being locked by unsuccessful remote logins.
Note: if "Stealth Mode" is used (see "Main Authenticator" plugin), it is strongly recommended to enable this feature.
unlockUserOnPasswordReset
) checkServersidePasswordPoliciesOnChange
) If enabled the server side password policy is checked when a user changes or resets the password (not when an administrator sets one). This is for example useful to enforce advanced server-side policies like password histories.
Note that the AD might impose further password constraints (e.g. minimal length), that cannot be weakened or disabled with these settings.
contextDataAttributes
) Notice: Context data attributes are string based. Values will be read as strings and are converted to string when written.
To prevent attributes from being changed by Airlock IAM/Login, add them also to the list of "Read-only Attributes".
Notice: The attributes "objectGUID" and "ImmutableID" are always considered read-only.
binaryAttributes
) Those attributes are Base64 encoded for use in Airlock IAM/Login.
If the attribute name from "Credential Data Attribute" is also listed here, the credential data will be treated as binary.
readOnlyAttributes
) userDNContextDataAttribute
) This DN is in the format "uid=user,ou=People,dc=company,dc=ch"
userChangeEventListeners
) domainDN
) passwordSettingsContainerDN
) userCountSearchFilter
) Note: The user count is relevant for the product license. This filter should therefore describe the set of users who are able to authenticate through Airlock IAM.
adLdsMode
)
type: com.airlock.iam.core.misc.impl.activedirectory.ActiveDirectoryConnector
id: ActiveDirectoryConnector-xxxxxx
displayName:
comment:
properties:
adLdsMode: false
binaryAttributes:
checkServersidePasswordPoliciesOnChange: true
connectionPool:
contextDataAttributes:
credentialDataAttribute: mobile
domainDN:
groupSearchBases:
groupSearchFilter: (objectClass=group)
groupSearchScope: SUBTREE
isReadOnly: false
matchRolesCaseSensitive: true
passwordSettingsContainerDN:
readOnlyAttributes:
resolveNestedGroups: true
roleFilters:
searchResultPageSize: 1000
softAccountLock:
staticRoles:
suppressSubstringSearch: false
unlockUserOnPasswordReset: true
useGroupsFromMemberOfAttribute: false
userChangeEventListeners:
userCountSearchFilter:
userDNContextDataAttribute:
userIdAttributeName: sAMAccountName
userSearchBases:
userSearchFilter: (objectCategory=user)
userSearchScope: SUBTREE
usernameConversionPattern:
usernameConversionReplacement:
Active Directory Password Policy
Note: This plugin does only check against certain requirements of the current password if this information is made available in the user data (e.g. latest-password-change-timestamp). Whether this is the case, may depend on the configuration of the underlying user persister.
activeDirectoryConnector
)
type: com.airlock.iam.core.misc.impl.authen.ldap.ActiveDirectoryPasswordPolicy
id: ActiveDirectoryPasswordPolicy-xxxxxx
displayName:
comment:
properties:
activeDirectoryConnector:
Active Directory Password Policy Connector
connectionPool
) domainDN
) passwordSettingsContainerDN
) userIdAttributeName
) searchBases
) searchScope
) Valid values are SUB
and ONE
.
searchFilter
) The format and interpretation of filter follows RFC 2254.
adLdsMode
)
type: com.airlock.iam.core.misc.impl.authen.ldap.ActiveDirectoryPasswordPolicyConnector
id: ActiveDirectoryPasswordPolicyConnector-xxxxxx
displayName:
comment:
properties:
adLdsMode: false
connectionPool:
domainDN:
passwordSettingsContainerDN:
searchBases:
searchFilter: (objectClass=person)
searchScope: SUBTREE
userIdAttributeName: sAMAccountName
Active Directory Password Repository
connector
) allowedPasswordValidityDuration
) If a password is changed, the 'latest password change timestamp' is set and, if this property is defined, the 'next enforced password change timestamp' is updated.
If this property is not defined, the 'next enforced password change timestamp' is not updated.
type: com.airlock.iam.common.application.configuration.password.repository.ActiveDirectoryPasswordRepositoryConfig
id: ActiveDirectoryPasswordRepositoryConfig-xxxxxx
displayName:
comment:
properties:
allowedPasswordValidityDuration:
connector:
Actor Claim from Actor Token (OAuth 2.0 Token Exchange)
Sets the act claim to a claim set containing sub and iss claim from the (required) actor token and nests the original act claim from the subject token data into this claim set.
Nesting the act claim within another expresses a chain of delegation. The outermost act claim represents the current actor while nested act claims represent prior actors. The least recent actor is the most deeply nested. The nested act claims serve as a history trail that connects the initial request and subject through the various delegation steps undertaken before reaching the current actor.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2ActorClaimFromActorTokenConfig
id: OAuth2ActorClaimFromActorTokenConfig-xxxxxx
displayName:
comment:
properties:
Actor Token Unsigned Claims Extractor
Caution: JWT tokens with alg=none are accepted: This may be a security risk.
allowedTokenIssuers
)
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2ActorTokenUnsignedClaimsExtractorConfig
id: OAuth2ActorTokenUnsignedClaimsExtractorConfig-xxxxxx
displayName:
comment:
properties:
allowedTokenIssuers:
Add Authentee Attribute Config
radiusAttribute
) The suffix of the attribute name gives a hint on the data type that this attribute expects in the context data field:
- NV a named value meaning one of a known set of well string keys as defined in the latest FreeRadius dictionary.
- STRING an UTF8 encoded string.
- INT a number that can be represented by 4 bytes.
- BYTES either a byte array or a base64 encoded string.
- IPV4 either an IPv4 address object, a host name or a raw 4 bytes internet address.
- IPV6 either an IPv6 address object, a host name or a raw 16 bytes internet address.
- DATE either a Date object or a number representing seconds since 1.1.1970.
contextDataField
) isSensitive
)
type: com.airlock.iam.servicecontainer.app.application.configuration.radius.AddAuthenteeAttributeConfig
id: AddAuthenteeAttributeConfig-xxxxxx
displayName:
comment:
properties:
contextDataField:
isSensitive: true
radiusAttribute:
Add Roles
staticRoles
)
type: com.airlock.iam.common.application.configuration.role.AddRoleTransformationConfig
id: AddRoleTransformationConfig-xxxxxx
displayName:
comment:
properties:
staticRoles:
Add Scope From Request Parameter
Will add the scopes from the token exchange "scope" request parameter.
If the token exchange "scope" request parameter is not provided or empty, no scopes will be added.
patterns
)
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.scope.OAuth2TokenExchangeRequestParameterScopeProcessorConfig
id: OAuth2TokenExchangeRequestParameterScopeProcessorConfig-xxxxxx
displayName:
comment:
properties:
patterns:
Add Scope From Subject Token
Will add the scopes from the subject token's "scope" data.
If the subject token's "scope" data is string-valued, it is parsed as an OAuth 2.0 access token scope as defined in RFC6749. If the subject token's "scope" data is string-valued but its format does not conform with the specification, it will be ignored.
If the subject token's "scope" data is a string array, each value is parsed as a single OAuth 2.0 scope value as defined in RFC6749. If the subject token's "scope" data is an array but any of its values is not a string or does not conform with the specification, the whole array will be ignored.
If the subject token's "scope" data is not present, is neither a string nor a string array, or is an empty array, it will be ignored.
patterns
)
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.scope.OAuth2TokenExchangeSubjectTokenScopeProcessorConfig
id: OAuth2TokenExchangeSubjectTokenScopeProcessorConfig-xxxxxx
displayName:
comment:
properties:
patterns:
Add Static Scope
values
) The values that will be added to the scope.
Scope tokens must consist of the following characters: %x21 / %x23-5B / %x5D-7E (see RFC6749)
.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.scope.OAuth2TokenExchangeStaticScopeProcessorConfig
id: OAuth2TokenExchangeStaticScopeProcessorConfig-xxxxxx
displayName:
comment:
properties:
values:
Additional Context Data
Specifies how to determine a read-only context data value using an SQL query.
The query may use ${xxx} variables to refer to database columns in the main object (e.g. user) the context data is added to.
Example (reading a user): SELECT separateColum FROM OTHER_TABLE WHERE username = ${username}
From the result of the query, the first selected column is interpreted as string and used as context data value.
name
) query
)
type: com.airlock.iam.core.misc.impl.persistency.db.AdditionalContextData
id: AdditionalContextData-xxxxxx
displayName:
comment:
properties:
name:
query:
Additional Password Check Attribute Map
Note: The actual additional attributes must be configured in the corresponding authentication flow.
type: com.airlock.iam.authentication.application.configuration.password.AdditionalPasswordCheckAttributesValueMapProviderConfig
id: AdditionalPasswordCheckAttributesValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
Admin Role Specific Setting
requiredRoles
) userDataSource
) The User Data Source to be used for administrators with matching "Required Admin Roles" configured above.
If not configured, the User Data Source from the Users Configuration is used.
availableUserRoles
) Set of roles assignable to users for administrators with matching "Required Admin Roles" configured above.
Translations for the roles displayed in the Adminapp user management UI can be defined using the Adminapp translation keys roles.user.labels.[rolename].
If no roles are configured, the default user roles are used.
type: com.airlock.iam.admin.application.configuration.users.AdminRoleSpecificSetting
id: AdminRoleSpecificSetting-xxxxxx
displayName:
comment:
properties:
availableUserRoles:
requiredRoles:
userDataSource:
Admin SSO Ticket Request Authentication
queryParameterName
) ticketDecoder
) The ticket decoder plugin used to decode the SSO ticket.
Security note: If tickets are transported via the web browser (in the URL), they need to be protected. Make sure to use an appropriate ticket decoder securing the ticket (e.g. digitally signed and/or encrypted)!
acceptedSsoTicketRepository
) Configures the repository used to store accepted SSO tickets and reject previously accepted ones.
The in-memory repository cannot be used if multiple instances of IAM are deployed in parallel (failover, horizontal scaling). Furthermore, the in-memory repository does not preserve previously accepted SSO tickets across IAM restarts.
contextDataExtractors
) usernameKey
) providedUsernameKey
) The ticket key containing the provided username, which is used for logging and possibly displayed.
This is not combinable with Username Transformation. If the ticket does not contain a provided username, the value from "Username Key" is used.
rolesKey
) userStore
) usernameTransformers
) staticRoles
) rolesBlocklist
)
type: com.airlock.iam.admin.application.configuration.credential.AdminSsoTicketRequestAuthenticationConfig
id: AdminSsoTicketRequestAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
acceptedSsoTicketRepository:
contextDataExtractors:
providedUsernameKey:
queryParameterName:
rolesBlocklist:
rolesKey:
staticRoles:
ticketDecoder:
userStore:
usernameKey: username
usernameTransformers:
Adminapp
startPages
) users
) - Authentication of users
- Management of user credentials and tokens
- Management of users
accessControl
) maintenanceMessages
) administrators
) - Authentication of administrators
- Authorization of administrators
- Management of administrators (optional)
tokens
) - Management of tokens
technicalClients
) rest
) gatewaySettings
) If no settings are configured, extra information from the reverse proxy will not be available and it may be harder to correlate log messages that are written to different log files.
eventSettings
) logViewer
) realmAdministration
) Enables realm administration. This feature limits the rights of administrators to a single realm. All users that a realm administrator creates are assigned to his realm and he can only administer users of his own realm.
The assignment of a realm to an administrator requires super administrator authorization.sessionIdleTimeout
) sessionLifetime
) sameSitePolicy
) Specifies the 'SameSite' cookie attribute of the IAM session cookie 'iam-session-id'. The 'Secure' attribute is automatically set based on whether the request was performed using http or https (see exception for 'None' below).
- Strict: The cookie is not sent in cross-origin requests.
- Lax: The cookie is sent in some cross-origin requests, such as GET requests.
- None: The cookie is sent in cross-origin requests. In this case, the 'Secure' Cookie-Attribute is always set, regardless of whether the request was performed using http or https.Use this setting when using SAML2 in combination with cross-domain POST Bindings.
- No SameSite Attribute: No attribute is set. Browsers apply their default behaviour, usually 'Lax'.
languageSettings
) If not set, the default language is German and the allowed languages are German, English and French.
serviceContainerSharedSecret
) stateRepository
) customLoginUrl
) The page displayed instead of the default login page. This can be used if authentication is done by an external service.
This value must not be URL encoded. Only URLs starting with "https://" or "http://" are treated as absolute URLs, otherwise the redirect is relative. Furthermore, if the URL starts with "app/" or "/app/" the redirect is performed within the Adminapp UI (context path not needed).
This property can be overridden by the loginUrl URL parameter (see Allowed Login URL Pattern).
afterLogoutUrl
) The forward page displayed after the logout if no location parameter is set.
This value must not be URL encoded. Only URLs starting with "https://" or "http://" are treated as absolute URLs, otherwise the redirect is relative. Furthermore, if the URL starts with "app/" or "/app/" the redirect is performed within the Adminapp UI (context path not needed).
This property can be overridden by the afterLogout URL parameter (see Allowed After Logout URL Pattern).
allowedLoginUrlPattern
) A regular expression describing the Login URLs that are allowed to be sent to IAM in the loginUrl URL parameter.
A matching URL will be used to redirect users who have not yet authenticated or whose session has expired. If no pattern is configured, no URL will match. Matching URLs will have precedence over the URL configured in Custom Login URL.
allowedAfterLogoutUrlPattern
) A regular expression describing the Logout URLs that are allowed to be sent to IAM in the afterLogoutUrl URL parameter.
A matching URL will be used to redirect the user after a successful logout in IAM. If no pattern is configured, no URL will match. Matching URLs will have precedence over the URL configured in After Logout URL.
skin
) skinFromParamAllowed
) instanceTag
) contentSecurityPolicy
) Neither the Config Editor nor the Service Container are covered by this CSP.
licenseAnalytics
) Configures the settings for license and usage analytics.
If undefined, no data will be sent.
logUserTrailToDatabase
) Configures the database settings to use when persisting user trail log entries.
If this value is defined, then all user trail log messages generated by the Adminapp module will additionally be forwarded to the database configured within the referenced repository plugin.
All forwarded log entries are stored inside the table "USER_TRAIL_LOG". Note that setting this value does not disable writing log messages to the Adminapp log file.
correlationIdSettings
) Defines settings for correlation ID transfer and logging inside the Adminapp module.
If undefined, no correlation ID will be logged for this module.
customExtensions
)
type: com.airlock.iam.admin.app.application.configuration.Adminapp
id: Adminapp-xxxxxx
displayName:
comment:
properties:
accessControl:
administrators:
afterLogoutUrl: app/login
allowedAfterLogoutUrlPattern:
allowedLoginUrlPattern:
contentSecurityPolicy:
correlationIdSettings:
customExtensions:
customLoginUrl:
eventSettings:
gatewaySettings:
instanceTag:
languageSettings:
licenseAnalytics:
logUserTrailToDatabase:
logViewer:
maintenanceMessages:
realmAdministration:
rest:
sameSitePolicy: LAX
serviceContainerSharedSecret:
sessionIdleTimeout: 30m
sessionLifetime: 8h
skin: blue
skinFromParamAllowed: false
startPages: [viewLog, listUsers, manageTokens]
stateRepository:
technicalClients:
tokens:
users:
Adminapp Content Security Policy
Neither the Config Editor nor the Service Container are covered by this CSP.
contentSecurityPolicy
) The default policy requires to insert a nonce into script tags. Script tags that do not include a nonce will be blocked.
The placeholder '${cspNonce}' in the policy will be replaced with a fresh, randomly generated nonce for each request. The same nonce must be present in all policy relevant tags that were generated by a specific request.
Known use cases requiring CSP customization
- IAM is embedded in an (i)frame: frame-ancestors directive must be relaxed.
Security Warning: The default CSP was designed to offer a good level of security and maintainability. The CSP is validated to work with IAM (see limitations above). Defining a custom CSP may reduce the level of security and may lead to browsers blocking IAM pages. Therefore, the security benefits of a custom policy must be evaluated carefully and IAM must be tested to work with the policy.
type: com.airlock.iam.admin.application.configuration.csp.AdminappContentSecurityPolicyConfig
id: AdminappContentSecurityPolicyConfig-xxxxxx
displayName:
comment:
properties:
contentSecurityPolicy: default-src 'self'; object-src 'none'; script-src ${cspNonce} 'strict-dynamic' 'self'; img-src 'self' data:; connect-src 'self'; base-uri 'self'; frame-ancestors 'none';
Adminapp Event Settings
eventSubscribers
)
type: com.airlock.iam.admin.application.configuration.event.AdminappEventSettingsConfig
id: AdminappEventSettingsConfig-xxxxxx
displayName:
comment:
properties:
eventSubscribers:
Adminapp Language Settings
validLanguages
) defaultLanguage
) resourcesFilePrefix
) Example: If the value of this property is strings, the language dependent files must be "strings_de.properties", "strings_en.properties" and so on and the default file must be "strings.properties".
type: com.airlock.iam.admin.application.configuration.AdminappLanguageSettings
id: AdminappLanguageSettings-xxxxxx
displayName:
comment:
properties:
defaultLanguage: de
resourcesFilePrefix: strings
validLanguages: [de, fr, en]
Adminapp REST API Configuration
smsServiceConfig
) requestAuthentication
) hashFunction
) hashSharedSecret
) Can be used together with the 'Hash Function' to externalize session information to the client.
corsSettings
) csrfProtection
) If enabled, REST endpoints are protected against CSRF attacks.
With this protection, the REST API only accepts requests that contain the custom header X-Same-Domain with an arbitrary non-empty value. In cross-origin resource sharing (CORS), such requests are not considered simple requests and thus must always be preceded by a preflight request, which prevents cross-site request forgery (CSRF) attacks.
Security warning: Disabling this feature may allow CSRF attacks. Only do so if the REST client is unable to comply with the aforementioned restrictions.
usernameTransformers
) linkResponseRewritingEnabled
) If a 'Base URI' is configured, links are rewritten according to the configured value. Otherwise, links are rewritten according to the external view provided by the WAF (if configured an a WAF environment cookie is present).
baseUri
) This property is useful in test environments where you want links contained in REST responses to be relative to the configured base URI. Note that configuring this property will take precedence over link rewriting based on the WAF environment cookie.
Example:
- Property value:
http://myhost:8090/test
- The response from the REST call to
/<adminapp-uri>/rest/maintenance-messages
will contain a link tohttp://myhost:8090/test/rest/maintenance-messages
.
defaultPageSize
) maxPageSize
)
type: com.airlock.iam.admin.application.configuration.AdminappRestConfig
id: AdminappRestConfig-xxxxxx
displayName:
comment:
properties:
baseUri:
corsSettings:
csrfProtection: true
defaultPageSize: 500
hashFunction:
hashSharedSecret:
linkResponseRewritingEnabled: true
maxPageSize: 5000
requestAuthentication:
smsServiceConfig:
usernameTransformers:
Administrators Configuration
authenticator
) Defines how administrators are authenticated interactively. If only authentication using SSO tickets is required, this property is optional.
Note that the Adminapp authentication UI only support username/password login. Configuring second factors or other authentication means will not work and users will not be able to login.
passwordService
) passwordPolicy
) ssoTicketAuthentication
) If specified, ticket-based single sign-on (SSO) is enabled for the Adminapp: Externally authenticated administrators may access the Adminapp without additional login, provided they bring a valid SSO ticket. The ticket is passed to the Adminapp as URL parameter.
administratorsManagement
) usernameTransformers
) Username transformation enables authentication with an alias name, by transforming the name entered into the login form to the internal user ID.
The username transformation configured here is only applied to the interactive username/password login.
Transformers can be chained, e,g. a first transformer could normalize the entered name, and the next transformer would then search for a user with a matching context-data field. A transformer can also signal that it already found the final user ID and that no further transformations should be performed.
type: com.airlock.iam.admin.application.configuration.administrators.AdministratorsConfiguration
id: AdministratorsConfiguration-xxxxxx
displayName:
comment:
properties:
administratorsManagement:
authenticator:
passwordPolicy:
passwordService:
ssoTicketAuthentication:
usernameTransformers:
Administrators Management
enforceRoleCombinations
) assignableRoleCombinations
) Defines a list of roles (or combination of roles). Only the specified roles (or combination of roles) can be assigned to the administrators.
Role combinations are specified using comma-separate entries (e.g. "useradmin,tokenadmin"). These combinations can only be assigned to or removed from an admin together. At least one role (or combination of roles) must contain the "superadmin" role.
Translations for the roles displayed in the administrators management UI can be defined using the Adminapp translation keys roles.admin.labels.[rolename], where [rolename] is one of the entries. E.g.:
- roles.admin.labels.useradmin = User Admin
- roles.admin.labels.useradmin,tokenadmin = Special Admin
privilegeEscalationProtectedAdminRoles
) Defines a list of protected roles. Operations on an administrator with one of these roles can only be performed by another administrator that also at least has one of these roles assigned.
Each entry contains a single role.
superAdminRole
) passwordGenerator
) passwordHashFunction
) NOTE: Some password hashes, such as SHA 256 Password Hash or Scrypt Password Hash, produce binary output. If one of these is used, make sure the persistence layer supports binary data in the hash field and the corresponding persistence plugins (e.g. Database User Store or Ldap Connector) are configured to treat hash values as binary values.
In case the persistence layer expects a string, encode the password hash by wrapping it with an encoder. To achieve this, use the Password Hash Configuration plugin and specify the hash function (such as Scrypt Password Hash) together with the desired encoder. We recommend using the Base64 Password Hash Encoder.
columnsInAdminList
) The data for the columns is taken from the context data container of the available administrators. The configuration of the used admin persister must include the context data properties referenced here.
The columns are displayed in addition to the following columns:
- username
- assigned roles
- locked flag
rowsOnAdminDetailPage
) The data for is taken from the context data container of the selected administrator. The configuration of the used admin persister must include the context data properties referenced here.
adminUserStore
) lockReasons
)
type: com.airlock.iam.admin.application.configuration.administrators.AdministratorsManagement
id: AdministratorsManagement-xxxxxx
displayName:
comment:
properties:
adminUserStore:
assignableRoleCombinations:
columnsInAdminList:
enforceRoleCombinations: true
lockReasons: [LockReason.InitiatedByAdmin]
passwordGenerator:
passwordHashFunction:
privilegeEscalationProtectedAdminRoles:
rowsOnAdminDetailPage:
superAdminRole:
Advanced Location Interpreter Config
- The optional "URI Transformers" are called in the configured order to transform the URI to a new URI. The output of a preceding transformer is used as input of a subsequent transformer. If an URI transformer returns a veto, the default value configured in this plugin is used as the resulting value.
Those plugins are used to perform generic transformations on the URI like regular expression replacements or to use a query parameter as the new URI. - The optional "Value Extractors" are now called in the configured order to extract a string value from the potentially transformed URI. The first extractor able to return a non-empty value stops the chain. If no extractor returns a non-empty value, the whole URI is passed on unchanged.
Those extractors are used to extract a query parameter or a path segment containing the target value. - Finally the optional "String Transformers" are called in the configured order to transform the final string. The output of the preceding transformer is used as input of the subsequent transformer. If a string transformer returns a veto, the default value configured in this plugin is used as overall value.
They can for example be used to normalize values, for example convert the string to lowercase or convert values from one format to another (e.g. convert 'GER' to 'de').
defaultValue
) uriTransformers
) valueExtractors
) stringTransformers
)
type: com.airlock.iam.login.application.configuration.location.interpret.AdvancedLocationInterpreterConfig
id: AdvancedLocationInterpreterConfig-xxxxxx
displayName:
comment:
properties:
defaultValue:
stringTransformers:
uriTransformers:
valueExtractors:
Advanced Migration Selection Option
optionName
) Name of the selection option for this migration subflow.
This includes POST /<loginapp-uri>/rest/public/authentication/migration/options/retrieve and POST /<loginapp-uri>/rest/public/authentication/migration/options/<id>/select
steps
) condition
)
type: com.airlock.iam.authentication.application.configuration.migration.AdvancedMigrationSelectionOptionConfig
id: AdvancedMigrationSelectionOptionConfig-xxxxxx
displayName:
comment:
properties:
condition:
optionName:
steps:
AES 128 GCM State Encryption
State encryption that uses AES/GCM with 128-bit keys to encrypt all values stored in the state repository.
secretKey
) A random Base64 string with 128 bits (16 bytes) can be generated e.g. using openssl as follows: openssl rand -base64 16
CAUTION: Once the key is set and has been used to encrypt the key must not be changed!. Data encrypted with a different key cannot be recovered.
type: com.airlock.iam.common.application.configuration.state.Aes128GcmStateEncryptionConfig
id: Aes128GcmStateEncryptionConfig-xxxxxx
displayName:
comment:
properties:
secretKey:
AES256 Decryption Ticket Decoder
password
) requireAuthenticatedEncryption
) If possible this flag should be enabled.
The AES256EncryptionTicketEncoder uses the GCM Mode by default.maxPBKDF2Iterations
)
type: com.airlock.iam.core.misc.util.ticket.codec.AES256DecryptionTicketDecoder
id: AES256DecryptionTicketDecoder-xxxxxx
displayName:
comment:
properties:
maxPBKDF2Iterations: 32000
password:
requireAuthenticatedEncryption: true
AES256 Encryption Ticket Encoder
The key-value pairs are first encoded as described in
password
) requireAuthenticatedEncryption
) If possible this flag should be enabled.
type: com.airlock.iam.core.misc.util.ticket.codec.AES256EncryptionTicketEncoder
id: AES256EncryptionTicketEncoder-xxxxxx
displayName:
comment:
properties:
password:
requireAuthenticatedEncryption: true
Age Check Password Policy
Note: This plugin does only check the minimum age of the current password if this information is made available in the user data (latest-password-change-timestamp). Whether this is the case, may depend on the configuration of the underlying user persister.
Note: This check should not be performed if the user is forced to change the password.
minRequiredPasswordAge
)
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyAgeCheck
id: PwdPolicyAgeCheck-xxxxxx
displayName:
comment:
properties:
minRequiredPasswordAge:
Aggregate Report
fileNamePrefix
) The prefix "aggregate-" is used if none is defined.
The generated name is -timestamp[.]fileNameSuffix
) propertiesAggregator
) reportRenderer
)
type: com.airlock.iam.core.misc.util.report.aggregation.AggregateReport
id: AggregateReport-xxxxxx
displayName:
comment:
properties:
fileNamePrefix: aggregate-
fileNameSuffix:
propertiesAggregator:
reportRenderer:
Airlock 2FA Activation Authentication UI
stepId
) showAppDeviceActivationLink
)
type: com.airlock.iam.login.rest.application.configuration.ui.authentication.Airlock2FAActivationAuthenticationStepUiConfig
id: Airlock2FAActivationAuthenticationStepUiConfig-xxxxxx
displayName:
comment:
properties:
showAppDeviceActivationLink: true
stepId:
Airlock 2FA Activation Authentication UI (with additional Activation)
stepId
) showAppDeviceActivationLink
)
type: com.airlock.iam.login.rest.application.configuration.ui.authentication.Airlock2FAAdditionalActivationAuthenticationStepUiConfig
id: Airlock2FAAdditionalActivationAuthenticationStepUiConfig-xxxxxx
displayName:
comment:
properties:
showAppDeviceActivationLink: true
stepId:
Airlock 2FA Activation Letter Order Step
Step to non-interactively order an activation letter. This step doesn't create the letter, but places an order. It is thus recommended to use 'Airlock 2FA Device Activation Letter Order (Batch)' for the 'Activation Letters' option in the 'Airlock 2FA Token Controller' to create the letters.This step has to be added after an identifying step, e.g. a Password Authentication Step. Further, the user has to have an Airlock 2FA Account.
When this step completes successfully, either a new letter order is created or a letter order is already pending.airlock2FASettings
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.airlock2fa.application.configuration.Airlock2FALetterOrderStepConfig
id: Airlock2FALetterOrderStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Activation Letter Order User Event Listener
- an Airlock 2FA account;
- an order for an Airlock 2FA activation letter to register the first Airlock 2FA device. All opened orders will be batch processed by the "Airlock 2FA Activation Letter Order Task" in service container to create the necessary activation letters.
airlock2faSettings
) condition
)
type: com.airlock.iam.airlock2fa.application.configuration.Airlock2FAActivationLetterOrderUserEventListener
id: Airlock2FAActivationLetterOrderUserEventListener-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
condition:
Airlock 2FA Activation Letter Task
Settings to batch process Airlock 2FA activation letter orders. Each order will generate at most one activation letter. No activation letter will be generated for a permanently disabled Airlock 2FA account. Each order will be deleted after being processed.
An Airlock 2FA letter contains a QR code to be scanned and is typically necessary for the registration of the first Airlock 2FA device.
Note that once the letter is generated, Airlock IAM is no longer involved in the activation of a user's device. This implies in particular, that a user who has been locked out after the generation of an activation letter could still use it to successfully register an Airlock 2FA device. Login will of course remain impossible as long the the user is locked out.
airlock2faSettings
) userStore
) renderer
) The following placeholders can be used in the templates
${User Context Data Name}
- context data of the user.${activationQRCode}
- QR code image for the activation. Image size in document can be adjusted:${activationQRCode,imageSize,width in points,height in points}
${expires}
- expiring date of the activation. Can be used with extended format (e.g.${expires,date,short}
)
workingDirectory
) If this property is defined, activation letters are not directly generated into the output directory (see other property) but they are generated into this working directory and are then moved into the output directory once they are done.
This helps to solve problems with processes that automatically read the rendered activation letters and therefore might not see the fully rendered result. Make sure that the working directory and the output directory reside in the same file system (otherwise the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
outputDirectory
) languageContextDataName
) enrollmentValidityInSeconds
) Note: This value is only used for the validity of the QR code in the enrollment letter and does not affect enrollment self-services.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.airlock2fa.Airlock2FAActivationLetterOrderTaskConfig
id: Airlock2FAActivationLetterOrderTaskConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
enrollmentValidityInSeconds: 604800
languageContextDataName:
outputDirectory:
renderer:
userStore:
workingDirectory:
Airlock 2FA Activation Step
Step to add a new Airlock 2FA device. This step will generate a QR code (and an Airlock 2FA account if necessary) that needs to be scanned by the device to be added.
Depending on the use-case, this step should be configured as an 'Authentication Flow Step', 'Protected Self-Service Flow Step' or 'User-Self-Registration Flow Step'.
- Migration to Airlock 2FA (Authentication Flow)
- In this case, the user does not yet have any Airlock 2FA device, but already has a different second authentication factor (see Security note) that needs to be migrated to Airlock 2FA. This step needs to be configured as an 'Authentication Flow Step' inside a 'Migration Selection Step'. Upon successful migration, the user will have an Airlock 2FA account and a newly registered Airlock 2FA device that can be used for strong authentication. The user's default authentication method will have been changed to Airlock 2FA.
- Activation of an Airlock 2FA device (Protected Self-Service Flow)
- In this case, the user already has a second authentication factor (see Security note) and needs to activate an Airlock 2FA device. This typically happens, when the user already has Airlock 2FA as a second authentication factor and needs to activate an additional device. This steps needs to be configured as a 'Protected Self-Service Flow Step'. Upon successful activation, the user will have an Airlock 2FA account and a newly registered Airlock 2FA device that can be used for strong authentication. In contrast to the migration scenario above, the user's default authentication method will remain unchanged.
- Activation of an Airlock 2FA device (User-Self-Registration Flow)
- In this case, the flow step will register a futurae user account with the device, that was used to scan the activation code. It is required to add an 'Airlock 2FA Token Persisting Handler' in the 'User Persisting Step' to persist the linked futurae user account with the IAM user.
In the migration and self-service scenarios, an optional 'Airlock 2FA Device Edit Step' can be configured afterwards, to allow the user to edit the newly registered device, e.g., changing its display name.
Note: This step can only register one device in one flow execution. The flow has to be started multiple times when more devices are needed.
Security note: For migration and self-service flows this step should be restricted to strongly authenticated users. To do so a 'Pre-Condition Tag' should be used to ensure that the user is strongly authenticated (using at least one of his pre-existing second authentication factors). In particular, this step should not be used for a user authenticated with username and password only. In the password only use-case, the (physical) generation of an 'Airlock 2FA Device Activation Letter' is necessary.
airlock2faSettings
) enrollmentTimeoutSeconds
) Note: This value is not used when generating activation letters.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.airlock2fa.application.configuration.Airlock2FAActivationStepConfig
id: Airlock2FAActivationStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
enrollmentTimeoutSeconds: 300
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Activation Step (with additional Activation)
Step to add a new Airlock 2FA device. This step will generate a QR code (and an Airlock 2FA account if necessary) that needs to be scanned by the device to be added.
This Step allows device activation during the authentication flow even when the user already has a device. This step is able to add both the first device during a migration or an additional device.
airlock2faSettings
) enrollmentTimeoutSeconds
) Note: This value is not used when generating activation letters.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.airlock2fa.auth.application.configuration.Airlock2FAAdditionalActivationStepConfig
id: Airlock2FAAdditionalActivationStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
enrollmentTimeoutSeconds: 300
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Activation Step Self-Registration UI
stepId
) showAppDeviceActivationLink
)
type: com.airlock.iam.userselfreg.application.configuration.ui.Airlock2FAActivationUserSelfRegStepUiConfig
id: Airlock2FAActivationUserSelfRegStepUiConfig-xxxxxx
displayName:
comment:
properties:
showAppDeviceActivationLink: true
stepId:
Airlock 2FA Activation Step Self-Service UI
stepId
) showAppDeviceActivationLink
)
type: com.airlock.iam.selfservice.application.configuration.ui.Airlock2FAActivationSelfServiceStepUiConfig
id: Airlock2FAActivationSelfServiceStepUiConfig-xxxxxx
displayName:
comment:
properties:
showAppDeviceActivationLink: true
stepId:
Airlock 2FA Activation Trusted Session Binding Step
This step also provides a REST endpoint to poll the status of an activation.
airlock2faSettings
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.airlock2fa.auth.application.configuration.Airlock2faActivationTrustedSessionBindingStepConfig
id: Airlock2faActivationTrustedSessionBindingStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
authenticationMethodId: AIRLOCK_2FA
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Apply Device Deletion Change
airlock2FASettings
)
type: com.airlock.iam.selfservice.application.configuration.step.Airlock2FAApplyDeviceDeletionChangeConfig
id: Airlock2FAApplyDeviceDeletionChangeConfig-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
Airlock 2FA Apply Device Edit Change
airlock2FASettings
)
type: com.airlock.iam.selfservice.application.configuration.step.Airlock2FAApplyDeviceEditChangeConfig
id: Airlock2FAApplyDeviceEditChangeConfig-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
Airlock 2FA Approval UI (Protected Self-service)
stepId
) showAppApprovalLink
)
type: com.airlock.iam.selfservice.application.configuration.ui.Airlock2FASelfServiceApprovalStepUiConfig
id: Airlock2FASelfServiceApprovalStepUiConfig-xxxxxx
displayName:
comment:
properties:
showAppApprovalLink: true
stepId:
Airlock 2FA Approval UI (Public Self-service)
stepId
) showAppApprovalLink
)
type: com.airlock.iam.publicselfservice.application.configuration.ui.Airlock2FAPublicSelfServiceApprovalStepUiConfig
id: Airlock2FAPublicSelfServiceApprovalStepUiConfig-xxxxxx
displayName:
comment:
properties:
showAppApprovalLink: true
stepId:
Airlock 2FA Authentication Data Map
Provides Airlock 2FA authentication information regarding the Auth Token ID device, as well as cooldown information of the authentication device.
The provided Auth Token ID information concerns the device from the Auth Token ID and is available as soon as the user has used or activated an Airlock 2FA device as a second factor for authentication in this session. Currently, the following values are provided:
- a2fa-auth-token-device-id: This key provides the device ID of the Airlock 2FA device.
- a2fa-auth-token-device-type: This key provides the device type of the Airlock 2FA device. It can have the following values:
- ios
- android
- hardware
- a2fa-auth-token-device-display-name: This key provides the display name of the Airlock 2FA device.
- a2fa-auth-token-device-enrollment-timestamp: Timestamp (as date-time object) of the point in time when the Airlock 2FA device was enrolled. This value can be used by template-based providers to format the timestamp into a specific date format.
The cooldown information concerns the device that was used for authentication and is available as soon as the user has successfully used an Airlock 2FA device for authentication in this session. Unlike the Auth Token ID, which is also updated after registering a new device, the values provided here only concern the device used for the actual authentication. Currently, the following values are provided:
- a2fa-cooldown-auth-device: This key reports whether or not the Airlock 2FA device used during authentication is in cooldown. This key can have the following values:
- cooldown: the device is in cooldown
- active: the device is fully active
- a2fa-cooldown-ends: Timestamp (as date-time object) of the point in time when cooldown will end for the Airlock 2FA device that was used during authentication. If the Airlock 2FA device used for authentication is active (not in cooldown), this key is not supplied. This value can be used by template-based providers to format the timestamp into a specific date format.
The following key is always provided and reports what type of devices the user has in the account:
- a2fa-cooldown-devices: This key can have the following values:
- has_active: at least one active Airlock 2FA device is available
- all_cooldown: only Airlock 2FA devices in cooldown are available
- none: no Airlock 2FA devices are available
airlock2faSettings
)
type: com.airlock.iam.airlock2fa.application.configuration.Airlock2FAAuthenticationDataValueMapProviderConfig
id: Airlock2FAAuthenticationDataValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
Airlock 2FA Authentication Step
The identifier of the authentication method for this step is 'AIRLOCK_2FA' and is also the identifier for failed authentication attempts.
Note that for mobile-only authentication scenarios, the other authentication plugin "Airlock 2FA Mobile Only Authentication Step" should be used.
factors
) Priority list of all enabled factors. Only factors that are in this list can be used for authentication. The factors are offered in the configured order.
Online factors (One-Touch and Online QR Code) must come before all other factors. It is recommended to include at least one offline factor.
Available factors:
- One-Touch: a push message is sent to the user's mobile app, where it must be approved. This is an online factor and will require device selection if the user has multiple devices.
- Online QR Code: a QR code is displayed in the browser, which has to be scanned by a mobile app and approved there. This is an online factor. No prior device selection is required.
- Passcode: the device (mobile app or hardware token) generates a time-dependent code (OTP) that has to be entered manually in the browser. This is an offline factor. No prior device selection is required.
- Offline QR Code: a QR code is displayed in the browser which has to be scanned by a mobile app or hardware token. The device displays a code (OTP) that must be entered manually in the browser. This is an offline factor and will require device selection if the user has multiple devices.
maxFailedPasscodeCheckAttempts
) enforceDeviceSelection
) enablePushToAll
) If Push-to-All is enabled for One-Touch, device selection is never required for One-Touch. Push notifications are sent to all of a user's devices and authentication can be approved on any of the devices.
The combination of Push-to-All and "Cooldown Period" can result in push notifications being sent to devices that are currently still in cooldown. However, those devices can not be used for successfully completing the authentication.
The combination of Push-to-All and "Lock User on Fraud" could have undesired effects, because users might report fraud in legitimate use-cases.
messageProvider
) Creates the message that will be displayed on the user's device when using One-Touch. If no message provider is configured, only a title with the fixed translation key "airlock2fa.one-touch.authentication-title" or its fallback value "Login" is used.
Using a custom Message Provider could prevent authentication with a smartwatch: Because additional information is included, the app forces the user to scroll through the message (which might not be supported by the watch).
qrCodeMessageProvider
) Creates the message that will be displayed on the user's device when using Online QR Code or Offline QR Code factors. If no message provider is configured, the default title of Futurae will be shown (without any additional information items).
Note that the Login ID cannot be included because it is only available in the One-Touch Message Provider.
Also, because of technical limitations, the title of Offline QR Codes is always the default title from Futurae, the configuration is ignored.
generateLoginId
) If enabled, a random ID is generated and shown to the user during One-Touch authentication.
The ID is shown on the Airlock 2FA device and on the login page, allowing the user to correlate the session.
The "One-Touch Message Provider" property must be configured for the Login ID to be displayed on the device.
If the multi-numbered challenge feature is enabled on the Futurae service, "Generate One-Touch Login ID" should be disabled. In that case, the Login ID does not provide any security enhancement, but severely impacts usability.
tagsOnSuccessfulOneTouch
) tagsOnSuccessfulOnlineQrCode
) tagsOnSuccessfulPasscodeCheck
) tagsOnSuccessfulOfflineQrCode
) tagsOnSuccessfulBypass
) airlock2faSettings
) respectCooldownPeriod
) If enabled, devices in cooldown cannot be used for authentication.
If disabled, the step ignores the "Cooldown Period" for new devices configured in the "Airlock 2FA Settings". This is typically used for authentication steps that protect low-risk applications, such as a portal page, which can also be accessed using devices in cooldown.
If no "Cooldown Period" is defined, enabling this property has no effect.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.airlock2fa.auth.application.configuration.Airlock2FAUserFactorAuthenticationStepConfig
id: Airlock2FAUserFactorAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
enablePushToAll: false
enforceDeviceSelection: false
factors: [One-Touch, Passcode, Offline QR Code]
generateLoginId: true
interactiveGotoTargets:
maxFailedPasscodeCheckAttempts: 3
messageProvider:
onFailureGotos:
preCondition:
qrCodeMessageProvider:
requiresActivation: false
respectCooldownPeriod: true
skipCondition:
stepId:
tagsOnSuccess:
tagsOnSuccessfulBypass:
tagsOnSuccessfulOfflineQrCode:
tagsOnSuccessfulOneTouch:
tagsOnSuccessfulOnlineQrCode:
tagsOnSuccessfulPasscodeCheck:
Airlock 2FA Authentication UI
stepId
) showAppApprovalLink
)
type: com.airlock.iam.login.rest.application.configuration.ui.authentication.Airlock2FAUserFactorAuthenticationStepUiConfig
id: Airlock2FAUserFactorAuthenticationStepUiConfig-xxxxxx
displayName:
comment:
properties:
showAppApprovalLink: true
stepId:
Airlock 2FA Authenticator
Customize the string resource airlock2fa.one-touch.authentication-title to define the text that is displayed after the word "Approve" for One-Touch authentications.
airlock2faSettings
) factors
) Priority list of all enabled factors. Only factors that are in this list can be used for authentication. The factors are offered in the configured order.
Online factors (One-Touch and Online QR Code) must come before all other factors. It is recommended to include at least one offline factor.
Available factors:
- One-Touch: a push message is sent to the user's mobile app, where it must be approved. This is an online factor and will require device selection if the user has multiple devices.
- Passcode: the device (mobile app or hardware token) generates a time-dependent code (OTP) that has to be entered manually. This is an offline factor. No prior device selection is required.
- Offline QR Code: a QR code is returned which has to be scanned by a mobile app or hardware token. The device displays a code (OTP) that must be entered manually. This is an offline factor and will require device selection if the user has multiple devices.
userPersister
) stringResourcesFile
) strings
, the language dependent files must be strings_de.properties
, strings_en.properties
and so on and the default file must be strings.properties
.
type: com.airlock.iam.airlock2fa.auth.application.configuration.Airlock2FAAuthenticatorConfig
id: Airlock2FAAuthenticatorConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
factors: [One-Touch, Passcode, Offline QR Code]
stringResourcesFile: strings
userPersister:
Airlock 2FA Consistency User Change Listener
- on user deletion: delete associated Airlock 2FA account.
- on user name change: updates the user reference for the Airlock 2FA account.
airlock2FASettings
)
type: com.airlock.iam.airlock2fa.application.configuration.Airlock2FAConsistencyUserChangeListener
id: Airlock2FAConsistencyUserChangeListener-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
Airlock 2FA Database Repository
sqlDataSource
) storageEncryptionConfig
) logQueries
) tenantId
) If no value is configured, then 'no_tenant' is used as value on the database.
type: com.airlock.iam.airlock2fa.application.configuration.Airlock2FARepositoryConfig
id: Airlock2FARepositoryConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sqlDataSource:
storageEncryptionConfig:
tenantId:
Airlock 2FA Delete Devices Step
Common use cases which can be achieved with this step are:
- Remove all Airlock 2FA devices.
- Remove all Airlock 2FA devices except previously activated devices in this flow.
- Remove all Airlock 2FA devices except the last registered device.
- Remove the Airlock 2FA device which was used for login unless it is the last device.
airlock2FASettings
) devicesToDelete
) In case no device ID is provided, the step succeeds without deleting any devices.
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.airlock2fa.application.configuration.Airlock2FADeleteDevicesStepConfig
id: Airlock2FADeleteDevicesStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
customFailureResponseAttributes:
customResponseAttributes:
devicesToDelete:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Device Activated
type: com.airlock.iam.login.application.configuration.event.Airlock2FADeviceActivatedSubscribedEventConfig
id: Airlock2FADeviceActivatedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Airlock 2FA Device Delete Initiation Step
airlock2FASettings
) canUserDeleteAllDevices
) Deprecated: this property will be removed in the next major version of Airlock IAM. Instead, configure the plugin "Airlock 2FA Device Deletion Possible" as an Access Condition inside the protected self-service flow where this step is configured. This ensures that a user has sufficiently many Airlock 2FA app devices before entering the flow.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.Airlock2FASelfServiceDeviceDeleteInitiationStepConfig
id: Airlock2FASelfServiceDeviceDeleteInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
canUserDeleteAllDevices: false
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Device Deleted
type: com.airlock.iam.common.application.configuration.event.Airlock2FADeviceDeletedSubscribedEventConfig
id: Airlock2FADeviceDeletedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Airlock 2FA Device Deletion Possible
airlock2faSettings
) canUserDeleteAllDevices
)
type: com.airlock.iam.airlock2fa.application.configuration.condition.Airlock2FADeviceDeletionPossibleConditionConfig
id: Airlock2FADeviceDeletionPossibleConditionConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
canUserDeleteAllDevices: false
Airlock 2FA Device Edit Initiation Step
airlock2FASettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.Airlock2FASelfServiceDeviceEditInitiationStepConfig
id: Airlock2FASelfServiceDeviceEditInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Device Edit Step
Step to edit a newly added Airlock 2FA device.
This step can be used after an 'Airlock 2FA Activation Step' to, for example, change the display name of the new device. See the documentation of 'Airlock 2FA Activation Step' to know in which cases this step should be configured as an 'Authentication Flow Step' or as a 'Protected Self-Service Flow Step'.
Note that this step can not be used to edit already activated Airlock 2FA devices (which were not activated by an 'Airlock 2FA Activation Step' in the same session). For this use-case, a 'Protected Self-Service Flow' with an 'Airlock 2FA Device Edit Initiation Step' and a corresponding 'Apply Changes Step' should be used.
airlock2faSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.airlock2fa.application.configuration.Airlock2FADeviceEditStepConfig
id: Airlock2FADeviceEditStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Device In Cooldown Used
type: com.airlock.iam.login.application.configuration.event.Airlock2FADeviceInCooldownUsedSubscribedEventConfig
id: Airlock2FADeviceInCooldownUsedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Airlock 2FA Device List
airlock2FASettings
) accessCondition
) Precondition that must be fulfilled for a user to access the Airlock 2FA device list.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.Airlock2FADeviceListSelfServiceRestConfig
id: Airlock2FADeviceListSelfServiceRestConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
airlock2FASettings:
authorizationCondition:
Airlock 2FA Device Management UI
Depending on the configuration, the user interface allows an authenticated user:
- to delete an Airlock 2FA device;
- to change the display name of an Airlock 2FA device;
- to activate a new Airlock 2FA device.
The device management interface is accessible at /<loginapp-uri>/ui/app/protected/tokens/airlock-2fa/devices after user authentication.
flowToDeleteDevice
) flowToChangeDisplayName
) flowToActivateAppDevice
) pageExitTarget
) If configured, an additional button is displayed on the Airlock 2FA device management to exit the page. On click, this button redirects the user to the configured target.
To redirect to a target application, redirect to the corresponding "Authentication Flow". If the flow can be skipped due to the obtained tags, the user is directly forwarded to the target application.
type: com.airlock.iam.selfservice.application.configuration.ui.tokens.Airlock2FADeviceManagementUiConfig
id: Airlock2FADeviceManagementUiConfig-xxxxxx
displayName:
comment:
properties:
flowToActivateAppDevice:
flowToChangeDisplayName:
flowToDeleteDevice:
pageExitTarget:
Airlock 2FA Device Management UI Redirect
type: com.airlock.iam.selfservice.application.configuration.ui.tokens.Airlock2FADeviceManagementFlowRedirectTargetConfig
id: Airlock2FADeviceManagementFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
Airlock 2FA Information Item
keyTranslationKey
) valueTranslationKey
) omitIfValueEmpty
) maxKeyLength
) maxValueLength
)
type: com.airlock.iam.flow.shared.application.configuration.message.Airlock2FAInformationItemConfig
id: Airlock2FAInformationItemConfig-xxxxxx
displayName:
comment:
properties:
keyTranslationKey:
maxKeyLength: 100
maxValueLength: 100
omitIfValueEmpty: false
valueTranslationKey:
Airlock 2FA Login ID Parameter
Provides the "loginId" parameter that is used to correlate the authentication in the Loginapp with the approval on the 2FA device. The Login ID is displayed if One-Touch is used and "Generate One-Touch Login ID" is set in the Airlock 2FA Authentication Step
This value is only available while the current flow is in the Airlock 2FA Authentication Step
type: com.airlock.iam.airlock2fa.auth.application.configuration.Airlock2FALoginIdValueMapProviderConfig
id: Airlock2FALoginIdValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
Airlock 2FA Message Provider
titleTranslationKey
) This key identifies the message template that is used to generate the message title. The title is displayed in the Airlock 2FA mobile app after the word "Approve", e.g. "Login" or "Password Reset".
It is displayed for One-Touch, Online QR Code and Usernameless QR Code factors.
It is ignored for Offline QR Code. Because of technical limitations, the title of Offline QR Codes is always the default title from Futurae.
The string resource key itself may also contain variables, e.g. 'airlock2fa.message.${type}.title'. Variables are replaced with the corresponding values provided by the "Value Providers". For more information about formatting, consult the customer documentation.
informationItems
) These information items are displayed for One-Touch, Online QR Code, Offline QR Code and Usernameless QR Code factors.
valueProviders
)
type: com.airlock.iam.flow.shared.application.configuration.message.GenericAirlock2FAMessageProviderConfig
id: GenericAirlock2FAMessageProviderConfig-xxxxxx
displayName:
comment:
properties:
informationItems:
titleTranslationKey:
valueProviders:
Airlock 2FA Mobile Only Authentication Step
This step allows an app on an enrolled mobile device to authenticate with Airlock 2FA by using the Loginapp REST API. The authentication is either performed by switching from the main app to a dedicated authentication app (Airlock 2FA, Futurae or compatible) or directly within an app that has an integrated SDK.
There is no UI for this step.
The identifier of the authentication method for this step is 'AIRLOCK_2FA' and is also the identifier for failed authentication attempts.
redirectUri
) schemeOverride
) airlock2faSettings
) respectCooldownPeriod
) If enabled, devices in cooldown cannot be used for authentication.
If disabled, the step ignores the "Cooldown Period" for new devices configured in the "Airlock 2FA Settings". This is typically used for authentication steps that protect low-risk applications, such as a portal page, which can also be accessed using devices in cooldown.
If no "Cooldown Period" is defined, enabling this property has no effect.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.airlock2fa.auth.application.configuration.Airlock2FAMobileOnlyAuthenticationStepConfig
id: Airlock2FAMobileOnlyAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
redirectUri:
requiresActivation: false
respectCooldownPeriod: true
schemeOverride:
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Public Self-Service Approval Step
This step allows to use Airlock 2FA to approve operations in public self-service flows.
Approval steps require an existing user and cannot prevent username enumeration (no stealth mode). Therefore, approval steps should only be used after an identity verification step.
messageProvider
) enablePushToAll
) The combination of Push-to-All and "Lock User on Fraud" could have undesired effects, because users might report fraud in legitimate use-cases.
airlock2faSettings
) mobileOnlyRedirectUri
) mobileOnlySchemeOverride
) approvalFactors
) Priority list of all factors that can be used in this approval step. Only factors that are in this list can be used. The factors are offered in the configured order.
One-Touch and Online QR Code must come before all other factors. It is recommended to include at least one offline factor.
Available factors:
- One-Touch: a push message is sent to the user's mobile app, where it must be approved. This is an online factor and will require device selection if the user has multiple devices.
- Online QR Code: a QR code is displayed in the browser, which has to be scanned by a mobile app and approved there. This is an online factor. No prior device selection is required.
- Offline QR Code: a QR code is displayed in the browser which has to be scanned by a mobile app or hardware token. The device displays a code (OTP) that must be entered manually in the browser. This is an offline factor and will require device selection if the user has multiple devices.
- Mobile Only: the approval is handled directly by the mobile app. This is an online factor. No prior device selection is required. There is no fallback from this factor to other factors or vice-versa. Therefore, the only use case for combining this with other factors is in transaction approval, where the factor previously used for authentication determines whether mobile-only or another factor will be used. Since there is no way to use any factors configured after Mobile Only, it should always be configured as the last factor.
respectCooldownPeriod
) If enabled, devices in cooldown cannot be used for approval.
If disabled, this step ignores the "Cooldown Period" for new devices configured in the "Airlock 2FA Settings". This is typically used for approval steps that protect low-risk operations, which can also be performed with devices in cooldown.
If no "Cooldown Period" is defined, enabling this property has no effect.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.Airlock2FAPublicSelfServiceApprovalStepConfig
id: Airlock2FAPublicSelfServiceApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
approvalFactors: [One-Touch, Offline QR Code, Mobile Only]
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
enablePushToAll: false
interactiveGotoTargets:
messageProvider:
mobileOnlyRedirectUri:
mobileOnlySchemeOverride:
onFailureGotos:
preCondition:
requiresActivation: false
respectCooldownPeriod: true
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Recovery Trusted Session Binding Step
This step can be used to recover previously enrolled Airlock 2FA accounts on a fresh installation of a mobile app. This refers to mobile apps which integrate the Futurae SDK and can therefore be enrolled as a device for an Airlock 2FA account. An enrollment of an Airlock 2FA account on a mobile app is subsequently referred to as a (virtual) device. One physical device can host multiple virtual devices. If 'Trusted Session Binding for Recovery' is enabled in the 'Airlock 2FA Settings', this step is necessary for users to recover their devices.
Airlock IAM does not provide a UI for this step, since it exposes a REST API which is intended to be used by custom mobile apps.
The following describes the recovery use case which is enabled by this step:
- A fresh installation of a mobile app extracts the device identifiers of a previous installation from a backup.
- A user authenticates with Airlock IAM (via the mobile app).
- This is where the 'Airlock 2FA Recovery Trusted Session Binding Step' has to be active in the IAM flow. The step can be completed successfully with the following actions:
- The mobile app sends the device identifiers Airlock IAM.
- Airlock IAM checks whether one of the devices to be recovered belongs to the authenticated user and aborts the flow otherwise.
- Airlock IAM requests a Trusted Session Binding token from Futurae and returns it to the mobile app. If Airlock IAM does not receive a flow binding token from Futurae, it will return an empty response and the step will continue as if the retrieval was successful.
- The mobile app forwards the Trusted Session Binding token to the Futurae SDK to complete the recovery.
- The mobile app polls Airlock IAM for the status of the recovery.
- After successful recovery, all users who had devices on the previous installation will have new devices and the ones from the previous installation cannot be used anymore.
airlock2faSettings
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.airlock2fa.auth.application.configuration.Airlock2faRecoveryTrustedSessionBindingStepConfig
id: Airlock2faRecoveryTrustedSessionBindingStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
authenticationMethodId: AIRLOCK_2FA
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Self-Service Approval Step
This step allows to use Airlock 2FA to approve operations in protected self-services flows, such as user data changes or registrations of additional devices. Typically, this step is configured between the step where a change is initiated and the step where the change is persisted.
messageProvider
) enablePushToAll
) The combination of Push-to-All and "Lock User on Fraud" could have undesired effects, because users might report fraud in legitimate use-cases.
airlock2faSettings
) mobileOnlyRedirectUri
) mobileOnlySchemeOverride
) approvalFactors
) Priority list of all factors that can be used in this approval step. Only factors that are in this list can be used. The factors are offered in the configured order.
One-Touch and Online QR Code must come before all other factors. It is recommended to include at least one offline factor.
Available factors:
- One-Touch: a push message is sent to the user's mobile app, where it must be approved. This is an online factor and will require device selection if the user has multiple devices.
- Online QR Code: a QR code is displayed in the browser, which has to be scanned by a mobile app and approved there. This is an online factor. No prior device selection is required.
- Offline QR Code: a QR code is displayed in the browser which has to be scanned by a mobile app or hardware token. The device displays a code (OTP) that must be entered manually in the browser. This is an offline factor and will require device selection if the user has multiple devices.
- Mobile Only: the approval is handled directly by the mobile app. This is an online factor. No prior device selection is required. There is no fallback from this factor to other factors or vice-versa. Therefore, the only use case for combining this with other factors is in transaction approval, where the factor previously used for authentication determines whether mobile-only or another factor will be used. Since there is no way to use any factors configured after Mobile Only, it should always be configured as the last factor.
respectCooldownPeriod
) If enabled, devices in cooldown cannot be used for approval.
If disabled, this step ignores the "Cooldown Period" for new devices configured in the "Airlock 2FA Settings". This is typically used for approval steps that protect low-risk operations, which can also be performed with devices in cooldown.
If no "Cooldown Period" is defined, enabling this property has no effect.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.Airlock2FASelfServiceApprovalStepConfig
id: Airlock2FASelfServiceApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
approvalFactors: [One-Touch, Offline QR Code, Mobile Only]
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
enablePushToAll: false
interactiveGotoTargets:
messageProvider:
mobileOnlyRedirectUri:
mobileOnlySchemeOverride:
onFailureGotos:
preCondition:
requiresActivation: false
respectCooldownPeriod: true
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Settings
repository
) futuraeServer
) accountDisplayNameProvider
) Privacy warning: The display name, when configured, will be stored on Futurae's servers. Sensitive data should therefore not be used as display name.
trustedSessionBindingForActivation
) If enabled, activation codes (from a letter or on-screen QR code) can only be used as part of an authenticated session with Airlock IAM. If enabled, activation codes are only accepted together with a "Trusted Session Binding Token". This short-lived token can only be retrieved from an Airlock IAM flow and must be sent to the Futurae server together with the activation code.
This feature ensures that only the intended user can activate a 2FA app/device with a given activation code. The standard Airlock 2FA app does not support this feature, a custom mobile app built using the Futurae SDK is required.
Airlock IAM supports three modes for Trusted Session Binding:
- Never: Trusted Session Binding is disabled.
- Only with Letter: Trusted Session Binding is only enabled for activation letters.
- Always: Trusted Session Binding is enabled both for activation letters and on-screen activation. For on-screen activation, Trusted Session Binding does not provide additional security because the activation code is already bound to an authenticated IAM session, but it could simplify the implementation of the activation process in the mobile app.
trustedSessionBindingForRecovery
) trustedSessionBindingValidity
) - Trusted Session Binding for Activation is set to "Only with Letter" or "Always".
- Trusted Session Binding for Recovery is enabled.
The duration should not be larger than the "Session Idle Timeout" in the Loginapp, to avoid session timeouts when polling the IAM status.
lockUserOnFraud
) LockReason.FraudReportedByUser
when reporting a possible fraudulent authentication attempt via the Airlock 2FA app. This is done by rejecting the authentication attempt and then confirming that the attempt was not initiated by the user (in the app dialog).
Self-unlock is possible when locked by this option.
allowFuturaeBypassMode
) If enabled, Futurae users that have the bypass mode enabled will be allowed to authenticate / perform approval with IAM. Otherwise, any authentication or approval attempts for users with the bypass mode enabled will result in a failure.
Warning: Enabling bypass mode effectively disables all Airlock 2FA second factor checks. Bypass mode should not be used in production environments.
payloadEncryptionKey
) The encryption of payloads in requests to the Futurae API prevents that intermediate infrastructure such as a reverse proxy is able to read or alter the confidential data therein. The encryption key can be obtained from the Futurae Admin Dashboard.
cooldownPeriod
) If configured, a cooldown period is enabled during which a newly registered device cannot be used for certain operations.
By default, all Airlock 2FA steps are configured so that devices may not be used during the "Cooldown Period". Exceptions can be configured directly on the step by de-activating the "Respect Cooldown Period" property.
The duration must be specified in the format "2d 4h 10m 5s" (any part can be omitted).
type: com.airlock.iam.airlock2fa.application.configuration.Airlock2FASettings
id: Airlock2FASettings-xxxxxx
displayName:
comment:
properties:
accountDisplayNameProvider:
allowFuturaeBypassMode: false
cooldownPeriod:
futuraeServer:
lockUserOnFraud: false
payloadEncryptionKey:
repository:
trustedSessionBindingForActivation: OFF
trustedSessionBindingForRecovery: false
trustedSessionBindingValidity: 120
Airlock 2FA Token Controller
id
) Unique identifier for the token controller. Serves as token type ID in the REST interface.
This is also the "auth method" that is set on the user as active/next authentication method, i.e. it must match the "Authentication Method ID" of corresponding authentication flow steps.
Finally, this ID also determines the name (label) of this token controller in the Adminapp UI, as defined by the resource key 'user.auth-methods.type.generic.<id>', as well as the label for "auth method" specific lock reasons defined by the resource key 'user.account-state.LockReason.TooManyAuthAtts.<id>'.
Please note that the length of this ID must not be longer than 22 characters in order to comply with the default DB schema restrictions for column lock_reason.airlock2faSettings
) createActivationLetters
) orderActivationLetters
) createShipmentLetters
) shareHardwareTokensAmongUsers
) Once a hardware token is assigned to a user, it is only available within the corresponding Futurae service.
type: com.airlock.iam.admin.application.configuration.airlock2fa.Airlock2FATokenControllerConfig
id: Airlock2FATokenControllerConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
createActivationLetters:
createShipmentLetters:
id: AIRLOCK_2FA
orderActivationLetters:
shareHardwareTokensAmongUsers: false
Airlock 2FA Token Insertion Handler
Persists an Airlock 2FA account that was created through a previous step.
Note: The Airlock 2FA Account Display Name can only be set when the registering user is persisted. Therefore the Account Display Name in the Airlock 2FA mobile app might not be displayed correctly, until the registration is fully completed.
airlock2faSettings
)
type: com.airlock.iam.userselfreg.application.configuration.step.Airlock2FAInsertionHandlerConfig
id: Airlock2FAInsertionHandlerConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
Airlock 2FA Transaction Approval Step
The transaction data will be displayed on the Airlock 2FA app, where the user can verify the data and approve the transaction if satisfied.
messageProvider
) enablePushToAll
) The combination of Push-to-All and "Lock User on Fraud" could have undesired effects, because users might report fraud in legitimate use-cases.
If an AuthTokenId is provided, notifications are only sent to the device specified in the AuthTokenId.
airlock2faSettings
) mobileOnlyRedirectUri
) mobileOnlySchemeOverride
) approvalFactors
) Priority list of all factors that can be used in this approval step. Only factors that are in this list can be used. The factors are offered in the configured order.
One-Touch and Online QR Code must come before all other factors. It is recommended to include at least one offline factor.
Available factors:
- One-Touch: a push message is sent to the user's mobile app, where it must be approved. This is an online factor and will require device selection if the user has multiple devices.
- Online QR Code: a QR code is displayed in the browser, which has to be scanned by a mobile app and approved there. This is an online factor. No prior device selection is required.
- Offline QR Code: a QR code is displayed in the browser which has to be scanned by a mobile app or hardware token. The device displays a code (OTP) that must be entered manually in the browser. This is an offline factor and will require device selection if the user has multiple devices.
- Mobile Only: the approval is handled directly by the mobile app. This is an online factor. No prior device selection is required. There is no fallback from this factor to other factors or vice-versa. Therefore, the only use case for combining this with other factors is in transaction approval, where the factor previously used for authentication determines whether mobile-only or another factor will be used. Since there is no way to use any factors configured after Mobile Only, it should always be configured as the last factor.
respectCooldownPeriod
) If enabled, devices in cooldown cannot be used for approval.
If disabled, this step ignores the "Cooldown Period" for new devices configured in the "Airlock 2FA Settings". This is typically used for approval steps that protect low-risk operations, which can also be performed with devices in cooldown.
If no "Cooldown Period" is defined, enabling this property has no effect.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.transactionapproval.application.configuration.airlock2fa.Airlock2FATransactionApprovalStepConfig
id: Airlock2FATransactionApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
approvalFactors: [One-Touch, Offline QR Code, Mobile Only]
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
enablePushToAll: false
interactiveGotoTargets:
messageProvider:
mobileOnlyRedirectUri:
mobileOnlySchemeOverride:
onFailureGotos:
preCondition:
requiresActivation: false
respectCooldownPeriod: true
skipCondition:
stepId:
tagsOnSuccess:
Airlock 2FA Username Transformer
a2faUserRepositoryConfig
)
type: com.airlock.iam.airlock2fa.auth.application.configuration.Airlock2FAUsernameTransformer
id: Airlock2FAUsernameTransformer-xxxxxx
displayName:
comment:
properties:
a2faUserRepositoryConfig:
Airlock 2FA Usernameless Authentication Step
Step for Airlock 2FA Usernameless QR Code authentication.
This step allows authentication without requiring the user to enter their username. Instead, a QR code (identifying the session) is displayed on the login page and can be scanned by any user with the Airlock 2FA app. The app then authenticates this session on the server and thus enables Airlock IAM to connect the browser session with the user who scanned the QR code.
airlock2faSettings
) messageProvider
) Creates the message that will be displayed on the user's device when using Usernameless QR Code. If no message provider is configured, the default title of Futurae will be shown (without any additional information items).
Note that since no user ID is known when creating a username-less QR code, no message providers relying on user-specific data can be used.
qrCodeValidity
) maxRenewals
) QR codes will be renewed already before they expire. This ensures that users can complete ongoing authentication seamlessly even if they scan a QR code shortly before it is refreshed.
Fewer renewals do not lead to enhanced security. The only reason not to renew indefinitely is to save server resources.
timeoutGoto
) respectCooldownPeriod
) If enabled, devices in cooldown cannot be used for authentication.
If disabled, the step ignores the "Cooldown Period" for new devices configured in the "Airlock 2FA Settings". This is typically used for authentication steps that protect low-risk applications, such as a portal page, which can also be accessed using devices in cooldown.
If no "Cooldown Period" is defined, enabling this property has no effect.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.airlock2fa.auth.application.configuration.Airlock2FAUsernamelessQrCodeAuthenticationStepConfig
id: Airlock2FAUsernamelessQrCodeAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
maxRenewals: 10
messageProvider:
onFailureGotos:
preCondition:
qrCodeValidity: 60
requiresActivation: false
respectCooldownPeriod: true
skipCondition:
stepId:
tagsOnSuccess:
timeoutGoto:
Airlock 2FA was used for login (Transaction Approval only)
selectableIfNoAuthTokenIdPresent
)
type: com.airlock.iam.transactionapproval.application.configuration.selection.Airlock2FAAuthTokenIdSelectionConditionConfig
id: Airlock2FAAuthTokenIdSelectionConditionConfig-xxxxxx
displayName:
comment:
properties:
selectableIfNoAuthTokenIdPresent: true
Airlock Gateway Roles Config
roleProvider
) timeoutProvider
)
type: com.airlock.iam.login.application.configuration.targetapp.AirlockGatewayRolesConfig
id: AirlockGatewayRolesConfig-xxxxxx
displayName:
comment:
properties:
roleProvider:
timeoutProvider:
Airlock Gateway Settings
addCredentialsToSession
) ADD_CREDENTIALS
. If every identity propagation shall replace all previously set roles, disable this property, which results in the Airlock Control Cookie command SET_CREDENTIALS
. controlCookieName
) The name of the control cookie used to communicate with the Airlock Gateway (WAF) backend control API. This must be the same as configured in Airlock.
A control cookie is set after successful authentication with the roles granted to the user as credentials/roles. Additionally, a new session ID is generated (to prevent session fixation attacks) and the global session ID is set as audit token.
This property also enables so-called "session tickets". After successful authentication the user's name and the granted roles are stored in the current session plus a session ticket cookie including this information is stored in the Airlock Gateway cookie store. The session ticket is needed to re-authenticate any new session later.
environmentCookiePrefix
) auditToken
) Type of the audit token set in the Airlock Gateway (WAF) after the authentication.
- "Username": The audit token contains just the username.
- "SessionID": The audit token contains just the session id.
- "Username and SessionID": The audit token contains the username followed by a "-" and the session ID.
- "None": The audit token is empty.
type: com.airlock.iam.core.application.configuration.waf.AirlockGatewayConfig
id: AirlockGatewayConfig-xxxxxx
displayName:
comment:
properties:
addCredentialsToSession: true
auditToken: USERNAME
controlCookieName: AL_CONTROL
environmentCookiePrefix: AL_ENV_
Airlock Gateway Settings (Loginapp)
removedRolesMappings
) Airlock Gateway can indicate (using an environment cookie) that roles have been dropped. Dropped roles can be mapped to tags in Airlock IAM that should be dropped as a consequence.
clientFingerprintingLockoutThreshold
) If the Airlock Gateway terminates a session because of a high client fingerprinting (CFP) score, IAM is informed about this as part of the Airlock Gateway logout propagation.
This property defines a CFP score threshold: If the CFP score reported by the Airlock Gateway is above or equal to the threshold, the user account is locked in IAM. This way not only the current Airlock Gateway session is terminated but also the user account is locked for further login attempts. The user can't unlock his account by using the "Unlock Self-Service".
Note: Ensure that the logout propagation path in the corresponding Airlock Gateway mapping for IAM points to the corresponding REST endpoint.
Please refer to the Airlock Gateway manual for further information about client fingerprinting.
addCredentialsToSession
) ADD_CREDENTIALS
. If every identity propagation shall replace all previously set roles, disable this property, which results in the Airlock Control Cookie command SET_CREDENTIALS
. controlCookieName
) The name of the control cookie used to communicate with the Airlock Gateway (WAF) backend control API. This must be the same as configured in Airlock.
A control cookie is set after successful authentication with the roles granted to the user as credentials/roles. Additionally, a new session ID is generated (to prevent session fixation attacks) and the global session ID is set as audit token.
This property also enables so-called "session tickets". After successful authentication the user's name and the granted roles are stored in the current session plus a session ticket cookie including this information is stored in the Airlock Gateway cookie store. The session ticket is needed to re-authenticate any new session later.
environmentCookiePrefix
) auditToken
) Type of the audit token set in the Airlock Gateway (WAF) after the authentication.
- "Username": The audit token contains just the username.
- "SessionID": The audit token contains just the session id.
- "Username and SessionID": The audit token contains the username followed by a "-" and the session ID.
- "None": The audit token is empty.
type: com.airlock.iam.login.application.configuration.gateway.LoginappGatewayConfig
id: LoginappGatewayConfig-xxxxxx
displayName:
comment:
properties:
addCredentialsToSession: true
auditToken: USERNAME
clientFingerprintingLockoutThreshold:
controlCookieName: AL_CONTROL
environmentCookiePrefix: AL_ENV_
removedRolesMappings:
Airlock Microgateway Settings
clientIpExtractor
) requestIdExtractor
) requestUrlExtractor
) requestMtlsClientCertExtractor
)
type: com.airlock.iam.common.application.configuration.gateway.AirlockMicrogatewayConfig
id: AirlockMicrogatewayConfig-xxxxxx
displayName:
comment:
properties:
clientIpExtractor:
requestIdExtractor:
requestMtlsClientCertExtractor:
requestUrlExtractor:
Alias User Item
Definition of a user alias. An alias is a special context data item that can be used as a login name in the same way as the username.
Note that by definition, all login names (i.e., aliases and usernames) must be unique across all users.
contextDataName
) required
) validators
)
type: com.airlock.iam.userselfreg.application.configuration.definition.AliasDefinitionConfig
id: AliasDefinitionConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
required: true
validators:
All Devices Except Most Recently Registered
In case no Airlock 2FA account is associated with the current user, no device IDs are returned.
Use case: This plugin can be used to enforce a single-device policy, meaning a user must only be able to use a single device simultaneously. For this, in any flow allowing the user to authenticate with Airlock 2FA, this plugin must be used with an 'Airlock 2FA Delete Devices Step' upfront.
respectCooldownPeriod
) If enabled, devices in cooldown are never returned and do not count towards determining the latest registered device.
airlock2FASettings
)
type: com.airlock.iam.airlock2fa.application.configuration.provider.AllAirlock2FADevicesExceptMostRecentlyRegisteredProviderConfig
id: AllAirlock2FADevicesExceptMostRecentlyRegisteredProviderConfig-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
respectCooldownPeriod: true
All Devices Except Registered In Flow
In case no Airlock 2FA account is associated with the current user, no device IDs are returned.
Use case: This plugin is designed to facilitate the secure migration of users from the Airlock 2FA app to either an alternative 2FA app or a new business app that includes built-in two-factor authentication using the Futurae Mobile SDK (One App solution). During this migration, all old tokens associated with the user's previous business application are deleted to ensure security and prevent unauthorized access.For this use case, the plugin should be used with an 'Airlock 2FA Delete Devices Step' which is configured after the step activating the new Airlock 2FA device.
respectCooldownPeriod
) If enabled, devices in cooldown are never returned.
airlock2FASettings
)
type: com.airlock.iam.airlock2fa.application.configuration.provider.AllAirlock2FADevicesExceptRegisteredInFlowProviderConfig
id: AllAirlock2FADevicesExceptRegisteredInFlowProviderConfig-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
respectCooldownPeriod: true
All Ok On Behalf Login Step Validator
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.AllOkOnBehalfLoginStepValidator
id: AllOkOnBehalfLoginStepValidator-xxxxxx
displayName:
comment:
properties:
All Phone Numbers Provider
mtanHandler
)
type: com.airlock.iam.common.application.configuration.sms.AllPhoneNumbersProviderConfig
id: AllPhoneNumbersProviderConfig-xxxxxx
displayName:
comment:
properties:
mtanHandler:
All Required Roles Match
Selects a configuration if the admin has all of the roles required by the configuration. If a configuration requires no roles, it is always selected.
type: com.airlock.iam.admin.application.configuration.users.AllRequiredRolesMatcher
id: AllRequiredRolesMatcher-xxxxxx
displayName:
comment:
properties:
All User Roles
type: com.airlock.iam.login.application.configuration.targetapp.UserRolesProviderConfig
id: UserRolesProviderConfig-xxxxxx
displayName:
comment:
properties:
Allowed Characters Password Policy
allowedCharsPattern
) Every character of the password is matched against this pattern and must match or the password is not allowed.
For details about regular expression syntax, please refer to the class description of the Java JDK class java.util.regex.Pattern of the used Java JDK.Because every single character is checked against the expression anchors ('^') and end-of-line chars ('$') don't make sense and can be left out.
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyAllowedCharsCheck
id: PwdPolicyAllowedCharsCheck-xxxxxx
displayName:
comment:
properties:
allowedCharsPattern:
Allowed Username Password Combination
username
) password
)
type: com.airlock.iam.login.app.misc.oauth2.introspection.config.AllowedUsernamePasswordCombination
id: AllowedUsernamePasswordCombination-xxxxxx
displayName:
comment:
properties:
password:
username:
Alphabet
characters
)
type: com.airlock.iam.core.misc.impl.authen.Alphabet
id: Alphabet-xxxxxx
displayName:
comment:
properties:
characters:
Always Down Check
type: com.airlock.iam.common.application.configuration.health.AlwaysDownCheckConfig
id: AlwaysDownCheckConfig-xxxxxx
displayName:
comment:
properties:
Always False
type: com.airlock.iam.flow.application.configuration.selection.condition.AlwaysFalseConditionConfig
id: AlwaysFalseConditionConfig-xxxxxx
displayName:
comment:
properties:
Always Revoked Status Checker
type: com.airlock.iam.core.misc.impl.cert.crl.AlwaysRevokedStatusChecker
id: AlwaysRevokedStatusChecker-xxxxxx
displayName:
comment:
properties:
Always True
type: com.airlock.iam.flow.application.configuration.selection.condition.AlwaysTrueConditionConfig
id: AlwaysTrueConditionConfig-xxxxxx
displayName:
comment:
properties:
Always True Representation Authorization
type: com.airlock.iam.selfservice.application.configuration.representation.AlwaysTrueRepresentationAuthorizationConfig
id: AlwaysTrueRepresentationAuthorizationConfig-xxxxxx
displayName:
comment:
properties:
And Claim Condition Config
conditions
)
type: com.airlock.iam.oauth2.application.configuration.claims.conditions.AndClaimConditionConfig
id: AndClaimConditionConfig-xxxxxx
displayName:
comment:
properties:
conditions:
Anomaly Shield State Risk Extractor Config
expectedAnomalyStates
) tagsIfOneOfExpectedAnomalyStates
) tagsIfNoneOfExpectedAnomalyStates
)
type: com.airlock.iam.authentication.application.configuration.risk.extractor.anomaly.AnomalyShieldStateRiskExtractorConfig
id: AnomalyShieldStateRiskExtractorConfig-xxxxxx
displayName:
comment:
properties:
expectedAnomalyStates: [anomalous]
tagsIfNoneOfExpectedAnomalyStates:
tagsIfOneOfExpectedAnomalyStates:
Any Required Role Matches
Selects a configuration if the admin has any of the roles required by the configuration.
type: com.airlock.iam.admin.application.configuration.users.AnyRequiredRoleMatcher
id: AnyRequiredRoleMatcher-xxxxxx
displayName:
comment:
properties:
API Policy Service
This web application currently offers a REST endpoint targeted at Airlock WAF that allows to retrieve information about a technical client by resolving a given API key. Among other, the returned information contains details about the technical client and associated plans (including rate limits).
repository
) sharedSecret
) Shared secret to verify the JWT signature. Must be the same as on the Airlock Gateway (WAF) using this API Policy Service endpoint.
The shared secret must be encoded in base64. The minimal required unencoded length is at least 512 bits. Configuration validation fails if the secret is too short.
One can, for example, generate a random secret with 512 bits (64 bytes) as base64 encoded string using openssl as follows: openssl rand -base64 96
contextExtractor
) logUserTrailToDatabase
) Configures the database settings to use when persisting user trail log entries.
If this value is defined, then all user trail log messages generated by the API Policy Service App module will additionally be forwarded to the database configured within the referenced repository plugin.
All forwarded log entries are stored inside the table "USER_TRAIL_LOG". Note that setting this value does not disable writing log messages to the API Policy Service log file.
correlationIdSettings
) Defines settings for correlation ID transfer and logging inside the Api Policy Service module.
If undefined, no correlation ID will be logged for this module.
type: com.airlock.iam.apipolicyservice.application.configuration.ApiPolicyServiceAppConfig
id: ApiPolicyServiceAppConfig-xxxxxx
displayName:
comment:
properties:
contextExtractor:
correlationIdSettings:
logUserTrailToDatabase:
repository:
sharedSecret:
App Device Used For Login Unless Last App Device
This provider returns nothing in case the login device is the only App device of the user or the login device is not an App device, e.g. Hardware device.
In case no Airlock 2FA account is associated with the current user, no device IDs are returned.
Note: This plugin should only be used in authentication and protected self-service flows since the other flows do not contain information on the last device used for login.
Use case: This plugin is designed to facilitate the secure migration of users from the Airlock 2FA app to either an alternative 2FA app or a new business app that includes built-in two-factor authentication using the Futurae Mobile SDK (One App solution). In contrast to the 'All Devices Except Registered In Flow' plugin, this plugin does not delete all old tokens during a migration but only the one used in this session. This is beneficial when a user has multiple devices, and you want to avoid unintended deletions that could disrupt access from other devices. For this use case, the plugin should be used with an 'Airlock 2FA Delete Devices Step' which is configured after the step activating the new Airlock 2FA device.
respectCooldownPeriod
) If enabled, devices in cooldown are never returned. Consequently, if the login device is in cooldown or if there is only one device which is not in cooldown, no devices are returned.
airlock2FASettings
)
type: com.airlock.iam.airlock2fa.application.configuration.provider.Airlock2FALoginDeviceUnlessLastDeviceIdProviderConfig
id: Airlock2FALoginDeviceUnlessLastDeviceIdProviderConfig-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
respectCooldownPeriod: false
Application ID
Configuration of the Application ID.
In the SPA, this property defines the access path of the respective application. For example:
/<loginapp-uri>/ui/app/auth/application/access/<APP_ID>
applicationId
)
type: com.airlock.iam.login.application.configuration.targetapp.ApplicationIdConfig
id: ApplicationIdConfig-xxxxxx
displayName:
comment:
properties:
applicationId:
Application Portal Group Config
identifier
) - protected.application-portal.group.${identifier}.title for the group title
- protected.application-portal.group.${identifier}.description for the description text of the group
portalTargets
)
type: com.airlock.iam.selfservice.application.configuration.ui.portal.ApplicationPortalGroupConfig
id: ApplicationPortalGroupConfig-xxxxxx
displayName:
comment:
properties:
identifier:
portalTargets:
Application Portal Target Config
identifier
) - protected.application-portal.group.${group-identifier}.target.${identifier}.title for the portal target on the portal page
redirectTarget
) redirectByAccess
) This functionality is not needed for Protected Self-Services, where access control is already provided by the "Access Condition" and "Authorization Condition".
precondition
) openInNewTab
)
type: com.airlock.iam.selfservice.application.configuration.ui.portal.ApplicationPortalTargetConfig
id: ApplicationPortalTargetConfig-xxxxxx
displayName:
comment:
properties:
identifier:
openInNewTab: false
precondition:
redirectByAccess: true
redirectTarget:
Application Portal UI
The portal is accessible at /<loginapp-uri>/ui/app/protected/portal after user authentication.
portalGroups
) autoForward
)
type: com.airlock.iam.selfservice.application.configuration.ui.portal.ApplicationPortalUiConfig
id: ApplicationPortalUiConfig-xxxxxx
displayName:
comment:
properties:
autoForward: false
portalGroups:
Apply Account Link Deletion
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyAccountLinkDeletionConfig
id: ApplyAccountLinkDeletionConfig-xxxxxx
displayName:
comment:
properties:
Apply Account Link Linking
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyAccountLinkLinkingConfig
id: ApplyAccountLinkLinkingConfig-xxxxxx
displayName:
comment:
properties:
Apply Changes Step
handlers
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.step.apply.ApplyChangesStepConfig
id: ApplyChangesStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
handlers:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Apply Cronto Device Deletion
crontoHandler
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyCrontoDeviceDeletionConfig
id: ApplyCrontoDeviceDeletionConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
Apply Cronto Device Disabling
crontoHandler
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyCrontoDeviceDisablingConfig
id: ApplyCrontoDeviceDisablingConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
Apply Cronto Device Enabling
crontoHandler
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyCrontoDeviceEnablingConfig
id: ApplyCrontoDeviceEnablingConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
Apply Cronto Device Renaming
crontoHandler
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyCrontoDeviceRenamingConfig
id: ApplyCrontoDeviceRenamingConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
Apply Cronto Push Disabling
crontoHandler
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyCrontoPushDisablingConfig
id: ApplyCrontoPushDisablingConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
Apply Cronto Push Enabling
crontoHandler
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyCrontoPushEnablingConfig
id: ApplyCrontoPushEnablingConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
Apply Device Token Registration
Note that only the last registered device token will be persisted.
deviceTokenSettings
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyDeviceTokenRegistrationConfig
id: ApplyDeviceTokenRegistrationConfig-xxxxxx
displayName:
comment:
properties:
deviceTokenSettings:
Apply Email Change
contextDataName
)
type: com.airlock.iam.flow.shared.application.configuration.step.apply.ApplyEmailChangeConfig
id: ApplyEmailChangeConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
Apply FIDO Credential Deletion
fidoSettings
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyFidoCredentialDeletionConfig
id: ApplyFidoCredentialDeletionConfig-xxxxxx
displayName:
comment:
properties:
fidoSettings:
Apply FIDO Credential Disabling
fidoSettings
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyFidoCredentialDisablingConfig
id: ApplyFidoCredentialDisablingConfig-xxxxxx
displayName:
comment:
properties:
fidoSettings:
Apply FIDO Credential Display Name Change
fidoSettings
)
type: com.airlock.iam.fido.login.application.configuration.ApplyFidoCredentialDisplayNameChangeConfig
id: ApplyFidoCredentialDisplayNameChangeConfig-xxxxxx
displayName:
comment:
properties:
fidoSettings:
Apply FIDO Credential Enabling
fidoSettings
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyFidoCredentialEnablingConfig
id: ApplyFidoCredentialEnablingConfig-xxxxxx
displayName:
comment:
properties:
fidoSettings:
Apply mTAN Deletion
mtanSettings
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyMtanDeletionConfig
id: ApplyMtanDeletionConfig-xxxxxx
displayName:
comment:
properties:
mtanSettings:
Apply mTAN Edit Change
mtanSettings
)
type: com.airlock.iam.flow.shared.application.configuration.step.apply.ApplyMtanEditChangeConfig
id: ApplyMtanEditChangeConfig-xxxxxx
displayName:
comment:
properties:
mtanSettings:
Apply mTAN Registration Change
mtanSettings
)
type: com.airlock.iam.flow.shared.application.configuration.step.apply.ApplyMtanRegistrationChangeConfig
id: ApplyMtanRegistrationChangeConfig-xxxxxx
displayName:
comment:
properties:
mtanSettings:
Apply OAuth 2.0 Consent Deny
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyOAuth2DenyConsentConfig
id: ApplyOAuth2DenyConsentConfig-xxxxxx
displayName:
comment:
properties:
Apply OAuth 2.0 Consent Grant
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyOAuth2GrantConsentConfig
id: ApplyOAuth2GrantConsentConfig-xxxxxx
displayName:
comment:
properties:
Apply OAuth 2.0 Consents Deletion
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyOAuth2DeleteConsentsConfig
id: ApplyOAuth2DeleteConsentsConfig-xxxxxx
displayName:
comment:
properties:
Apply OAuth 2.0 Session Deletion
type: com.airlock.iam.selfservice.application.configuration.step.OAuth2DeleteSessionApplyConfig
id: OAuth2DeleteSessionApplyConfig-xxxxxx
displayName:
comment:
properties:
Apply Remember-Me Device Deletion
rememberMeConfig
)
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyRememberMeDeviceDeletionConfig
id: ApplyRememberMeDeviceDeletionConfig-xxxxxx
displayName:
comment:
properties:
rememberMeConfig:
Apply User Data Edit Change Config
type: com.airlock.iam.selfservice.application.configuration.step.apply.ApplyUserDataEditChangeConfig
id: ApplyUserDataEditChangeConfig-xxxxxx
displayName:
comment:
properties:
ASP SMS Gateway
This plug-in uses the XML/HTTP(S) interface of ASPSMS to send SMS messages.
accountUsername
) accountPassword
) serviceUri
) See note in plug-in description when using SSL (HTTPS instead of HTTP).
Use the plugin FailoverSmsGateway to use multiple ASPSMS URLs for increased availability.
proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
connectTimeout
) Therefore, a connection may take a maximum of twice this time until it is aborted.
correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
visiblePhoneNumberDigitsInLog
) Defines the number of phone number digits visible in log statements.
Thus, if the value is zero, all digits are masked, if it is large enough, all digits are visible. If set to 3, for example, the logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.core.misc.impl.sms.AspSmsGateway
id: AspSmsGateway-xxxxxx
displayName:
comment:
properties:
accountPassword:
accountUsername:
allowOnlyTrustedCerts: true
connectTimeout: 10
correlationIdHeaderName:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
serviceUri:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
verifyServerHostname: true
visiblePhoneNumberDigitsInLog: 100
Assertion Attribute
name
) value
-property or static-value
property. One of value
or static-value
must be set, but not both at the same time. value
) - The value
@username
refers to the user's name. - The value
@roles
refers to the user's roles. - The value
@info:key
refers to the element of the additional input data with the given key. - The value
@param:key
refers to the element of the parameter map with the given key. - Any other value is retrieved from the user's context data container.
valueTransformations
) staticValue
)
type: com.airlock.iam.saml2.application.configuration.AssertionAttribute
id: AssertionAttribute-xxxxxx
displayName:
comment:
properties:
name:
staticValue:
value:
valueTransformations:
Audience From Request Parameter (OAuth 2.0 Token Exchange)
If the request does not contain an "audience" parameter or if the request's "audience" parameter is an empty array, the claim value will not be set (unless when the claim is required, for example for the "aud" target claim).
If the request contains one "audience" parameter, the claim value will be set to a single string value. If the request contains multiple "audience" parameters, the claim value will be set to an array.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtAudienceRequestParameterClaimValueConfig
id: OAuth2TokenExchangeJwtAudienceRequestParameterClaimValueConfig-xxxxxx
displayName:
comment:
properties:
Audience From Subject Token (OAuth 2.0 Token Exchange)
Sets the claim value to that of the subject token's "aud" claim value.
If present, the subject token's "aud" data is parsed as either a single string audience value or an array of string audience values as per RFC7519. If the subject token's "aud" data is present but does not conform with the specification, the token exchange request will lead to an invalid request error.
If the subject token's "aud" data is single-valued after removing non-allowed values (i.e. it is either a string or an array with a single element after removing the values not matching any of the configured patterns) and conforms with the specification, the claim value will be set to a string. If the subject token's "aud" data is multi-valued and conforms with the specification, the claim value will be set to an array.
If the subject token's "aud" data is not present, is an empty array or none of the values match the configured filters, the claim value will not be set.
valueFilters
) An optional list of regular expressions. If the list is configured, only values in in the subject token's "aud" data matching at least one of the regular expressions will be added. Values that do not match any of the configured regular expressions will be ignored. If the list is not configured, all the values in the subject token's "aud" claim will be added.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtSubjectTokenAudienceClaimValueConfig
id: OAuth2TokenExchangeJwtSubjectTokenAudienceClaimValueConfig-xxxxxx
displayName:
comment:
properties:
valueFilters:
Audit Token SAML 2.0 Attribute
samlAttributeName
) nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.AuditTokenAttributeConfig
id: AuditTokenAttributeConfig-xxxxxx
displayName:
comment:
properties:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
samlAttributeName:
Auth Method-based Authenticator Selector
Authenticator plugin that selects one of several configured authenticators depending on the user's active authentication method.
Note: This plugin does not check the status of the user account (locked, invalid) and does not update login statistics (failed logins, etc.). It can therefore only be used in conjunction with another authenticator (e.g. Main Authenticator or Meta Authenticator).
mappings
) defaultAuthenticator
) userPersister
)
type: com.airlock.iam.core.misc.impl.authen.AuthMethodBasedAuthenticatorSelector
id: AuthMethodBasedAuthenticatorSelector-xxxxxx
displayName:
comment:
properties:
defaultAuthenticator:
mappings:
userPersister:
Auth Token ID SAML 2.0 Attribute
samlAttributeName
) nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.AuthTokenIdAttributeConfig
id: AuthTokenIdAttributeConfig-xxxxxx
displayName:
comment:
properties:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
samlAttributeName:
Authenticated Client ID (OAuth 2.0 Token Exchange)
Sets the act claim to a claim set containing the authenticated client ID as sub claim and nests the original act claim from the subject token data into this claim set.
Nesting the act claim within another expresses a chain of delegation. The outermost act claim represents the current actor while nested act claims represent prior actors. The least recent actor is the most deeply nested. The nested act claims serve as a history trail that connects the initial request and subject through the various delegation steps undertaken before reaching the current actor.
If the subject token data has no act claim, the new claim only contains the sub claim.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeAuthenticatedClientIdActorClaimConfig
id: OAuth2TokenExchangeAuthenticatedClientIdActorClaimConfig-xxxxxx
displayName:
comment:
properties:
Authentication & Authorization UI
targetApplicationId
) customizedStepUis
) languageExtractor
) The Language Extractor is a Location Interpreter which allows the UI to extract the language from the forward location. It is added to the value map from the location interpretation endpoint (/<loginapp-uri>/rest/public/authentication/location/interpret/) with the key IAM_UI_LANGUAGE.
The IAM UI uses this endpoint, when application access with a forward location is requested. For this, an "Application Selector" must be configured on the "Target Application" configuration for the respective authentication flow. Otherwise, this setting has no effect for the default IAM UI.
showGotoButtons
) Show Goto buttons for all configured Goto targets on all pages using default UIs of this flow. Clicking a Goto button will redirect to the corresponding Goto target. The Goto targets are configured in the flows themselves, not the UIs.
For customized step UIs, Goto buttons have to be configured explicitly using the "Goto Button UI Element" plugin.
Notice: Goto buttons do not come with pre-defined labels. It is required to add i18n keys and values for each button manually. The key may looks as follows: 'authentication.pages.actions.goto.<currentStepId>.<targetStepId>'.
maintenanceMessageUiSettings
) selfUnlockFlow
) targetURIResolver
) - The resolved URL must either be absolute (i.e. using https://) or start with a slash.
- It may be necessary to configure 'Identity Propagation' to make the authentication work.
- Uses the custom 'X-Forward-URL' header to inform the SPA about the target. Do not set the same header again in the identity propagation of the respective authentication flow.
- Note: this setting is irrelevant for SAML 2.0 target applications (a target application where the "SAML 2.0 Identity Propagator" is configured). For such an application, simply configure a resolver with "/" as default value.
cancellationTarget
) For customized step UIs, cancel buttons have to be configured explicitly using the "Cancel Button UI Element" plugin.
flowFailureTarget
) showCancelButtonOnFirstPage
) Note that even if this flag is disabled, a cancel button on the first page is always shown when the first page is reached again during the flow, e.g. by a Goto.
type: com.airlock.iam.authentication.application.configuration.ui.AuthenticationUiConfig
id: AuthenticationUiConfig-xxxxxx
displayName:
comment:
properties:
cancellationTarget:
customizedStepUis:
flowFailureTarget:
languageExtractor:
maintenanceMessageUiSettings:
selfUnlockFlow:
showCancelButtonOnFirstPage: false
showGotoButtons: true
targetApplicationId:
targetURIResolver:
Authentication & Authorization UIs
flowUis
) nonFlowUiSettings
) onLogout
) ssoParameterNames
)
type: com.airlock.iam.authentication.application.configuration.ui.AuthenticationUiConfigs
id: AuthenticationUiConfigs-xxxxxx
displayName:
comment:
properties:
flowUis:
nonFlowUiSettings:
onLogout:
ssoParameterNames: [sso]
Authentication Data Map
Provides some data about the successful authentication of the user.
Currently, the following values are provided:
- auth-token-id: Auth Token ID (available as soon as the user has used a second factor for authentication in this session).
- authentication-timestamp: timestamp (as date object) of the successful authentication (available as soon as the user has successfully authenticated for the first time in this session). Can be used by template-based providers to format the timestamp into a specific date format.
- authentication-timestamp-millis: timestamp (as number of milliseconds since epoch) of the successful authentication (available as soon as the user has successfully authenticated for the first time in this session).
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.AuthenticationDataValueMapProviderConfig
id: AuthenticationDataValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
Authentication Flow
steps
) processors
) The configured processors are extended with the following processors (if not already present):
- User Enumeration Protection Processor (only if "Prevent User Enumeration" enabled)
- Temporary Locking Processor (only if "Enable Temporary Locking" enabled)
preventUserEnumeration
) If enabled, user enumeration is prevented by not revealing what went wrong in a user identifying step ("Stealth Mode"). In particular, all failures because of wrong password or not existing, locked or invalid user are answered with the same generic error code AUTHENTICATION_FAILED
. Furthermore, the sessions of the user will be terminated on IAM and on the Airlock Gateway (WAF).
Note that this feature is not compatible with Temporary Locking, but it is recommended to configure a "Fixed Response Duration" for failed responses to prevent timing attacks.
Important note: This feature only protects against user enumeration if the identifying step identifies the user and at the same time checks a credential, e.g. in case of "Password Authentication" or "Device Token Authentication". If the "User Identifying Step" is used, this feature does not protect against user enumeration.
If enabled, a "User Enumeration Protection Processor" is automatically added to the list of flow processors.
temporaryLockingActive
) Enables Temporary Locking for this flow.
Note: Additional configuration must be done in "Authentication Flows", otherwise Temporary Locking will not be enabled.
If enabled, a "Temporary Locking Processor" is automatically added to the list of flow processors.
Note: Disabling and re-enabling this feature does not reset temporary locks.
addRemainingAttemptsInfo
) If enabled, for any step result that caused an increase in the number of failed attempts, the remaining number of attempts for that factor is returned with the step result.
This feature is not combinable with username enumeration protection.
usernameTransformers
) The transformation of a username takes place in the first step before the user is loaded. Note that username transformers have no effect on the propagated username value. Transformers can be chained, i.e. a first transformer could normalize the original name, where the next transformer looks up the normalized name in a database for potential transformation matches.
In contrary to the above description of chaining, a transformer can also signal that it already found the final user ID and the chain must stop after it.
For further details please refer to the documentation of the username transformer plugins.
additionalAttributes
) Whitelist of additional attributes (e.g. headers or REST attributes) for the check password authentication REST call (/<loginapp-uri>/rest/public/authentication/password/check/).
Attributes with matching names and valid values are made available to the flow.
persistencyless
) If enabled, this flow does not consider persistency, i.e. users don't have to exist locally in order to be authenticated. This is typically used with SSO tickets or external authentication using OAuth or SAML.
Persistency-less flows are very limited in their capabilities, in particular:
- Password checks and second factor authentication are not possible.
- The user state (locked, invalid etc.) cannot be verified.
- Identity propagation is limited to the information received from external systems.
Note that configuration validation support is limited. It is essential to test such a flow extensively to ensure it behaves correctly in all situations.
It is recommended to use the "Default Persistency-less Authentication Processors" when using a persistency-less flow.
type: com.airlock.iam.authentication.application.configuration.AuthenticationFlowConfig
id: AuthenticationFlowConfig-xxxxxx
displayName:
comment:
properties:
addRemainingAttemptsInfo: false
additionalAttributes:
persistencyless: false
preventUserEnumeration: false
processors:
steps:
temporaryLockingActive: true
usernameTransformers:
Authentication Flow Successfully Completed
type: com.airlock.iam.login.application.configuration.event.AuthenticationFlowSuccessfullyCompletedSubscribedEventConfig
id: AuthenticationFlowSuccessfullyCompletedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Authentication Instant SAML 2.0 Attribute
samlAttributeName
) dateAndTimeFormat
) If this property is set, the SAML 2.0 attribute will contain the authentication instant formatted using the configured date and time format. The format is interpreted as specified in the java.text.SimpleDateFormat documentation. Note that the output time zone is fixed to GMT.
If this property is not set, the attribute value will contain the authentication instant as a Unix timestamp (i.e. milliseconds since epoch).
nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.AuthenticationInstantAttributeConfig
id: AuthenticationInstantAttributeConfig-xxxxxx
displayName:
comment:
properties:
dateAndTimeFormat:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
samlAttributeName:
Authentication Method Changed
This event is not published in the following cases:
- The authentication method is edited via context data - use a "Context Data Changed" event instead
- The user is newly created
- The user is imported, e.g. via a service container task or from external persistency (AD/LDAP)
ignoreEmptyPreviousMethod
) ignoreEmptyActiveMethod
)
type: com.airlock.iam.common.application.configuration.event.AuthenticationMethodChangedEventConfig
id: AuthenticationMethodChangedEventConfig-xxxxxx
displayName:
comment:
properties:
ignoreEmptyActiveMethod: false
ignoreEmptyPreviousMethod: false
Authentication Method Condition
authMethod
)
type: com.airlock.iam.core.misc.persistency.usereventbus.conditions.AuthMethodEqualsEventCondition
id: AuthMethodEqualsEventCondition-xxxxxx
displayName:
comment:
properties:
authMethod:
Authentication Method Identifier Mapping
authMethodIdentifier
) authenticator
)
type: com.airlock.iam.core.misc.impl.authen.AuthMethodBasedAuthenticatorSelectorMapping
id: AuthMethodBasedAuthenticatorSelectorMapping-xxxxxx
displayName:
comment:
properties:
authMethodIdentifier:
authenticator:
AuthnContextClassRef URI SAML 2.0 Attribute
samlAttributeName
) nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.AuthnClassRefAttributeConfig
id: AuthnClassRefAttributeConfig-xxxxxx
displayName:
comment:
properties:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
samlAttributeName:
Authorization Flow
steps
) processors
)
type: com.airlock.iam.authentication.application.configuration.AuthorizationFlowConfig
id: AuthorizationFlowConfig-xxxxxx
displayName:
comment:
properties:
processors:
steps:
Automated Account Registration
usernameProvider
) userContextDataItems
) staticRoles
) statusUponCreation
) - logged-in: the new user will be automatically logged-in.
- locked: the new user will be locked, allowing an administrator to review the registration before unlocking the account. The user will be locked with reason
AwaitingAdminApproval
. The string resource key "account-registration-user-locked-message
" is used for the corresponding feedback message.
type: com.airlock.iam.oauth2.application.configuration.accountregistration.AccountRegistrationConfig
id: AccountRegistrationConfig-xxxxxx
displayName:
comment:
properties:
staticRoles:
statusUponCreation: LOGGED_IN
userContextDataItems:
usernameProvider:
AWS Access Key Authentication
This plugin provides credentials to allow IAM to access AWS services. If configured, no other credentials are considered, such as AWS cloud environment credentials.
accessKeyId
) secretAccessKey
)
type: com.airlock.iam.keymanagementservice.application.configuration.authentication.AwsAccessKeyAuthenticationConfig
id: AwsAccessKeyAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
accessKeyId:
secretAccessKey:
AWS Custom Service Access
region
) If no explicit AWS region is specified, IAM will attempt to identify the region in the following order:
- Java system property aws.region
- Environment variable AWS_REGION
- Config files at location {user.home}/.aws/credentials and {user.home}/.aws/config
- Region delivered through the Amazon EC2 metadata service
endpointUrl
) This property defines the endpoint (URL) of the entry point for an AWS web service.
If left empty, the default endpoint for the selected region is used (refer to the official AWS documentation).
If configured, the default endpoint is overwritten with this URL.
type: com.airlock.iam.keymanagementservice.application.configuration.access.AwsCustomServiceAccessConfig
id: AwsCustomServiceAccessConfig-xxxxxx
displayName:
comment:
properties:
endpointUrl:
region:
AWS Default Authentication
- Java system properties aws.accessKeyId and aws.secretAccessKey
- Environment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
- Web Identity Token credentials from system properties or environment variables
- Credential profiles file at location {user.home}/.aws/credentials
- Credentials delivered through the Amazon EC2 container service
- Instance profile credentials delivered through the Amazon EC2 metadata service
type: com.airlock.iam.keymanagementservice.application.configuration.authentication.AwsDefaultAuthenticationConfig
id: AwsDefaultAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
AWS Default Service Access
This plugin handles how IAM can access AWS service endpoints. It automatically selects the AWS region and thus the default endpoint for each service in that region, e.g. AWS Key Management Service (KMS).
Regions enable you to access AWS services that physically reside in a specific geographic area.
Default access selection is useful when IAM is deployed in an AWS cluster where the region is already provided in one of the formats described below.
IAM attempts to identify the AWS region in the following order:
- Java system property aws.region
- Environment variable AWS_REGION
- Config files at location {user.home}/.aws/credentials and {user.home}/.aws/config
- Region delivered through the Amazon EC2 metadata service
IAM requires a region to connect to the AWS service, otherwise connection fails with an error.
Multiple AWS regions for the same service are currently not supported.
type: com.airlock.iam.keymanagementservice.application.configuration.access.AwsDefaultServiceAccessConfig
id: AwsDefaultServiceAccessConfig-xxxxxx
displayName:
comment:
properties:
AWS Key Management Service
AWS KMS provides a web interface to generate and manage cryptographic keys and acts as a cryptographic service provider.
Airlock IAM utilizes AWS KMS to store encrypted data in its database without having access to the cryptographic key material. AWS KMS can also be used for end-to-end encryption.
serviceAccessSettings
) If IAM is deployed in an AWS cluster, it is recommended to use "AWS Default Service Access".
If you want to manually configure AWS access (region/service endpoint), use "AWS Custom Service Access" instead.
authenticationSettings
) If IAM is deployed in an AWS cluster, it is recommended to use "AWS Default Authentication".
If you want to manually configure AWS authentication (access key ID and secret), use "AWS Access Key Authentication" instead.
symmetricKeyArn
) This key is created in AWS and referenced here by its Amazon Resource Name (ARN). Key ARN and alias ARN are supported.
When automatic key rotation is active on AWS KMS, or if you intend to manually rotate keys, you must specify an alias ARN in this property.
asymmetricKeyArn
) This key is created in AWS and referenced here by its Amazon Resource Name (ARN). Key ARN and alias ARN are supported.
Since the lifetime of the public key is long, it is possible to save one AWS KMS round trip by downloading the public key and configuring it in "RSA Public Key". Make sure "RSA Asymmetric Key ARN" and "RSA Public Key" always point to the same asymmetric key material.
publicKey
) The public key can be downloaded from AWS directly and referenced here. A Base64 encoded key with or without RSA public key wrapping "BEGIN PUBLIC KEY"/"END PUBLIC KEY" is expected. This is an optimization so that the public key is taken from this property instead of requesting it by its "RSA Asymmetric Key ARN" from AWS for every operation.
rsaAlgorithm
) The algorithm must be compatible with the KMS key referenced by "RSA Asymmetric Key ARN".
type: com.airlock.iam.keymanagementservice.application.configuration.AwsKmsConfig
id: AwsKmsConfig-xxxxxx
displayName:
comment:
properties:
asymmetricKeyArn:
authenticationSettings:
publicKey:
rsaAlgorithm: RSAES_OAEP_SHA_256
serviceAccessSettings:
symmetricKeyArn:
AWS KMS Password Decryption
- Asymmetric key to encrypt the randomly generated key which encrypts a users password on client side. Configure this ARN in "RSA Asymmetric Key ARN".
- Symmetric key to encrypt the password hashes that are stored on Airlock IAM's database. Configure this ARN in "Symmetric Key ARN".
awsKmsSettings
)
type: com.airlock.iam.keymanagementservice.application.configuration.password.AwsKmsPasswordDecryptionConfig
id: AwsKmsPasswordDecryptionConfig-xxxxxx
displayName:
comment:
properties:
awsKmsSettings:
AWS KMS Password Hash
Password hash for AWS Key Management Service (KMS).
The password is first hashed with the defined hash function and then encrypted by AWS KMS.
This plugin does no encoding on the resulting hash. Therefore it should be used in combination with a 'Password Hash Configuration' or 'History Password Hash'.
If a password history is required, wrap this plugin in a 'History Password Hash'. However, bear in mind that an encrypted hash can be longer than the hash value itself. This affects the number of possible entries of 'Max History Length' in 'History Password Hash'.
hashFunction
) awsKmsSettings
)
type: com.airlock.iam.keymanagementservice.application.configuration.password.hash.AwsKmsPasswordHashConfig
id: AwsKmsPasswordHashConfig-xxxxxx
displayName:
comment:
properties:
awsKmsSettings:
hashFunction:
Base64 Password Hash Encoder
type: com.airlock.iam.core.misc.util.password.hash.Base64PasswordHashEncoder
id: Base64PasswordHashEncoder-xxxxxx
displayName:
comment:
properties:
Base64 String Encoder
encodingScheme
) urlSafeEncoding
)
type: com.airlock.iam.common.application.configuration.encoder.Base64StringEncoderConfig
id: Base64StringEncoderConfig-xxxxxx
displayName:
comment:
properties:
encodingScheme: UTF-8
urlSafeEncoding: false
Basic Auth Credentials
userName
) password
)
type: com.airlock.iam.core.application.configuration.basicauth.BasicAuthCredentialsConfig
id: BasicAuthCredentialsConfig-xxxxxx
displayName:
comment:
properties:
password:
userName:
Basic Auth Error Mapper
Error Mapper that initiates Basic Authentication when the client does not send credentials or the credentials are not valid.
This plugin is designed to be used with "Basic Auth HTTP Header Extractor".
realm
)
type: com.airlock.iam.login.app.misc.oneshot.impl.BasicAuthErrorMapperFactory
id: BasicAuthErrorMapperFactory-xxxxxx
displayName:
comment:
properties:
realm:
Basic Auth HTTP Header Extractor
Extracts username and password from the Basic Auth HTTP header.
Make sure to also configure the "Basic Auth Error Mapper" to respond with a corresponding "WWW-Authenticate" header in case of missing credentials.
charset
) usernameTransformers
) For further details please refer to the documentation of the username transformer plugins.
type: com.airlock.iam.login.app.misc.oneshot.impl.BasicAuthCredentialExtractorFactory
id: BasicAuthCredentialExtractorFactory-xxxxxx
displayName:
comment:
properties:
charset: UTF-8
usernameTransformers:
Basic Auth Request Authentication
passwordRepository
) policyToCheckOnLogin
) maxFailedAttempts
) Effective only if a 'User Store' is configured.
charsetName
) userStore
) usernameTransformers
) staticRoles
) rolesBlocklist
)
type: com.airlock.iam.common.application.configuration.credential.BasicAuthRequestAuthenticationConfig
id: BasicAuthRequestAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
charsetName: UTF-8
maxFailedAttempts: 5
passwordRepository:
policyToCheckOnLogin:
rolesBlocklist:
staticRoles:
userStore:
usernameTransformers:
Basic Auth Token Introspection Config
Note: The basic auth scheme in OAuth 2.0 requests must comply to the specification in RFC 6749
charset
) allowedUsers
)
type: com.airlock.iam.login.app.misc.oauth2.introspection.config.BasicAuthTokenIntrospectionConfig
id: BasicAuthTokenIntrospectionConfig-xxxxxx
displayName:
comment:
properties:
allowedUsers:
charset: UTF-8
Basic mTAN Settings
mtanHandler
) smsGateway
) originator
) Originator of the SMS messages.
There may be restrictions on the originator imposed by the SMS gateway service and by local law.
The format of the originator must be one of:
- Numeric characters only, optionally prefixed with a plus sign '+', at most 16 characters
- Alphanumeric characters, at most 11 characters
defaultCountryCode
) useFlashMessages
) If enabled, SMS messages are sent as flash SMS by default. A flash message is shown directly on the mobile phone display.
If the per-user setting is set, it takes precedence as long as a value is set for a user. If it is empty or not set, this default value is used.
Note: This has to be supported by the SMS gateway. Some recipients might not be able to receive flash messages.
visiblePhoneNumberDigits
) Defines the number of phone number digits visible in log statements and in selection options sent to the user.
If the value is zero, all digits are masked, if it is large enough, all digits are visible. Example: if set to 3, logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.common.application.configuration.mtan.BasicMtanSettings
id: BasicMtanSettings-xxxxxx
displayName:
comment:
properties:
defaultCountryCode: 41
mtanHandler:
originator:
smsGateway:
useFlashMessages: false
visiblePhoneNumberDigits: 100
Basic Secret Question Settings
questionResourceKeys
) Ensure that no new question with the same key is introduced later. Any user's answer to the previous question would not match the new question.
numberOfQuestions
) normalization
) - OFF:
No normalization. Provisioned and challenged answers must match exactly. - TRIM:
Removes whitespaces at the beginning and end of the answer string. - TRIM_CASEINSENSITIVE:
Does the same as TRIM and additionally converts all characters to lowercase. - TRIM_CASEINSENSITIVE_NOWHITESPACE:
Does the same as CASEINSENSITIVE_TRIM and additionally removes all whitespace. - TRIM_CASEINSENSITIVE_NOWHITESPACE_NOSPECIALCHARS:
Does the same as CASEINSENSITIVE_TRIM_NOWHITESPACE and additionally removes all non-word characters (all characters except letters, digits and the underscore).
tokenDataProvider
) hashFunctionPlugin
) NOTE: Some password hashes, such as SHA 256 Password Hash or Scrypt Password Hash, produce binary output. If one of these is used, make sure the persistence layer supports binary data in the hash field and the corresponding persistence plugins (e.g. Database User Store or Ldap Connector) are configured to treat hash values as binary values.
In case the persistence layer expects a string, encode the password hash by wrapping it with an encoder. To achieve this, use the Password Hash Configuration plugin and specify the hash function (such as Scrypt Password Hash) together with the desired encoder. We recommend using the Base64 Password Hash Encoder.
minLength
) maxLength
) answerRegexPattern
) duplicateAnswersForbidden
) checkUsingLatin1Encoding
) If enabled, answers containing special characters stored by IAM earlier than 6.3 are still accepted. This option does not have to be activated if all answers were set using IAM 6.3 or later or if all answers were set via webservices or REST.
To support legacy answers, those with special characters are additionally checked using their legacy encoding in latin1.
type: com.airlock.iam.login.application.configuration.secretquestions.BasicSecretQuestionSettings
id: BasicSecretQuestionSettings-xxxxxx
displayName:
comment:
properties:
answerRegexPattern:
checkUsingLatin1Encoding: false
duplicateAnswersForbidden: true
hashFunctionPlugin:
maxLength: 100
minLength: 2
normalization: TRIM_CASEINSENSITIVE
numberOfQuestions: 2
questionResourceKeys:
tokenDataProvider:
Bcrypt Password Hash
Returns $[version]$[cost]$[22 character salt][31 character hash]
as a bcrypt string.
cost
) The value must be greater than or equal to 4 and less than or equal to 31. The number of iterations is stored together with the bcrypt string. Therefore, this value can be increased or decreased without losing backward compatibility.
version
) - $2$: version prefix in the original specification.
- $2a$: version prefix in the revised specification defining encoding and null-terminator explicitly.
- $2y$, $2b$: version prefixes stating explicitly that the implementation is not affected by certain known bugs.
This has no effect when checking passwords as this implementation does not suffer from the known bugs and supports all versions. Therefore, this value can be changed without losing backward compatibility.
type: com.airlock.iam.core.misc.util.password.hash.BcryptPasswordHash
id: BcryptPasswordHash-xxxxxx
displayName:
comment:
properties:
cost: 12
version: 2a
Bearer Token HTTP Header Extractor (as Token Credential)
Extracts a bearer token from the "Authorization" HTTP header and provides it as "Token Credential" to the authenticator.
This extractor is suitable for authenticators that are able to process token credentials, such as the "Token Authenticator" or the "OAuth 2.0 Access Token Authenticator".
type: com.airlock.iam.login.app.misc.oneshot.impl.BearerTokenHttpHeaderExtractorConfig
id: BearerTokenHttpHeaderExtractorConfig-xxxxxx
displayName:
comment:
properties:
Body And HTTP Status On Behalf Login Step Validator
httpStatusValidators
) Provides a mean to have different validators depending on the HTTP status code of the response.
The map defines pairs of status codes (key) and validators (value). If the HTTP status code of the response matches to one of the following mappings, the corresponding validator gets executed. The key has to be a valid number.
If the response contains a status code that is not defined here, the "Default Body Status On Behalf Login Step Validator" is used for the validation.
defaultValidator
)
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.BodyAndHttpStatusOnBehalfLoginStepValidator
id: BodyAndHttpStatusOnBehalfLoginStepValidator-xxxxxx
displayName:
comment:
properties:
defaultValidator:
httpStatusValidators:
Body Status On Behalf Login Step Validator
- The technical error patterns are validated. In case one of the technical error patterns matches, the validation fails.
- The access denied patterns are matched. In case one of the access denied patterns matches, the validation fails with an access denied error.
- In case one of the success patterns matches, the validation is successful. In case none of the success patterns match, the validation fails with a technical error.
successCases
) accessDeniedCases
) technicalErrorCases
)
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.BodyStatusOnBehalfLoginStepValidator
id: BodyStatusOnBehalfLoginStepValidator-xxxxxx
displayName:
comment:
properties:
accessDeniedCases:
successCases:
technicalErrorCases:
Boolean Condition Config
true
. valueProvider
) isFulfilledIfValueIsNull
)
type: com.airlock.iam.flow.shared.application.configuration.condition.BooleanConditionConfig
id: BooleanConditionConfig-xxxxxx
displayName:
comment:
properties:
isFulfilledIfValueIsNull: false
valueProvider:
Boolean Context Data
contextDataItemNameConfig
) valueProviderConfig
)
type: com.airlock.iam.userselfreg.application.configuration.definition.BooleanNonInteractiveUserDataItemDefinitionConfig
id: BooleanNonInteractiveUserDataItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
contextDataItemNameConfig:
valueProviderConfig:
Boolean Context Data Item Config
The database column must either be of an integer type (e.g. TINYINT, INTEGER containing either 0 or 1) or of a string type (e.g. VARCHAR, CHAR containing either "0" or "1") and the values in the context data container are guaranteed to be of type java.lang.Boolean. If the persistency has a NULL value or its value does not match the values above, FALSE is assumed.
contextDataName
) databaseColumnName
) readonlyOnUpdate
)
type: com.airlock.iam.core.application.configuration.contextdata.BooleanContextDataItemConfig
id: BooleanContextDataItemConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
databaseColumnName:
readonlyOnUpdate: false
Boolean Context Data Item Name
contextDataName
)
type: com.airlock.iam.core.application.configuration.contextdata.BooleanContextDataItemNameConfig
id: BooleanContextDataItemNameConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
Boolean Context Data Value Provider
Provides the boolean value contained in the specified context data item of the user.
Make sure the configured context data item is also configured on the user persister.
contextDataField
) mandatory
) If enabled, the value provided by this context data item is not allowed to be null.
If this option is enabled and the context data item is null (e.g. if the configured context data is not configured on the user persister), an exception will be thrown at runtime.
type: com.airlock.iam.common.application.configuration.valueprovider.contextdata.ContextDataBooleanValueProviderConfig
id: ContextDataBooleanValueProviderConfig-xxxxxx
displayName:
comment:
properties:
contextDataField:
mandatory: false
Boolean Data Transformer
The values in the context data container are guaranteed to be of type java.lang.Boolean.
properties
) Use the asterisk character ("*") to replace all properties.
type: com.airlock.iam.core.misc.util.datatransformer.BooleanDataTransformer
id: BooleanDataTransformer-xxxxxx
displayName:
comment:
properties:
properties:
Boolean Input Token Controller Element
label
) property
) The referenced property must be available in the attributes
value of the generic token REST call response. If the property is nested, e.g. inside the contextData
key, it can be referenced with dot notation (see example values).
readOnly
)
type: com.airlock.iam.admin.application.configuration.generic.ui.BooleanInputTokenControllerUiElementConfig
id: BooleanInputTokenControllerUiElementConfig-xxxxxx
displayName:
comment:
properties:
label:
property:
readOnly: false
Boolean User Context Data Item
contextDataName
) required
) valueMustBeTrue
) valueMustBeFalse
)
type: com.airlock.iam.flow.shared.application.configuration.item.BooleanContextDataItemDefinitionConfig
id: BooleanContextDataItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
required: true
valueMustBeFalse: false
valueMustBeTrue: false
Boolean User Profile Item Config
formatAsBooleanObject
) stringResourceKey
) propertyName
) optional
) modifiable
) validateOnlyChangedValues
) sortable
)
type: com.airlock.iam.common.application.configuration.userprofile.BooleanUserProfileItemConfig
id: BooleanUserProfileItemConfig-xxxxxx
displayName:
comment:
properties:
formatAsBooleanObject: true
modifiable: true
optional: true
propertyName:
sortable: true
stringResourceKey:
validateOnlyChangedValues: true
Button Group UI Element
buttons
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableUiButtonGroupConfig
id: ConfigurableUiButtonGroupConfig-xxxxxx
displayName:
comment:
properties:
buttons:
Button UI Element
label
) disabledOnValidationErrors
) disabledWithNoChanges
) alignment
) submit
) onClick
) htmlId
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableUiButtonConfig
id: ConfigurableUiButtonConfig-xxxxxx
displayName:
comment:
properties:
alignment: RIGHT
disabledOnValidationErrors: true
disabledWithNoChanges: true
htmlId:
label:
onClick:
submit: false
Caching Certificate Status Checker
cacheEntryLifetime
) maximumCacheSize
) wrappedStatusChecker
)
type: com.airlock.iam.core.misc.impl.cert.cached.CachingCertificateStatusChecker
id: CachingCertificateStatusChecker-xxxxxx
displayName:
comment:
properties:
cacheEntryLifetime: 60
maximumCacheSize: 1000
wrappedStatusChecker:
Cancel Button UI Element
label
) alignment
) htmlId
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableUiCancelButtonConfig
id: ConfigurableUiCancelButtonConfig-xxxxxx
displayName:
comment:
properties:
alignment: RIGHT
htmlId: cancelButton
label: cancel
CAPTCHA Processor
Note: This processor must be the first in the list of available processors.
type: com.airlock.iam.flow.shared.application.configuration.captcha.CaptchaProcessorConfig
id: CaptchaProcessorConfig-xxxxxx
displayName:
comment:
properties:
CAPTCHA UI Element
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableCaptchaConfig
id: ConfigurableCaptchaConfig-xxxxxx
displayName:
comment:
properties:
Certificate Authenticator
Warning 1: This authenticator assumes that some external process can guarantee that the certificate belongs to the authenticating entity. This is typically done by challenging the entity to sign something with the corresponding private key. This is, for example, the case in an SSL handshake involving client certificate verification.
Warning 2: This authenticator does not check whether the certificate was signed by a trusted entity. This must be done prior to calling this authenticator, typically during an SSL handshake.
The credentials passed to this authenticator must be of type
If the credential contains a username (subtype of
If the credential contains a username but no certificate (type CERTIFICATE_REQUIRED
. This makes it suitable for usage with the
What checks are done on the certificate and how the user name and granted roles (and possibly other data) are determined is specified by the configuration.
There are two different (and mutual exclusive) ways how this plugin determines the username given the client certificate:
(1) Extract username from client certificate. In this case the username potentially passed as credential is ignored. Look at configuration property user-attribute
for this case.
(2) Take user name from the credential. In this case, the credential must contain a username.
Independent of the way the username has been determined, a credential persister can be used to verify that the client certificate really belongs to the username. See property credential-persister
for details. If the client certificate does not match the data stored under the determined username, the authentication response AuthenticationFailedCertificate.CERTIFICATE_DOES_NOT_MATCH_USER
is returned.
The plugin writes the canonical class name description of this plugin to the context data container. The class name is stored under the key authPluginClassName
. A short description of this authentication method is stored under the key authMethodShortDesc
. This information may be used by callers.
userAttribute
) If a credential persister is configured (see below), the extracted user name is used to look up the credential bean. The bean can be used for further checks.
Note: This can be used to find a user mapped to the certificate (e.g. the CN of the certificate is stored with the username in the persistence layer). To do so, configure the credential persister accordingly to look up the credential data given the value defined by this property(which does not necessarily have to be the real username). Then use the credential-bean-username property below to read the real username from the credential bean.
Note: This property has precedence over the username in the credential object. Thus, if this property is defined, any user information passed as credential is ignored.
Usually the username is part of the DN (distinguished name) of the certified subject.
This attribute specifies the attribute name of the username in the DN. Example: The value "cn" will extract the common name from the DN and use this as username.
The following values are treated especially:
- "dn": use this value to use the whole distinguished name as username.
- "altSubjectName": use this value to use the alternative subject name as username.
If this property is not defined, the plugin takes the username from the credential.
Look at property credential-persister
to see how to validate that the user is registered with for this client certificate.
stripDomainFromUsername
) This property is ignored if the configuration property "user-attribute" is not defined or set to "dn".
credentialPersister
) If this property is defined, the plugin is used to look up a credential bean using the determined username (or other id determined by this plugin). Then a check is performed whether the certificate really belongs to the user. The check is defined by the separate configuration property "matchPolicy".
How this plugin reacts if no credential record can be found is specified by the separate property "treat-no-credential-data-as-not-assigned".
usernameTransformers
) Username transformers may transform the name a user states in the login-form into the single unique user-id required for the authentication process.
The transformation of a username takes place after extracting the user name from the presented certificate and before the authenticator reads the user from persistency layer. If a username is supplied from a previous authentication step, then no transformation is done here.
Transfomers can be chained, i.e. a first transformer could normalize the original name, where the next transformer looks-up the normalized name in a database for eventual transformation matches.
A transformer can also signal that it already found the final user-id and the chain must stop after him.
doNotUpdateUserStatistics
) This property is only relevant if a user persister is configured.
matchPolicy
) This check is only done if a credential bean has been loaded using the configured credential persister.
The credential data of the credential bean is compared to the certificate depending on the value of this property:
- "DNs" : The distinguished names (DN) of the certificate subject and the issuer is compared to the string data of the credential bean. The comparison is case-insensitive. The DNs are encoded in the following form for comparison: <issuer-dn>ISSUER-DN</issuer-dn><subject-dn>SUBJECT-DN</subject-dn>
This is the default value. - "subject-DN" : The DN of the certificate subject is compared to the string data of the credential bean. The comparison is case-insensitive. This setting can be combined with the setting "issuer-dn-property"
- "CN" : The common name (CN) of the certificate subject is compared to the string data of the credential bean. The comparison is case-insensitive. This setting can be combined with the setting "issuer-dn-property"
- "TBS" : The TBS (to-be-signed) part of the certificate is compared to the string or binary data of the credential bean. If the credential data is binary, the comparison is done byte-wise, if it is a string type credential, the TBS-part is base64-encoded before comparing.
- "certificate" : The X509 certificate is compared to the string or binary data of the credential bean. If the credential data is binary, the comparison is done byte-wise, if it is a string type credential, the certificate is base64-encoded before comparing.
- "NONE" : No check is performed.
Note: For backwards-compatibility, the default value of this property is "DNs"!
If a credential record can be found but it contains no credential data, this plugin responds with CREDENTIAL_NOT_ASSIGNED
(can for example start a registration process), if credential data can be found but does not match in this check, CERTIFICATE_DOES_NOT_MATCH_USER
. How the plugin behaves if no credential record can be found at all is defined property "treat-no-credential-data-as-not-assigned".
issuerDnProperty
) This setting is only used in conjunction with match policies "CN" and "subject-DN" and requires that a credential persister is configured: In addition to matching the cn or subject dn the issuer DN is also compared to the value stored in the context property (of the credential context container) referenced by this setting.
The comparison is case-insensitive.
multiFormatDnComparison
) - a=A,b=B,c=C
- c=C,b=B,a=A (backwards)
- /a=A/b=B/c=C (slash notation)
- /c=C/b=B/a=A (slash notation backwards)
- a=A,b=B,x.y.z=C (where x.y.z is the OID for attribute c)
This affects match policy "subject-DN" and it affects issuer DN comparison if the property "issuer-dn-property" is defined.
userProperty
) This property is used in situations where the username cannot be extracted directly from the certificate but it is determined by looking up a credential bean and reading the username from it. If the referenced context data property cannot be found, an AuthenticatorException is thrown.
If this property is defined, it usually makes sense to also set the property "treat-no-credential-data-as-not-assigned" to true.
treatNoCredDataAsNotAssigned
) CREDENTIAL_NOT_ASSIGNED
if no credential bean can be found at all. If it is "FALSE" (which is the default), this plugin responds with USER_NOT_FOUND
.
This property exists to make this plugin suitable for situations where the username cannot be extracted directly from the certificate but it is determined by looking up a credential bean and reading the username from it. In this case not finding a credential bean at all usually means that the certificate has not yet been assigned. In the other case - i.e. the username is directly read from the certificate - not finding the credential bean usually means that the user does no more exist.
staticRoles
) certificateStatusChecker
) Note: If this optional property is not defined or empty (and no certificate status checker plugins are configured by the property "Cert Status Checkers"), no status check is performed (i.e. all certificates are considered to be non-revoked).
userPersister
) - User is not found
- Username is ambiguous
- User is locked
- User is not valid
maxFailedLogins
) expiringCertificateWarningDays
) additionalUserValidators
) checkValidityPeriod
) certStatusCheckers
)
type: com.airlock.iam.core.misc.impl.authen.CertificateAuthenticator
id: CertificateAuthenticator-xxxxxx
displayName:
comment:
properties:
additionalUserValidators:
certStatusCheckers:
certificateStatusChecker:
checkValidityPeriod: true
credentialPersister:
doNotUpdateUserStatistics: false
expiringCertificateWarningDays:
issuerDnProperty:
matchPolicy: DNs
maxFailedLogins: 0
multiFormatDnComparison: false
staticRoles:
stripDomainFromUsername: false
treatNoCredDataAsNotAssigned: false
userAttribute:
userPersister:
userProperty:
usernameTransformers:
Certificate Credential Extraction Step Config
certificateRequired
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.techclientreg.application.configuration.step.CertificateCredentialExtractionStepConfig
id: CertificateCredentialExtractionStepConfig-xxxxxx
displayName:
comment:
properties:
certificateRequired: true
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Certificate Data Extractor Task
This task can be used to retrieve information encoded in the certificate and write it to the user record so the information can be used in search criteria, queries or be displayed more easily in the admin tool.
The certificate data read from the record must be the base-64 encoded binary representation of an X.509 ASN.1 structure. It also can be only the TBS-part ("to-be-signed part") of the certificate.
credentialPersister
) The returned credentials must either contain the certificate data in the string credential field or in one of the context data fields. In the latter case, the name of the context data field containing the certificate data must be specified in property "certificate-property".
Make sure the persister is able to store the target field(s), i.e. the field(s) where the extracted data is stored. It is usally necessary to list these fields in the context data container.
credentialIterator
) It is usually a good idea to already include a "not-null"-check on the certificate data and "null"-checks in the fields where the extracted data is stored. Like this only the records with missing (i.e. not yet processed) data are processed.
certificateProperty
) isTbsData
) mapping
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.CertificateDataExtractorTask
id: CertificateDataExtractorTask-xxxxxx
displayName:
comment:
properties:
certificateProperty:
credentialIterator:
credentialPersister:
isTbsData: false
mapping:
Certificate Data to Context Data Mapping
certificateDataElement
) - "notBefore": Validity start date.
- "notAfter": Validity end date.
- "subjectDn": Distinguished name of the subject.
- "subjectCn": Common name of the subject.
- "issuerDn": Distinguished name of the issuer.
- "serial": Certificate serial number.
contextProperty
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.CertificateDataExtractorTaskMapping
id: CertificateDataExtractorTaskMapping-xxxxxx
displayName:
comment:
properties:
certificateDataElement:
contextProperty:
Certificate Subject Organization Identifier Equality Credential Verifier
type: com.airlock.iam.login.app.misc.oneshot.impl.CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfig
id: CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfig-xxxxxx
displayName:
comment:
properties:
Certificate Token Authenticator
Warning 1: This authenticator assumes that some external process can guarantee that the certificate belongs to the authenticating entity. This is typically done by challenging the entity to sign something with the corresponding private key. This is, for example, the case in an SSL handshake involving client certificate verification.
Warning 2: This authenticator does not check whether the certificate was signed by a trusted entity. This must be done prior to calling this authenticator, typically during an SSL handshake.
certificateMatcher
) staticRoles
) updateUserStatistics
) updateTokenStatistics
) userPersister
) - User is not found
- Username is ambiguous
- User is locked
- User is not valid
maxFailedLogins
) expiringCertificateWarningDays
) additionalUserValidators
) checkValidityPeriod
) certStatusCheckers
)
type: com.airlock.iam.core.misc.impl.authen.certificate.CertificateTokenAuthenticator
id: CertificateTokenAuthenticator-xxxxxx
displayName:
comment:
properties:
additionalUserValidators:
certStatusCheckers:
certificateMatcher:
checkValidityPeriod: true
expiringCertificateWarningDays:
maxFailedLogins: 0
staticRoles:
updateTokenStatistics: true
updateUserStatistics: true
userPersister:
Certificate Token Controller
tokenDataProvider
) allowedAsActive
)
type: com.airlock.iam.admin.application.configuration.certificate.CertificateTokenController
id: CertificateTokenController-xxxxxx
displayName:
comment:
properties:
allowedAsActive: true
tokenDataProvider:
Certificate Token Credential Extractor Config
type: com.airlock.iam.login.app.misc.oneshot.impl.CertificateTokenCredentialExtractorConfig
id: CertificateTokenCredentialExtractorConfig-xxxxxx
displayName:
comment:
properties:
Chaining Identity Propagator
Note: The configured identity propagators are processed in the defined order.
This plugin is useful if more than one identity propagator should be used.
idPropagators
)
type: com.airlock.iam.core.misc.impl.sso.ChainingIdentityPropagator
id: ChainingIdentityPropagator-xxxxxx
displayName:
comment:
properties:
idPropagators:
Changed Email Address Provider
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.ChangedEmailProviderConfig
id: ChangedEmailProviderConfig-xxxxxx
displayName:
comment:
properties:
Checkbox UI Element
label
) property
) validation
) labelLeft
) htmlId
) submitToServer
) initialValueQuery
) See the JSONPath documentation for the full documentation: https://github.com/dchester/jsonpath
Examples:Assume the initial REST call returns the following JSON response:
{ "meta": { "type": "jsonapi.metadata.document", "timestamp": "2023-03-10T13:06:01.294+02:00" }, "data": [ { "type": "user", "id": "user1", "attributes": { "contextData": { "givenname": "User1", "surname": "FSMTest", "roles": "customerA" } } }, { "type": "user", "id": "user2", "attributes": { "contextData": { "givenname": "User2", "surname": "FSMTest", "roles": "customerB" } } } ] }
The following table shows the results of various JSONPath queries given the JSON above:
Description JSONPath Query Extracted Initial Value Static path from the root $.meta.type jsonapi.metadata.document The role of the user whose id equals "user1" $.data[?(@.id == 'user1')].attributes.contextData.roles customer The number of users $.data.length 2 All "givenname" attributesNote:
This query yields multiple results.
The first one is set to the initial value, the rest is discarded. $..givenname User1
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableUiCheckboxConfig
id: ConfigurableUiCheckboxConfig-xxxxxx
displayName:
comment:
properties:
htmlId:
initialValueQuery:
label:
labelLeft: true
property:
submitToServer: true
validation:
Cipher Credential Persister
Encrypts and decrypts selected fields of credential data. Uses an underlying other credential persister plugin to load and store data, i.e. it is applicable to any other credential persister plugin.
Note that data that is not (yet) encrypted can be read as plaintext. The first time the field is written(because of a change in the very field itself), it will be encrypted. This makes migration of data and mixture with encrypted and non-encrypted data possible. It also implies that this encryption provides secrecy (confidentiality) but no authenticity!
The following restrictions apply when using data field encryption:
- Encryption can only be applied to the serial number, the credential data and context data fields.
- Encryption of context data properties can only be applied to string type properties.
- Encryption cannot be applied to the username (even if part of the context data container)
- Searching on encrypted fields is not supported.
- If encrypting a context data property that is also used by other persister plugins (e.g. a user persister plugin), make sure that the other plugin also encrypts the field.
- Note that encrypted strings are larger than their plain counterpart. Make sure to allow long strings in the underlying persister plugin. The shortest encrypted string is 38 characters long. For longer strings, doubling the plain string length makes a good upper boundary.
credentialPersister
) encryptSerial
) encryptCredentialData
) encryptedContextProperties
) Specifies a list of names of string context data properties that have to be stored encrypted on the database.
cipherPassword
) Password used for the encryption and decryption.
If other persister plugins (e.g. a UserPersister plugin) also use encryption on data fields encrypted in this plugin, make sure they use the same password.
This property supports the extended string syntax, i.e. its value may be configured scrambled or in an external file (see example values).
type: com.airlock.iam.core.misc.impl.persistency.cipher.CipherCredentialPersister
id: CipherCredentialPersister-xxxxxx
displayName:
comment:
properties:
cipherPassword:
credentialPersister:
encryptCredentialData: true
encryptSerial: false
encryptedContextProperties:
Cipher Token List Persister
Encrypts and decrypts selected context data fields of token list data structure. Uses an underlying other token list persister plugin to load and store data, i.e. it is applicable to any other token list persister plugin.
Note that data that is not (yet) encrypted can be read as plaintext. The first time the field is written(because of a change in the very field itself), it will be encrypted. This makes migration of data and mixture with encrypted and non-encrypted data possible. It also implies that this encryption provides secrecy (confidentiality) but no authenticity!
The following restrictions apply when using data field encryption:
- Encryption can only be applied to context data fields.
- Encryption can only be applied to string type properties.
- Encryption cannot be applied to the username (even if part of the context data container)
- Searching on encrypted fields is not supported.
- If encrypting a context data property that is also used by other persister plugins (e.g. a user persister plugin), make sure that the other plugin also encrypts the field.
- Note that encrypted strings are larger than their plain counterpart. Make sure to allow long strings in the underlying persister plugin. The shortest encrypted string is 38 characters long. For longer strings, doubling the plain string length makes a good upper boundary.
tokenListPersister
) encryptedContextProperties
) Specifies a list of names of string context data properties that have to be stored encrypted on the database.
cipherPassword
) Password used for the encryption and decryption.
If other persister plugins (e.g. a UserPersister plugin) also use encryption on data fields encrypted in this plugin, make sure they use the same password.
This property supports the extended string syntax, i.e. its value may be configured scrambled or in an external file (see example values).
type: com.airlock.iam.core.misc.impl.persistency.cipher.CipherTokenListPersister
id: CipherTokenListPersister-xxxxxx
displayName:
comment:
properties:
cipherPassword:
encryptedContextProperties:
tokenListPersister:
Cipher User Persister
Encrypts and decrypts selected fields of user data. Uses an underlying other user persister plugin to load and store data, i.e. it is applicable to any other user persister plugin.
The method changeUsername(String oldUsername, String newUsername)
is not implemented and will throw a NotImplementedException
.
Note that data that is not (yet) encrypted can be read as plaintext. The first time the field is written (because of a change in the very field itself), it will be encrypted. This makes migration of data and mixture with encrypted and non-encrypted data possible. It also implies that this encryption provides secrecy (confidentiality) but no authenticity!
The following restrictions apply when using data field encryption:
- Encryption can only be applied to context data fields.
- Encryption can only be applied to string type fields.
- Encryption cannot be applied to the username (even if part of the context data container)
- Searching on encrypted fields is not supported.
- If encrypting a context data property that is also used by other persister plugins (e.g. a credential persister plugin), make sure that the other plugin also encrypts the field.
- Note that encrypted strings are larger than their plain counterpart. Make sure to allow long strings in the underlying persister plugin. The shortest encrypted string is 38 characters long. For longer strings, doubling the plain string length makes a good upper boundary but some encryption mechanisms will still produce much longer output.
userPersister
) encryptedContextProperties
) Specifies a list of names of string context data properties that have to be stored encrypted on the database.
cipherPassword
) Password used for the encryption and decryption.
If other persister plugins (e.g. a CredentialPersister plugin) also use encryption on context data fields listed in this plugin, make sure they use the same password.
This property supports the extended string syntax, i.e. its value may be configured scrambled or in an external file (see example values).
type: com.airlock.iam.core.misc.impl.persistency.cipher.CipherUserPersister
id: CipherUserPersister-xxxxxx
displayName:
comment:
properties:
cipherPassword:
encryptedContextProperties:
userPersister:
Claim From Subject Token (OAuth 2.0 Token Exchange)
Sets the claim to the configured claim value of the subject token.
If the referenced subject token data does not contain any value, it will be ignored.
subjectTokenDataName
)
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtSubjectTokenClaimValueConfig
id: OAuth2TokenExchangeJwtSubjectTokenClaimValueConfig-xxxxxx
displayName:
comment:
properties:
subjectTokenDataName:
Claim Set Custom Claim
customClaims
) claimName
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.claims.CustomClaimSetClaimConfig
id: CustomClaimSetClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
customClaims:
Claim Validator
claim
) mandatory
) validationPattern
)
type: com.airlock.iam.oauth2.application.configuration.claims.ClaimValidatorSettings
id: ClaimValidatorSettings-xxxxxx
displayName:
comment:
properties:
claim:
mandatory: true
validationPattern:
Client Certificate (X.509) Credential Extractor
type: com.airlock.iam.login.app.misc.oneshot.impl.ClientCertificateExtractor
id: ClientCertificateExtractor-xxxxxx
displayName:
comment:
properties:
Client Certificate (X.509) Request Authentication
Authenticates single requests by their client certificate.
Warning 1: This authentication assumes that some external process can guarantee that the certificate belongs to the authenticating entity. This is typically done by challenging the entity to sign something with the corresponding private key. This is, for example, the case in an SSL handshake involving client certificate verification.
Warning 2: This authentication does not check whether the certificate was signed by a trusted entity. This must be done during the SSL handshake.
userAttribute
) Defines how the username is extracted from the certificate.
Usually the username is part of the DN (distinguished name) of the certified subject. This attribute specifies the attribute name of the username in the DN. Example: The value "cn" will extract the common name from the DN and use this as username.
The following values are interpreted separately:
- dn: the whole distinguished name is used.
- subjectAlternativeName: the alternative subject name is used.
- certificate: the base64 encoded certificate.
Username transformation can be used to lookup the user based on a context-data field or to modify the extracted username (e.g. to strip the domain from the name).
checkValidityPeriod
) certStatusCheckers
) userStore
) usernameTransformers
) staticRoles
) rolesBlocklist
)
type: com.airlock.iam.common.application.configuration.certificate.ClientCertificateRequestAuthenticationConfig
id: ClientCertificateRequestAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
certStatusCheckers:
checkValidityPeriod: true
rolesBlocklist:
staticRoles:
userAttribute:
userStore:
usernameTransformers:
Client Certificate Context Extractor
Context extractor that determines the context by matching configurable regular expressions against information in the client certificate extracted from the request.
This extractor works in conjunction with client certificate authentication.
mappings
) Defines mappings of regular expressions patterns to configuration contexts.
Each pattern is matched in order against the issuer distinguished name (DN) of the extracted client certificate.
The first matching pattern determines the resulting configuration context.
matchAgainstSubjectDn
) fallbackContext
) Leave empty to implicitly use the default context. If this plugin is used within a "Combining Context Extractor", use "[DEFAULT]" to explicitly return the default context if necessary.
gateway
) The client certificate is extracted differently from the request based on this configuration:
- Airlock Gateway (WAF): certificate is extracted from the environment cookie
- Airlock Microgateway: certificate is extracted from the configured header
- When no gateway is configured, attempt to extract the client certificate from the jakarta.servlet.request.X509Certificate request attribute
type: com.airlock.iam.common.application.configuration.context.ClientCertificateContextExtractor
id: ClientCertificateContextExtractor-xxxxxx
displayName:
comment:
properties:
fallbackContext:
gateway:
mappings:
matchAgainstSubjectDn: false
Client Certificate Context Extractor Pattern
pattern
) configurationContext
) Use "[DEFAULT]" to explicitly return the default context.
type: com.airlock.iam.common.application.configuration.context.ContextPatternForClientCertificateContextExtractor
id: ContextPatternForClientCertificateContextExtractor-xxxxxx
displayName:
comment:
properties:
configurationContext:
pattern:
Client Certificate PEM Format
If an invalid format is presented, the certificate cannot be extracted.
type: com.airlock.iam.common.application.configuration.gateway.extractor.ClientCertificatePemExtractionFormatConfig
id: ClientCertificatePemExtractionFormatConfig-xxxxxx
displayName:
comment:
properties:
Client Certificate XFCC Format
The XFCC is a proxy header which indicates certificate information of part or all of the clients or proxies that a request has flowed through, on its way from the client to the server.
IAM requires that the Cert
key is set in the XFCC header under which the URL encoded PEM certificate is contained.
Envoy and other proxies in between, e.g. Airlock Micogateway, must be configured accordingly.
If an invalid format is presented, the certificate cannot be extracted.
type: com.airlock.iam.common.application.configuration.gateway.extractor.ClientCertificateXfccExtractionFormatConfig
id: ClientCertificateXfccExtractionFormatConfig-xxxxxx
displayName:
comment:
properties:
Client Fingerprinting Score Risk Extractor
clientFingerprintingThreshold
) tagsWhenAboveOrEqualThreshold
) tagsWhenBelowThreshold
)
type: com.airlock.iam.authentication.application.configuration.risk.extractor.clientfingerprinting.ClientFingerprintingScoreRiskExtractorConfig
id: ClientFingerprintingScoreRiskExtractorConfig-xxxxxx
displayName:
comment:
properties:
clientFingerprintingThreshold:
tagsWhenAboveOrEqualThreshold:
tagsWhenBelowThreshold:
Client ID Custom Claim
claimName
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.claims.CustomClientIdClaimConfig
id: CustomClientIdClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
Client ID From Subject Token (OAuth 2.0 Token Exchange)
Sets the claim value to that of the subject token's "client_id" data.
Only string values are considered. If the subject token's "client_id" data is a not a string value, the token exchange request will lead to an invalid request error.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtSubjectTokenClientIdClaimValueConfig
id: OAuth2TokenExchangeJwtSubjectTokenClientIdClaimValueConfig-xxxxxx
displayName:
comment:
properties:
Client ID Of Authenticated Client (OAuth 2.0 Token Exchange)
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtAuthenticatedClientIdStringClaimValueConfig
id: OAuth2TokenExchangeJwtAuthenticatedClientIdStringClaimValueConfig-xxxxxx
displayName:
comment:
properties:
Client IP SAML 2.0 Attribute
samlAttributeName
) nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.ClientIpAttributeConfig
id: ClientIpAttributeConfig-xxxxxx
displayName:
comment:
properties:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
samlAttributeName:
Client Name Processor
allowedValues
) mandatory
)
type: com.airlock.iam.techclientreg.application.configuration.registration.ClientNameProcessorConfig
id: ClientNameProcessorConfig-xxxxxx
displayName:
comment:
properties:
allowedValues: [a-zA-Z0-9 _.-]+
mandatory: false
Coloring Rule
regexpPatternString
) foregroundColor
) backgroundColor
) foregroundColorForMetaData
)
type: com.airlock.iam.admin.application.configuration.logviewer.ColoringRule
id: ColoringRule-xxxxxx
displayName:
comment:
properties:
backgroundColor: white
foregroundColor: black
foregroundColorForMetaData: black
regexpPatternString:
Combined Password Hash
PasswordHash
for hash generation and a list of PasswordHash
functions for checking / verification. Verification is passed, if one of the configured hashes can verify the password with its hash. hashForGeneration
) hashesForVerification
)
type: com.airlock.iam.core.misc.util.password.hash.CombinedPasswordHash
id: CombinedPasswordHash-xxxxxx
displayName:
comment:
properties:
hashForGeneration:
hashesForVerification:
Combining Context Extractor
contextExtractors
) fallbackContext
) Leave empty to implicitly use the default context. If this plugin is used within a "Combining Context Extractor", use "[DEFAULT]" to explicitly return the default context if necessary.
type: com.airlock.iam.core.misc.util.context.CombiningContextExtractor
id: CombiningContextExtractor-xxxxxx
displayName:
comment:
properties:
contextExtractors:
fallbackContext:
Combining Extended User Persister
userInsertionPersister
) persisters
) Allow Duplicates
. allowDuplicates
) Potentially the user may be found by an other persister. If this flag is set to false, always all inner persisters are asked, and if a userId is found by multiple inner persisters, a NotUniqueException is thrown.
Iterator methods are always called on all persisters, but if Allow Duplicates
is enabled, no exception is thrown in case of duplicates.
type: com.airlock.iam.core.misc.impl.persistency.CombiningExtendedUserPersister
id: CombiningExtendedUserPersister-xxxxxx
displayName:
comment:
properties:
allowDuplicates: false
persisters:
userInsertionPersister:
Combining Role Provider
roleProviders
)
type: com.airlock.iam.login.application.configuration.targetapp.CombiningRoleProviderConfig
id: CombiningRoleProviderConfig-xxxxxx
displayName:
comment:
properties:
roleProviders:
Combining User Persister
persisters
) Allow Duplicates
. allowDuplicates
) Potentially the user may be found by an other persister. If this flag is set to false, always all inner persisters are asked, and if a userId is found by multiple inner persisters, a NotUniqueException is thrown.
Iterator methods are always called on all persisters, but if Allow Duplicates
is enabled, no exception is thrown in case of duplicates.
type: com.airlock.iam.core.misc.impl.persistency.CombiningUserPersister
id: CombiningUserPersister-xxxxxx
displayName:
comment:
properties:
allowDuplicates: false
persisters:
Complete Migration Step
targetAuthMethod
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.migration.CompleteMigrationStepConfig
id: CompleteMigrationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
targetAuthMethod:
Composite Password Service
checkPasswordPasswordService
) changePasswordPasswordService
) resetPasswordPasswordService
)
type: com.airlock.iam.core.misc.impl.authen.CompositePasswordService
id: CompositePasswordService-xxxxxx
displayName:
comment:
properties:
changePasswordPasswordService:
checkPasswordPasswordService:
resetPasswordPasswordService:
Concatenating Context Extractor
contextExtractors
) fallbackContext
) Leave empty to implicitly use the default context. If this plugin is used within a "Combining Context Extractor", use "[DEFAULT]" to explicitly return the default context if necessary.
type: com.airlock.iam.core.misc.util.context.ConcatenatingContextExtractor
id: ConcatenatingContextExtractor-xxxxxx
displayName:
comment:
properties:
contextExtractors:
fallbackContext:
Condition-based Role Provider
condition
) roles
)
type: com.airlock.iam.login.application.configuration.targetapp.ConditionBasedRoleProviderConfig
id: ConditionBasedRoleProviderConfig-xxxxxx
displayName:
comment:
properties:
condition:
roles:
Conditional Identity Propagator
conditionsLogicMode
) - AND: All conditions must be true.
- OR: At least one condition must be true.
conditions
) identityPropagator
)
type: com.airlock.iam.core.misc.impl.sso.ConditionalIdentityPropagator
id: ConditionalIdentityPropagator-xxxxxx
displayName:
comment:
properties:
conditions:
conditionsLogicMode: AND
identityPropagator:
Conditional Risk-based Role Derivation
conditions
) targetRoles
)
type: com.airlock.iam.authentication.application.configuration.risk.accesspolicy.condition.ConditionalRiskBasedRoleDerivationConfig
id: ConditionalRiskBasedRoleDerivationConfig-xxxxxx
displayName:
comment:
properties:
conditions:
targetRoles:
Conditional Value Map Provider
condition
) valueMapProvider
)
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.ConditionalValueMapProviderConfig
id: ConditionalValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
condition:
valueMapProvider:
Configurable Error Mapper
authenticationFailures
) Maps authentication failure types to HTTP error responses.
The authentication failure types can be defined by the authenticator. Known types seen in one-shot flow:
- "user not found"
- "user required"
- "user name ambiguous"
- "user locked"
- "user temporarily locked"
- "user invalid"
- "user not permitted at this time"
- "user not permitted at this client"
- "device blocked"
- "device busy with another authentication request"
- "unspecified"
- "password required"
- "password wrong"
- "password change required"
- "token required"
- "token wrong"
- "next token required"
- "binding token required"
- "token expired"
- "certificate required"
- "certificate does not match user"
- "certificate not yet valid"
- "certificate expired"
- "certificate revoked"
- "certificate issuer not trusted"
defaultAuthenticationFailure
) userHasNoAccess
) credentialCannotBeExtracted
)
type: com.airlock.iam.login.app.misc.configuration.oneshot.ConfigurableErrorMapperFactory
id: ConfigurableErrorMapperFactory-xxxxxx
displayName:
comment:
properties:
authenticationFailures:
credentialCannotBeExtracted:
defaultAuthenticationFailure:
userHasNoAccess:
Configurable HTTP CRL Obtainer
cachePersister
) defaultObtainer
) overwritingObtainers
)
type: com.airlock.iam.core.misc.impl.cert.crl.MultiIssuerConfigurableHTTPCrlObtainer
id: MultiIssuerConfigurableHTTPCrlObtainer-xxxxxx
displayName:
comment:
properties:
cachePersister:
defaultObtainer:
overwritingObtainers:
Configuration-based Authenticator
users
)
type: com.airlock.iam.core.misc.impl.authen.ConfigurationBasedAuthenticator
id: ConfigurationBasedAuthenticator-xxxxxx
displayName:
comment:
properties:
users:
Configured User Data
username
) password
) roles
)
type: com.airlock.iam.core.misc.impl.authen.ConfiguredUserData
id: ConfiguredUserData-xxxxxx
displayName:
comment:
properties:
password:
roles:
username:
Contacts Processor
allowedContacts
) mandatory
)
type: com.airlock.iam.techclientreg.application.configuration.registration.ContactsProcessorConfig
id: ContactsProcessorConfig-xxxxxx
displayName:
comment:
properties:
allowedContacts: [a-zA-Z0-9 _.@-]+
mandatory: true
Context Data Access Rule
contextDataField
) roles
)
type: com.airlock.iam.admin.application.configuration.ContextDataAccessRule
id: ContextDataAccessRule-xxxxxx
displayName:
comment:
properties:
contextDataField:
roles:
Context Data Changed
fieldNamePattern
)
type: com.airlock.iam.common.application.configuration.event.ContextDataChangedSubscribedEventConfig
id: ContextDataChangedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
fieldNamePattern: .*
Context Data Condition
name
) pattern
)
type: com.airlock.iam.core.misc.impl.sso.ContextDataCondition
id: ContextDataCondition-xxxxxx
displayName:
comment:
properties:
name:
pattern:
Context Data Item
contextDataItemName
) To be able obtain the context data value, it is required to add an 'OAuth 2.0 Remote Context Data Resource' with a 'Local Context Data Key' equal to this value to the resource mappings.
optional
)
type: com.airlock.iam.oauth2.application.configuration.accountregistration.ContextDataItemConfig
id: ContextDataItemConfig-xxxxxx
displayName:
comment:
properties:
contextDataItemName:
optional: false
Context Data Item (Airlock 2FA Account Display Name)
contextDataName
) mandatory
)
type: com.airlock.iam.airlock2fa.application.configuration.enrollment.Airlock2FAContextDataDisplayNameProviderConfig
id: Airlock2FAContextDataDisplayNameProviderConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
mandatory: false
Context Data Map
Provides all context data of the current user. The keys of the context data items are provided as defined in the Loginapp's user store.
The "username" is always part of the map, even if it is not explicitly part of the context data.
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.ContextDataValueMapProviderConfig
id: ContextDataValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
Context Data Regex Condition
contextDataKey
) The context data field for which the value is matched against the configured pattern.
For newly created users (before/after insert user events), some context data fields (e.g. the username field or "additional context data") are not available.
pattern
) isFulfilledIfValueIsNull
)
type: com.airlock.iam.core.misc.persistency.usereventbus.conditions.ContextDataEventCondition
id: ContextDataEventCondition-xxxxxx
displayName:
comment:
properties:
contextDataKey:
isFulfilledIfValueIsNull: false
pattern:
Context Data SAML 2.0 Attribute
samlAttributeName
) contextDataName
) nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.ContextDataAttributeConfig
id: ContextDataAttributeConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
samlAttributeName:
Context Data String Custom Claim
contextDataName
) claimName
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.claims.CustomContextDataStringClaimConfig
id: CustomContextDataStringClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
contextDataName:
Context Data Uniqueness Check
contextDataKey
) behaviour
) - IGNORE_ATTRIBUTE: The violating context field is ignored, and the import proceeds with the next context fields of the user. Note: If the field is also required through "Required User Info Attributes" the current user is ignored instead.
- IGNORE_USER: The current user is ignored, and the import proceeds with data for the next user.
- ABORT: The current user is ignored and the import is aborted. The changes of previous import commands are not rolled back.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.xmlimporter.ContextDataUniquenessCheck
id: ContextDataUniquenessCheck-xxxxxx
displayName:
comment:
properties:
behaviour:
contextDataKey:
Context Data User Group Condition
groupName
) contextPropertyName
) pattern
)
type: com.airlock.iam.core.misc.impl.persistency.ContextDataUserGroupCondition
id: ContextDataUserGroupCondition-xxxxxx
displayName:
comment:
properties:
contextPropertyName:
groupName:
pattern:
Context Data User Validator
contextField
) allowedValues
)
type: com.airlock.iam.core.misc.impl.authen.ContextDataUserValidator
id: ContextDataUserValidator-xxxxxx
displayName:
comment:
properties:
allowedValues:
contextField:
Context Data Username
contextData
) To be able obtain the context data value, it is required to add an 'OAuth 2.0 Remote Context Data Resource' with a 'Local Context Data Key' equal to this value to the resource mappings.
type: com.airlock.iam.oauth2.application.configuration.accountregistration.ContextDataUsernameConfig
id: ContextDataUsernameConfig-xxxxxx
displayName:
comment:
properties:
contextData:
Context Data Username Provider
propertyName
) mandatory
)
type: com.airlock.iam.login.application.configuration.targetapp.ContextDataUsernameProviderConfig
id: ContextDataUsernameProviderConfig-xxxxxx
displayName:
comment:
properties:
mandatory: false
propertyName:
Context Data Username Transformer
userStore
) contextDataColumns
) Note that at least one context data column must be stated for the transformation to be successful.
checkUserStoreFirst
) Usually, setting this property to false is not recommended, as it is often the best strategy to first match for the user ID.
Disabling this check makes sense in a chain of UsernameTransformers where it is known that the current input name cannot be a user ID, e.g. directly after a Primary Key Lookup.
mandatoryTransformation
) This transformer serves two main purposes: It can allow login using an 'alias' in addition to the user ID (in this case, set this property to false because this transformer may or may not be given the alias) or it can transform the entered user name on the fly to an 'internal identifier' used for further processing (in this case, set this property to true). In the latter case, this 'internal identifier' cannot be used directly as a login name, thus the transformation must succeed in order to obtain a valid userid for further processing.
Note that a transformation is considered successful if the user name could be resolved, no matter whether or not the user name was actually changed (e.g. the transformation is also successful if the 'Check User Persister First' flag is true and the user name was found using that persister directly).
stopAfterSuccessfulTransformation
)
type: com.airlock.iam.core.misc.impl.authen.ContextDataUsernameTransformer
id: ContextDataUsernameTransformer-xxxxxx
displayName:
comment:
properties:
checkUserStoreFirst: true
contextDataColumns:
mandatoryTransformation: false
stopAfterSuccessfulTransformation: false
userStore:
Context Pattern
pattern
) The matching is done against the part of the request URI after the protocol or after the host (depending on the configuration of the context extractor).
Example: If the request URL is "https://host/blah/blue", the considered path is either "host/blah/blue" (if virtualhost is included) or "/blah/blue" otherwise.
The request path is then matched against the regular expression which must match the entire path, not just a substring.
Important: For SPA URLs under /ui/app/*
, only top-level navigation (for example when navigating from an external site using a link or http redirect) can be used for context extraction. Most navigations/clicks within the SPA do not lead to an explicit request to the URL seen in the URL bar.
configurationContext
) Use "[DEFAULT]" to explicitly return the default context.
type: com.airlock.iam.core.misc.util.context.ContextPattern
id: ContextPattern-xxxxxx
displayName:
comment:
properties:
configurationContext:
pattern:
Cookie Mapping
sourceAccessCookieName
) targetAccessCookieName
) targetAccessCookiePath
) If the same access cookie is used for all applications, the value "/" can be used. If different tickets are used for different applications, the applications path should be used.
Note that only one access cookie per cookie path and name can exist. Make sure that this cookie name does not clash with other cookie's names. For example, do not use session cookie names such as "JSESSIONID".
Make sure the configuration flag Interpret Cookie Domains is set in the Airlock Gateway (WAF) configuration. If not the cookie path is ignored and cookies in the cookie store are sent to any backend HTTP request of the same session. This also means that there may be only one cookie per cookie name!
It is best to consult the corresponding documentation of the web entry server or reverse proxy to get more accurate information on cookie handling.
targetAccessCookieDomain
) Because of security restrictions in browsers (same origin policy) it is usually not possible to set a cookie for a different domain unless the right-most two domain parts (e.g. "ergon.ch") are equal to that of the application setting the cookie.
It is possible that there are further restrictions regarding this in browsers.
If you are using a HTTP reverse proxy that stores the cookie in its session store (and does not send it to the client), make sure to understand the proxies interpretation of the cookie domain and cookie path.
Make sure the configuration flag Interpret Cookie Domains is set in the Airlock Gateway (WAF) configuration. If not the cookie domain is ignored and cookies in the cookie store are sent to any backend HTTP request of the same session. The cookie path is also ignored meaning that there may be only one cookie per cookie name!
The Airlock Gateway also supports the following cookie domain values (if the flag Interpret Cookie Domains is set):
- The value
.*
results in cookies being sent to all backend servers. This is especially useful if one authentication ticket is used for multiple backends. - The value
@<fully-qualified-host>
results in the cookie being treated as if it were set by the host specified by "<fully-qualified-host>". If using this value, make sure the corresponding mapping also uses the fully qualified hostname.
Note that only one cookie per cookie path and name can exist. Make sure that this cookie name does not clash with other cookie's names. For example, do not use session cookie names such as "JSESSIONID".
setSecureFlagTargetAccessCookie
) If the cookie is marked as secure, the browser (and any HTTP proxy behaving like a browser) should send the cookie only over secure connections.
Caution: If you think that setting this flag makes your application more secure, it is in most cases way better to adequately secure the access cookie by encrypting it appropriately. Remember that this flag just "asks" the browser to not transmit the cookie over unencrypted connections.
urlEncodeTargetCookieValue
) mandatory
)
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.CookieMapping
id: CookieMapping-xxxxxx
displayName:
comment:
properties:
mandatory: true
setSecureFlagTargetAccessCookie: false
sourceAccessCookieName:
targetAccessCookieDomain:
targetAccessCookieName:
targetAccessCookiePath: /
urlEncodeTargetCookieValue: false
Cookie Ticket Adder Config
cookieName
) The name of the cookie used to transport the ticket.
Only one cookie per cookie path and name can exist, therefore the name of this cookie must be distinct from all other cookie names used by this applications (such as "JSESSIONID").
cookiePath
) The path for which the cookie is set. This determines with which future requests the cookie will be sent to the server.
To add the cookie to all requests to a given domain, the value "/" can be used. If the cookie should be limited to a certain backend, the corresponding context path should be used.
Only one cookie per cookie path and name can exist, therefore the name of this cookie must be distinct from all other cookie for the same path (such as "JSESSIONID").
When using an Airlock Gateway (WAF), the Gateway configuration flag Interpret Cookie Domains must be set. Otherwise the cookie path is ignored and cookies in the cookie store are sent with back-end HTTP requests of the same session.
cookieDomain
) Because of security restrictions in browsers (same origin policy) it is usually not possible to set a cookie for a different domain (except subdomains).
Airlock Gateway (WAF) handle cookies differently and allow setting cookies for other domains within the protected infrastructure while not exposing them to the internet. The Gateway configuration flag Interpret Cookie Domains needs to be enabled for this feature. If this flag is enabled, also the following special domain names are supported:
- An empty value results in the cookie only being sent to the origin server that set the cookie.
- The value
.*
results in cookies being sent to all back-end servers. - Setting a different hostname results in the cookie being sent to the back-end host with that hostname.
secureFlag
) If the cookie is marked as secure, the browser (and any HTTP proxy behaving like a browser) should send the cookie only over secure connections.
type: com.airlock.iam.login.application.configuration.idpropagation.CookieTicketAdderConfig
id: CookieTicketAdderConfig-xxxxxx
displayName:
comment:
properties:
cookieDomain:
cookieName:
cookiePath: /
secureFlag: true
Cookie Ticket Identity Propagator
This plugin is usually used together with an entry component that keeps the authentication ticket cookie from being sent to the client and therefore from being exposed to external attacks.
If you intend to send the cookie to the client, it must be protected accordingly by choosing an appropriate ticket encoder.
cookieName
) Note that only one cookie per cookie path and name can exist. Make sure that this cookie name does not clash with other cookie's names. For example, do not use session cookie names such as "JSESSIONID".
cookiePath
) If one single authentication ticket is used for all applications, the value "/" can be used. If different tickets are used for different applications, the applications path should be used.
Note that only one cookie per cookie path and name can exist. Make sure that this cookie name does not clash with other cookie's names. For example, do not use session cookie names such as "JSESSIONID".
Make sure the configuration flag Interpret Cookie Domains is set in the Airlock Gateway (WAF) configuration. If not, the cookie path is ignored and cookies in the cookie store are sent to any back-end HTTP request of the same session. This also means that there may be only one cookie per cookie name!
It is best to consult the corresponding documentation of the web entry server or reverse proxy to get more accurate information on cookie handling.
cookieDomain
) Because of security restrictions in browsers (same origin policy) it is usually not possible to set a cookie for a different domain unless the right-most two domain parts (e.g. "ergon.ch") are equal to that of the application setting the cookie.
It is possible that there are further restrictions regarding this in browsers.
If you are using a HTTP reverse proxy that stores the cookie in its session store (and does not send it to the client), make sure to understand the proxies interpretation of the cookie domain and cookie path.
Make sure the configuration flag Interpret Cookie Domains is set in the Airlock Gateway (WAF) configuration. If not, the cookie domain is ignored and cookies in the cookie store are sent to any back-end HTTP request of the same session. The cookie path is also ignored, meaning that there may be only one cookie per cookie name!
Airlock also supports the following cookie domain values (if the flag Interpret Cookie Domains is set):
- An empty value results in the cookie only being sent to the origin server that set the cookie.
- The value
.*
results in cookies being sent to all back-end servers. This is especially useful if one authentication ticket is used for multiple back-ends. - The value
@<fully-qualified-host>
results in the cookie being treated as if it were set by the host specified by "<fully-qualified-host>". If using this value, make sure the corresponding mapping also uses the fully qualified hostname.
If one single authentication ticket is used for all applications, the value ".*" can be used. If different tickets are used for different applications, the applications path should be used.
ticketService
) ticketEncoder
) Caution:This plugin is usually used together with an entry component that keeps the authentication ticket cookie from being sent to the client and therefore from being exposed to external attacks.
If you intend to send the cookie to the client, it must be protected accordingly by choosing an appropriate ticket encoder.
Note that some ticket encoders do not support ticket expiry, i.e. they do not encode the ticket validity into the ticket.
keyValuePairs
) If supported by the ticket service plugin, this is a way to add such an extra key-value-pair to a ticket.
The key-value-pairs are added to the key-value-pairs passed to this plugin by the calling application. It overwrites existing values with the same key.
urlEncodingScheme
) Make sure that the component receiving the ticket uses the same URL encoding scheme.
disableUrlEncoding
) true
, the cookie's final value is not URL-encoded, though the key/values will always be.Notice that this may result in V1 cookies because the value will most probably contain the '=' character which is not allowed in V0 cookies. Make sure your application supports V1 cookies when disabling this property.
setSecureFlagInCookie
) If the cookie is marked as secure, the browser (and any HTTP proxy behaving like a browser) should send the cookie only over secure connections.
Caution: If you think that setting this flag makes your application more secure, it is in most cases way better to adequately secure the authentication ticket by choosing a secure ticket encoder plugin. Remember that this flag just "asks" the browser to not transmit the cookie over unencrypted connections.
type: com.airlock.iam.core.misc.impl.sso.CookieTicketIdentityPropagator
id: CookieTicketIdentityPropagator-xxxxxx
displayName:
comment:
properties:
cookieDomain:
cookieName:
cookiePath: /
disableUrlEncoding: false
keyValuePairs:
setSecureFlagInCookie: false
ticketEncoder:
ticketService:
urlEncodingScheme: UTF-8
Correlation ID Settings
headerName
) validationPattern
) The correlation ID that is extracted from the request header will be matched against this regular expression.
If it matches, then it will be logged for the scope of the current HTTP request. Otherwise, the value is rejected, and no correlation ID will be logged.
This can be configured to prevent unexpected values from being written to the log files.
type: com.airlock.iam.common.application.configuration.logging.CorrelationIdSettingsConfig
id: CorrelationIdSettingsConfig-xxxxxx
displayName:
comment:
properties:
headerName: X-Correlation-ID
validationPattern: [\x21-\x7E]{2,256}
CORS Settings
allowedOrigins
) A list of regular expressions for the origins allowed to execute cross domain requests ('preflight checks') to the REST API. If no origins are configured, the server will deny any CORS requests.
Note that if a TLS tunnel is terminated by a load balancer which connects to IAM via http, IAM will consider most requests as CORS requests unless 'Strict CORS Validation' is deactivated.
strictCorsValidation
) Match the 'Origin' header of the browser exactly.
Disabling this flag allows Airlock IAM to be connected to e.g. a load-balancer without TLS (load-balancer terminates TLS):
- 'https://yourhost.com:443' is then considered a match compared to 'http://yourhost.com:80', and treated as same-origin
Note that this setting does not influence the 'Allowed Origins'.
type: com.airlock.iam.common.application.configuration.CorsSettings
id: CorsSettings-xxxxxx
displayName:
comment:
properties:
allowedOrigins:
strictCorsValidation: true
Create Airlock 2FA Device Activation Letters
Settings for user's device activation letters. Such a letter contains a QR code to be scanned and is typically necessary for the registration of the first Airlock 2FA device.
Note that once the letter is generated, Airlock IAM is no longer involved in the activation of a user's device. This implies in particular, that a user who has been locked out after the generation of an activation letter could still use it to successfully register an Airlock 2FA device. Login will of course remain impossible as long the user is locked out.
Compared to "Order Airlock 2FA Device Activation Letters", no order will be created since activation letters will be directly generated by this plugin. The "Airlock 2FA Activation Letter Order Task" is therefore not necessary in this case.
letterPrintingOptions
) enrollmentValidityInSeconds
) Note: This value is only used for the validity of the QR code in the enrollment letter and does not affect enrollment self-services.
type: com.airlock.iam.admin.application.configuration.airlock2fa.Airlock2FACreateActivationLettersConfig
id: Airlock2FACreateActivationLettersConfig-xxxxxx
displayName:
comment:
properties:
enrollmentValidityInSeconds: 604800
letterPrintingOptions:
Create Airlock 2FA Hardware Token Shipment Letters
renderer
) The following placeholders can be used in the templates
${User Context Data Name}
- context data of the user.${deviceManufacturer}
- manufacturer of device.${deviceModel}
- model of device.${deviceSerialNumber}
- serial number of device.${deviceActivationCode}
- activation code of device, if any.
workingDirectory
) If this property is defined, shipment letters are not directly generated into the output directory (see other property) but they are generated into this working directory and are then moved into the output directory once they are done.
This helps to solve problems with processes that automatically read the rendered letters and therefore might not see the fully rendered result. Make sure that the working directory and the output directory reside in the same file system (otherwise the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
outputDirectory
) languageContextDataName
)
type: com.airlock.iam.admin.application.configuration.airlock2fa.Airlock2FAShipmentLettersConfig
id: Airlock2FAShipmentLettersConfig-xxxxxx
displayName:
comment:
properties:
languageContextDataName:
outputDirectory:
renderer:
workingDirectory:
Credential Data Certificate Matcher
In a first step, a user identifier is extracted from the certificate data (e.g. from the subject DN). The result can either be used directly as username, or additionally, a User Iterator is configured to match the extracted identifier against some user attribute. If a matching user is found, its username is returned.
Example:A certificate contains the following DN:
cn=test,ou=local,o=company,c=ch
.The matcher can be configured (without User Iterator) to match the CN as user attribute, therefore, the extracted username is "test".
userAttribute
) The following value is treated specially:
- "altSubjectName": Use the certificate's alternative subject name as username.
usernameTransformer
) userIterator
) contextDataColumns
)
type: com.airlock.iam.core.misc.impl.authen.certificate.CredentialDataCertificateMatcher
id: CredentialDataCertificateMatcher-xxxxxx
displayName:
comment:
properties:
contextDataColumns:
userAttribute:
userIterator:
usernameTransformer:
Credential Data mTAN Handler
credentialPersister
) perUserFlashContextField
) If a context data field is configured, sending of flash messages is decided per user, based on the value in this field. If this field is empty, the default flash setting is used.
Important: The referenced context data field must be of type String
and accepts only one of the following values:
true
- send flash SMSfalse
- send normal SMS<empty/null>
- use the default flash settings
Note: The same configuration value must also be added to the credential persister's context data fields.
iakVerifier
) The IAK verifier is used to check initial activation keys. It is only used during credential self-registration and not during credential self-migration.
CAUTION: Not specifying an IAK verifier plugin means that no IAK is checked during the self-registration process. Be careful to not create unsafe processes! Usually, self-registration is unsafe without IAK verification.
iakGenerator
) iakHashFunction
) NOTE: Some password hashes, such as SHA 256 Password Hash or Scrypt Password Hash, produce binary output. If one of these is used, make sure the persistence layer supports binary data in the hash field and the corresponding persistence plugins (e.g. Database User Store or Ldap Connector) are configured to treat hash values as binary values.
In case the persistence layer expects a string, encode the password hash by wrapping it with an encoder. To achieve this, use the Password Hash Configuration plugin and specify the hash function (such as Scrypt Password Hash) together with the desired encoder. We recommend using the Base64 Password Hash Encoder.
hashValueIsBinary
) iakCredentialPersister
)
type: com.airlock.iam.core.misc.impl.authen.mtan.CredentialDataMtanHandler
id: CredentialDataMtanHandler-xxxxxx
displayName:
comment:
properties:
credentialPersister:
hashValueIsBinary: false
iakCredentialPersister:
iakGenerator:
iakHashFunction:
iakVerifier:
perUserFlashContextField:
Credential Report Task
The task uses a user iterator plug-in to go through the set of users or credential records and looks at a specific flag telling this plug-in that a report should be rendered for the user (or credential). If the flag is set, the "delivery security gap" is checked: This is the minimum amount of time there must be between two reports being generated for one and the same user. If this check is ok, the configured report renderer is called and the flag reset.
Note:: There are special tasks for generating password letters (reportTypeShortDesc
) The text is used in the user trail log written when a report is rendered. Please specify a text like in the examples below, so it suits the structure of the log statement it is used in.
If this property is not specified, a general statement will be logged.
credentialPersister
) credentialIterator
) reportRenderer
) deliverySecurityGap
) This feature only works correct, if the underlying credential persister knows about the other credentials delivery timestamps. Make sure these are properly configured for the credential persister.
Not setting this property turns this feature off.
languageAttributeName
) workingDirectory
) If this property is defined, the credential reports are not directly generated into the output directory (see other property) but they are generated into this working directory and are moved to the output directory once they are done.
This helps to solve problems with processes automatically reading the rendered reports and reading partial reports during the generation process. Make sure that the working directory and the output directory reside in the same file system (if not the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
outputDirectory
) This property is not required if the renderer plugin (see separate property) does not write on the outputstream (e.g. sends it somewhere else). It is required otherwise.
Note: If this property is not defined and the used renderer plugin writes on the output stream, then the result (e.g. a PDF file) is lost.
fileNamePrefix
) Do not use the prefix "pwd-" or the empty prefix if password- or tokenlist reports are stored in the same directory. The latter is used as default for token lists (matrix card) and the former for password letters.
fileNameSuffix
) deleteOldReports
) Caution: This feature will delete all reports starting with the prefix configured by property "file-name-prefix" and the user's name. Thus you must make sure, that different report types use different filename prefixes.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.CredentialReportTask
id: CredentialReportTask-xxxxxx
displayName:
comment:
properties:
credentialIterator:
credentialPersister:
deleteOldReports: false
deliverySecurityGap: 0
fileNamePrefix:
fileNameSuffix:
languageAttributeName:
outputDirectory:
reportRenderer:
reportTypeShortDesc:
workingDirectory:
Credential Secret Batch Task
Unlike the "Password Batch Task" this plugin uses a credential persister / iterator.
Generated secrets are rendered (e.g. made a pdf or printed) using a
credentialIterator
) credentialPersister
) deliverySecurityGapDays
) Setting this property to zero (0) disables this feature.
aggregateReport
) credentialSecretGenerator
) tokenCleanupConfigs
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.CredentialSecretBatchTask
id: CredentialSecretBatchTask-xxxxxx
displayName:
comment:
properties:
aggregateReport:
credentialIterator:
credentialPersister:
credentialSecretGenerator:
deliverySecurityGapDays: 0
tokenCleanupConfigs:
Credential Secret Generator
hashValueIsBinary
) passwordGenerator
) hashFunctionPlugin
) NOTE: Some password hashes, such as SHA 256 Password Hash or Scrypt Password Hash, produce binary output. If one of these is used, make sure the persistence layer supports binary data in the hash field and the corresponding persistence plugins (e.g. Database User Store or Ldap Connector) are configured to treat hash values as binary values.
In case the persistence layer expects a string, encode the password hash by wrapping it with an encoder. To achieve this, use the Password Hash Configuration plugin and specify the hash function (such as Scrypt Password Hash) together with the desired encoder. We recommend using the Base64 Password Hash Encoder.
outputDirectoryPath
) This property is not required if the renderer plugin (see separate property) does not write on the outputstream (e.g. sends it somewhere else). It is required otherwise.
Note: If this property is not defined and the used renderer plugin writes on the output stream, then the result (e.g. a PDF file) is lost.
workingDirectoryPath
) If this property is defined, the passwords are not directly generated into the output directory (see other property) but they are generated into this working directory and are moved to the output directory once they are done.
This helps to solve problems with processes automatically reading the rendered passwords and reading partial reports during the generation process. Make sure that the working directory and the output directory reside in the same file system (if not the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
fileNamePrefix
) Do not use the empty prefixes if token-list reports are stored in the same directory. The empty prefix is the default for token list letters (and not configurable in older plugin versions).
This property is optional to be backwards compatible. The prefix "pwd-" is used if none is defined.
configuredFileNameSuffix
) reportTypeShortDesc
) The text is used in the user trail log written when a report is rendered. Please specify a text like in the examples below, so it suits the structure of the log statement it is used in.
If this property is not specified, a general statement will be logged.
passwordRenderer
) languageAttributeName
) deleteOldPasswords
) barcodeGenerator
) - BarcodeImage: placeholder for the barcode image.
- BarcodeContent: placeholder for the barcode content.
- BarcodeContentDisplay: placeholder for the barcode content in a human-readable format.
type: com.airlock.iam.core.misc.renderer.CredentialSecretGenerator
id: CredentialSecretGenerator-xxxxxx
displayName:
comment:
properties:
barcodeGenerator:
configuredFileNameSuffix:
deleteOldPasswords: false
fileNamePrefix: pwd-
hashFunctionPlugin:
hashValueIsBinary: false
languageAttributeName:
outputDirectoryPath:
passwordGenerator:
passwordRenderer:
reportTypeShortDesc:
workingDirectoryPath:
Credential to Authenticator Mapping
pattern
) Defines a regular expression pattern matched against the credential (token or response to a challenge or password) provided during authentication.
caseSensitive
) false
, the case of characters is ignored when matching the pattern against the credential data. authenticator
)
type: com.airlock.iam.core.misc.impl.authen.CredentialBasedAuthenticatorSelectorMapping
id: CredentialBasedAuthenticatorSelectorMapping-xxxxxx
displayName:
comment:
properties:
authenticator:
caseSensitive: true
pattern:
Credential-based Attribute Mapping
This plugin is designed to work only with the credential-based repository that is shipped with IAM. For custom repository implementations, custom attribute mappings are needed.
serialNumber
) enabled
) validFrom
) validTo
) generationDate
) data
) encoding
) deliveryDate
) contextDataFields
) Mapped context data fields are elements of a nested map with the name 'contextData'. For example an entry with external name 'myField' will be mapped to an external interface as data.attributes.contextData.myField
.
type: com.airlock.iam.admin.application.configuration.generic.CredentialBasedAttributeMapping
id: CredentialBasedAttributeMapping-xxxxxx
displayName:
comment:
properties:
contextDataFields:
data:
deliveryDate:
enabled:
encoding:
generationDate:
serialNumber:
validFrom:
validTo:
Credential-based Authenticator Selector
An authenticator plugin that selects one of several authenticators (and/or contexts) depending on the credential provided in the first or any preceding authentication steps: The credential, i.e. the token or response to a challenge or the password, is compared against a list of regular expressions. The first matching expression defines the authenticator plugin (and/or context) to use for the rest of the authentication process. If none matches, a default authenticator is used.
This plugin does not add or change data added to the authentication result but just passes on the results of the wrapped authenticator(s).
Example usage:
- Use the plugin as second authenticator after username and password have been provided.
- Configure it with an SmsAuthenticator as default authenticator and an EmailOtpAuthenticator used if the token matches "email"
- The user is then asked for an SMS code after successful password verification. If the user enters "email" as SMS code, an email is sent and the user is asked for the OTP in the email.
mappings
) defaultAuthenticator
)
type: com.airlock.iam.core.misc.impl.authen.CredentialBasedAuthenticatorSelector
id: CredentialBasedAuthenticatorSelector-xxxxxx
displayName:
comment:
properties:
defaultAuthenticator:
mappings:
Credential-based Generic Token Repository
Repository that loads credentials as tokens from persistence.
If configured, the credential model supports a 'current' and 'next' credential. The db columns can be specified in the configured 'Credential Persister'.credentialPersister
) supportCurrentAndNextCredential
) useNextAsCurrentOnDeletion
) attributeMapping
)
type: com.airlock.iam.admin.application.configuration.generic.CredentialBasedGenericTokenRepositoryConfig
id: CredentialBasedGenericTokenRepositoryConfig-xxxxxx
displayName:
comment:
properties:
attributeMapping:
credentialPersister:
supportCurrentAndNextCredential: false
useNextAsCurrentOnDeletion: true
CRL Certificate Status Checker
Periodically updates the CRL using the configured "CRL Fetcher". The latest fetched CRL is cached in memory and if configured, persisted into a file cache.
The CRL Distribution Point Extension of the certificate is not taken into account. Use plugin "CRL Distribution Point Extension CRL Checker" to consider the CRL Distribution Point Extension of the certificate being checked.
crlFetcher
) fetchIntervalSeconds
) If the CRL cannot be fetched, a warning is logged and the plug-in tries again after the waiting some time specified by property
retry-interval-seconds
. retryIntervalSeconds
) retryCount
) retry-interval-seconds
. This property specifies the maximum number of retries before the plug-in gives up. After giving up, the plug-in will try again after the normal fetch interval (specified by property fetch-interval-seconds
has been passed.The number of retries times the amount of time to wait between retries must not be greater than the fetch interval.
crlValiditySeconds
) Make sure that the validity period is considerably larger than the fetch interval.
The minimum value is one minute (60).
failSilentlyIfCrlExpired
) If set to
TRUE
, calling method isRevoked(X509Certificate)
always returns true
and a warning is logged.If set to
FALSE
(the default), calling method isRevoked(X509Certificate)
will result in a CertificateStatusCheckerException. cacheFile
) This property is optional. If not defined, no local file cache will be used.
Caution:Make sure the file is readable and writable. Be careful with relative paths and permissions.
includedIssuer
) keystoreConfig
)
type: com.airlock.iam.core.misc.impl.cert.crl.CrlCertificateStatusChecker
id: CrlCertificateStatusChecker-xxxxxx
displayName:
comment:
properties:
cacheFile:
crlFetcher:
crlValiditySeconds:
failSilentlyIfCrlExpired: false
fetchIntervalSeconds:
includedIssuer:
keystoreConfig:
retryCount:
retryIntervalSeconds:
CRL Distribution Point Extension CRL Checker
crlObtainer
) fallbackChecker
) eagerlyLoadedURLs
) keystoreConfig
) factory
) cacheRefreshInterval
)
type: com.airlock.iam.core.misc.impl.cert.crl.MultiIssuerCRLChecker
id: MultiIssuerCRLChecker-xxxxxx
displayName:
comment:
properties:
cacheRefreshInterval: 1
crlObtainer:
eagerlyLoadedURLs:
factory:
fallbackChecker:
keystoreConfig:
CRL HTTP Obtainer
overwriteURL
) factory
) basicAuthUsername
) basic-auth-password
. basicAuthPassword
) basic-auth-username
. proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
connectTimeout
) correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
type: com.airlock.iam.core.misc.impl.cert.crl.CrlHTTPObtainer
id: CrlHTTPObtainer-xxxxxx
displayName:
comment:
properties:
allowOnlyTrustedCerts: true
basicAuthPassword:
basicAuthUsername:
connectTimeout: 5
correlationIdHeaderName:
factory:
overwriteURL:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
verifyServerHostname: true
Cronto Activation Possible
crontoHandler
) strongAuthenticationTag
)
type: com.airlock.iam.flow.shared.application.configuration.cronto.CrontoActivationPossibleConditionConfig
id: CrontoActivationPossibleConditionConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
strongAuthenticationTag:
Cronto Activation Required
crontoHandler
) includeInactiveDevices
) strongAuthenticationTag
)
type: com.airlock.iam.authentication.application.configuration.selection.condition.CrontoActivationRequiredConditionConfig
id: CrontoActivationRequiredConditionConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
includeInactiveDevices: false
strongAuthenticationTag:
Cronto Activation Step
crontoHandler
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
strongAuthenticationTag
) If configured, this tag indicates strong authentication (typically two factors) and thus enables Cronto on-screen activation. The configured tag has to be obtained by an authentication step. In addition, the property "Enable On-Screen Activation" on the Cronto Handler must be enabled and all described conditions of the property must be fulfilled. This feature is typically used for migration use cases.
For security reasons, it is important to configure a strong authentication tag.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.cronto.CrontoActivationStepConfig
id: CrontoActivationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: CRONTO
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
strongAuthenticationTag:
tagsOnSuccess:
Cronto Approval Stealth Step
Cronto approval stealth step for public self-service flows.
This step displays a random dummy Cronto cryptogram and classifies any response OTP as wrong. Thus, it can never be successfully completed. It is intended to be used to avoid information leaking about users. Externally it behaves like the real Cronto approval step for public self-service flows.
This step is needed if the Cronto approval is used instead of a user verification step. Because the real Cronto approval step cannot be used for nonexistent or otherwise invalid users, a selection must be configured, using the "Public Self-Service Allowed Condition" to ensure that only users that are allowed to do public self-services enter the real Cronto step, while the other users end up in the stealth step.
Note that push and online validation have to be disabled in the real Cronto step, otherwise information would be leaked because it could behave differently for existing users (e.g. show push device selection). The configured authentication method ID must be the same as that of the real Cronto step. Also make sure the configured Flow Processors and Flow Restrictions in the public self-service flow allow nonexistent users and do not provide user feedback.
crontoHandler
) Handles all Cronto-specific actions.
When the Cronto app communicates directly to IAM (for online validation and push notification management) these requests are on a separate session and must therefore be handled by a separate, global Cronto Handler defined in "Cronto App Communication" in Loginapp.
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
maxResponseRetries
) The number of times the user may enter a wrong response before the flow is aborted (and the challenge is deleted). If set to 0, only 1 attempt is possible for each challenge.
The purpose of this settings is usability. The failed attempts counter is always increased upon receiving a wrong OTP and the user is locked when the global failed attempts limit is exceeded.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.CrontoPublicSelfServiceApprovalStealthStepConfig
id: CrontoPublicSelfServiceApprovalStealthStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: CRONTO
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
maxResponseRetries: 3
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Cronto Authentication Step
authenticatePushDevicesOnly
) If this flag is set and there is no push-enabled device for the user, authentication is not possible.
This feature may be used for mobile application logins, where showing a cryptogram on the same device is not appropriate.
pushSelectionForSingleDevice
) showLoginIdOnPush
) If this flag is set a random ID is generated and shown to the user during push login.
The ID is shown on the Cronto device with the push message and on the login page, allowing the user to correlate a push message with a login session.
messageProvider
) crontoHandler
) Handles all Cronto-specific actions.
When the Cronto app communicates directly to IAM (for online validation and push notification management) these requests are on a separate session and must therefore be handled by a separate, global Cronto Handler defined in "Cronto App Communication" in Loginapp.
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
maxResponseRetries
) The number of times the user may enter a wrong response before the flow is aborted (and the challenge is deleted). If set to 0, only 1 attempt is possible for each challenge.
The purpose of this settings is usability. The failed attempts counter is always increased upon receiving a wrong OTP and the user is locked when the global failed attempts limit is exceeded.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.cronto.CrontoAuthStepConfig
id: CrontoAuthStepConfig-xxxxxx
displayName:
comment:
properties:
authenticatePushDevicesOnly: false
authenticationMethodId: CRONTO
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
maxResponseRetries: 3
messageProvider:
onFailureGotos:
preCondition:
pushSelectionForSingleDevice: false
requiresActivation: false
showLoginIdOnPush: false
skipCondition:
stepId:
tagsOnSuccess:
Cronto Challenge Token Cleanup Strategy
tokenDataProvider
) secondsToKeepChallengeToken
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.token.CrontoChallengeTokenCleanUpStrategyConfig
id: CrontoChallengeTokenCleanUpStrategyConfig-xxxxxx
displayName:
comment:
properties:
secondsToKeepChallengeToken: 300
tokenDataProvider:
Cronto Device Activated
type: com.airlock.iam.login.application.configuration.event.CrontoDeviceActivatedSubscribedEventConfig
id: CrontoDeviceActivatedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Cronto Device Deleted
type: com.airlock.iam.common.application.configuration.event.CrontoDeviceDeletedSubscribedEventConfig
id: CrontoDeviceDeletedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Cronto Device List
crontoHandler
) accessCondition
) Precondition that must be fulfilled for a user to access the Cronto device list.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.token.CrontoDeviceListSelfServiceRestConfig
id: CrontoDeviceListSelfServiceRestConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
crontoHandler:
Cronto Device Management UI
Depending on the configuration, the user interface allows an authenticated user:
- to activate a new Cronto device.
- to order a new Cronto device activation letter.
- to delete a Cronto device.
- to rename a Cronto device.
- to enable a Cronto device.
- to disable a Cronto device.
- to enable push for a Cronto device.
- to disable push for a Cronto device.
The Cronto device management interface is accessible at /<loginapp-uri>/ui/app/protected/tokens/cronto/devices after user authentication.
flowToActivateDevice
) flowToOrderActivationLetter
) flowToDeleteDevice
) flowToRenameDevice
) flowToEnableDevice
) flowToDisableDevice
) flowToEnablePush
) flowToDisablePush
) pageExitTarget
) If configured, an additional button is displayed on the Cronto device management to exit the page. On click, this button redirects the user to the configured target.
To redirect to a target application, redirect to the corresponding "Authentication Flow". If the flow can be skipped due to the obtained tags, the user is directly forwarded to the target application.
type: com.airlock.iam.selfservice.application.configuration.ui.tokens.CrontoDeviceManagementUiConfig
id: CrontoDeviceManagementUiConfig-xxxxxx
displayName:
comment:
properties:
flowToActivateDevice:
flowToDeleteDevice:
flowToDisableDevice:
flowToDisablePush:
flowToEnableDevice:
flowToEnablePush:
flowToOrderActivationLetter:
flowToRenameDevice:
pageExitTarget:
Cronto Device Management UI Redirect
type: com.airlock.iam.selfservice.application.configuration.ui.tokens.CrontoDeviceManagementFlowRedirectTargetConfig
id: CrontoDeviceManagementFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
Cronto Device Removal Possible
crontoHandler
) allowDeletingLastDevice
)
type: com.airlock.iam.selfservice.application.configuration.selection.CrontoDeviceDeletionPossibleConditionConfig
id: CrontoDeviceDeletionPossibleConditionConfig-xxxxxx
displayName:
comment:
properties:
allowDeletingLastDevice: false
crontoHandler:
Cronto Device Reset Step Config
crontoHandler
) removeAccount
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.cronto.CrontoDeviceResetStepConfig
id: CrontoDeviceResetStepConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
removeAccount: false
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Cronto Device Selection Step
crontoHandler
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.CrontoDeviceSelectionStepConfig
id: CrontoDeviceSelectionStepConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Cronto Engine Handler
maximumNumberOfActivatedDevices
) defaultAllowedPlatforms
) Defines the platforms for which an activation letter can be used per default. This can always be changed by an administrator for an individual letter.
Currently, the following platform codes are supported:
- 0: stand-alone Cronto device
- 1: iOS
- 2: Android
- 3: Windows phone
- 4: Blackberry
- 5: rooted iOS
- 6: rooted Android
platformBlacklist
) Blacklist of blocked platform types. If a type is on this list, it can not be used for login or transaction signing and new devices of this type cannot be activated, independent of the allowed platforms in the activation letter.
Currently, the following platform codes are supported:
- 0: stand-alone Cronto device
- 1: iOS
- 2: Android
- 3: Windows phone
- 4: Blackberry
- 5: rooted iOS
- 6: rooted Android
challengeTokenLifetime
) enablePushNotifications
) bankUrlIndex
) pushNotificationsReminderPeriod
) serviceCode
) pushNotificationSender
) tokenDataProvider
) defaultNumberOfActivations
) Defines how many times an activation letter can be used per default to activate devices or apps. This can always be changed by an administrator for an individual letter.
defaultLetterValidityTime
) selectableAsAuthMethod
) selectableAsNextAuthMethod
) enableOnScreenActivation
) On-screen activation is only possible in two situations: (1) during credential migration and (2) when activating an additional device.
Attention: make sure that such an activation can only be accessed by strongly authenticated users. For this, the "Strong Authentication Tag" must be configured on the following plugins (if used):- Cronto Activation Step
- Cronto Activation Possible
- Cronto Activation Required
enableOnScreenActivationWithLetter
) Attention: make sure that such an activation can only be accessed by strongly authenticated users (refer to the documentation of "Enable On-Screen Activation")
availableOrderOptions
) optionsResourceKeyPrefix
) defaultOrderOptions
)
type: com.airlock.iam.core.misc.impl.cronto.crontoengine.CrontoEngineHandler
id: CrontoEngineHandler-xxxxxx
displayName:
comment:
properties:
availableOrderOptions: [default]
bankUrlIndex:
challengeTokenLifetime: 300
defaultAllowedPlatforms: 01234
defaultLetterValidityTime:
defaultNumberOfActivations: 8
defaultOrderOptions: [default]
enableOnScreenActivation: false
enableOnScreenActivationWithLetter: false
enablePushNotifications: false
maximumNumberOfActivatedDevices: 8
optionsResourceKeyPrefix: cronto-order-option.
platformBlacklist:
pushNotificationSender:
pushNotificationsReminderPeriod: 3
selectableAsAuthMethod: true
selectableAsNextAuthMethod: true
serviceCode:
tokenDataProvider:
Cronto Legacy Login Message Provider Config
Provides the same Cronto login message that is created when using the "Cronto Authenticator".
This plugin exists for backward compatibility and uses the translations cronto.login-title, cronto.login-username, cronto.login-last and cronto.login-id to create a login message.
usernameAlias
) dateFormat
)
type: com.airlock.iam.core.application.configuration.cronto.CrontoLegacyLoginMessageProviderConfig
id: CrontoLegacyLoginMessageProviderConfig-xxxxxx
displayName:
comment:
properties:
dateFormat: dd.MM.yyyy HH:mm
usernameAlias:
Cronto Letter Order Condition Config
crontoHandler
) crontoAccountRequired
) crontoLetterRequired
) minimalLetterOrderInterval
) Number of hours that must at least have passed since the last Cronto activation letter has been ordered.
By setting this value to 0, no waiting time until an additional letter can be ordered is required. However, it is recommended to set a different value to prevent a letter being ordered while another one is still being printed or being delivered.
type: com.airlock.iam.flow.shared.application.configuration.cronto.CrontoLetterOrderConditionConfig
id: CrontoLetterOrderConditionConfig-xxxxxx
displayName:
comment:
properties:
crontoAccountRequired: true
crontoHandler:
crontoLetterRequired: false
minimalLetterOrderInterval: 24
Cronto Letter Order Step Config
crontoHandler
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.cronto.CrontoLetterOrderStepConfig
id: CrontoLetterOrderStepConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Cronto Letter User Event Listener
crontoHandler
) condition
)
type: com.airlock.iam.core.misc.impl.persistency.usereventbus.CrontoLetterUserEventListener
id: CrontoLetterUserEventListener-xxxxxx
displayName:
comment:
properties:
condition:
crontoHandler:
Cronto Message Provider
resourceKey
) pushTitleResourceKey
) pushSubjectResourceKey
) valueProviders
) omitEmptyValueLines
) crontoHandler
)
type: com.airlock.iam.flow.shared.application.configuration.message.GenericCrontoMessageProviderConfig
id: GenericCrontoMessageProviderConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
omitEmptyValueLines: false
pushSubjectResourceKey: cronto.push.login.subject
pushTitleResourceKey: cronto.push.login.title
resourceKey:
valueProviders:
Cronto Public Self-Service Approval Step
Cronto approval step for public self-service flows.
Note that unlike identity verification steps, approval steps require an existing user and cannot prevent username enumeration (no stealth mode). It is therefore important that approval steps are only used after an identity verification step.
messageProvider
) allowPushDevicesOnly
) If this flag is set and there is no push-enabled device for the user, public self-service is not possible.
This feature may be used for mobile application services, where showing a cryptogram on the same device is not useful.
pushSelectionForSingleDevice
) crontoHandler
) Handles all Cronto-specific actions.
When the Cronto app communicates directly to IAM (for online validation and push notification management) these requests are on a separate session and must therefore be handled by a separate, global Cronto Handler defined in "Cronto App Communication" in Loginapp.
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
maxResponseRetries
) The number of times the user may enter a wrong response before the flow is aborted (and the challenge is deleted). If set to 0, only 1 attempt is possible for each challenge.
The purpose of this settings is usability. The failed attempts counter is always increased upon receiving a wrong OTP and the user is locked when the global failed attempts limit is exceeded.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.CrontoPublicSelfServiceApprovalStepConfig
id: CrontoPublicSelfServiceApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
allowPushDevicesOnly: false
authenticationMethodId: CRONTO
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
maxResponseRetries: 3
messageProvider:
onFailureGotos:
preCondition:
pushSelectionForSingleDevice: false
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Cronto Push Notification Sender
Configurations for sending Cronto push notifications.
Settings for Android and iOS are both optional and it is possible to configure only one of them.
IAM must be able to connect to the push servers of Google (fcm.googleapis.com) and Apple (gateway.push.apple.com or gateway.sandbox.push.apple.com). To prevent direct communication of IAM to the push servers, a proxy can be configured (see Advanced Settings).
firebaseServiceAccountJson
) Path to the JSON file used to authenticate communication with the Google servers. This file can be obtained from the Firebase Console, or, in case of third-party Cronto apps, from the app developer.
iOsAuthenticationCertificatePath
) iOsAuthenticationCertificatePassword
) iOsBundleId
) iOsUseSandboxGateway
) showIosBadge
) proxyHost
) proxyType
) proxyPort
) connectionTimeout
) maxNumberOfThreads
) terminationTimeout
)
type: com.airlock.iam.core.misc.impl.cronto.pushnotification.CommonCrontoPushNotificationSender
id: CommonCrontoPushNotificationSender-xxxxxx
displayName:
comment:
properties:
connectionTimeout: 20000
firebaseServiceAccountJson:
iOsAuthenticationCertificatePassword:
iOsAuthenticationCertificatePath:
iOsBundleId: com.vasco.digipass.DIGIPASS
iOsUseSandboxGateway: false
maxNumberOfThreads: 20
proxyHost:
proxyPort: 1080
proxyType: SOCKS
showIosBadge: true
terminationTimeout: 60000
Cronto Report Strategy
crontoHandler
) tokenDataProvider
) reportTypeShortDesc
) The text is used in the user trail log written when a report is rendered. Please specify a text like in the examples below, so it suits the structure of the log statement it is used in.
userStore
) reportRenderer
) barcodeGenerator
) Optional barcode generator. If this property is configured, a barcode image and the corresponding barcode content are added to the parameter map accessible by report templates. The following keys are defined:
- BarcodeImage: placeholder for the barcode image.
- BarcodeContent: placeholder for the barcode content.
- BarcodeContentDisplay: placeholder for the barcode content in a human-readable format.
Tracking ID: If the "tracking ID" field is configured in the token data provider the generated barcode content is automatically stored in the token. This is useful for future reference, e.g., for tracking active shipments.
languageAttributeName
) outputDirectory
) This property is not required if the renderer plugin (see separate property) does not write on the outputstream (e.g. sends it somewhere else). It is required otherwise.
Note: If this property is not defined and the used renderer plugin writes on the output stream, then the result (e.g. a PDF file) is lost.
workingDirectory
) If this property is defined, the credential reports are not directly generated into the output directory (see other property) but they are generated into this working directory and are moved to the output directory once they are done.
This helps to solve problems with processes automatically reading the rendered reports and reading partial reports during the generation process. Make sure that the working directory and the output directory reside in the same file system (if not the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
deleteOldReports
) Caution: This feature will delete all reports starting with the prefix configured by property "file-name-prefix" and the user's name. Thus you must make sure, that different report types use different filename prefixes.
fileNamePrefix
) Do not use the prefix "pwd-" or the empty prefix if password- or tokenlist reports are stored in the same directory. The latter is used as default for token lists (matrix card) and the former for password letters.
fileNameSuffix
) aggregateReport
) requiredOrderOptions
) excludingOrderOptions
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.token.CrontoReportStrategyConfig
id: CrontoReportStrategyConfig-xxxxxx
displayName:
comment:
properties:
aggregateReport:
barcodeGenerator:
crontoHandler:
deleteOldReports: false
excludingOrderOptions:
fileNamePrefix:
fileNameSuffix:
languageAttributeName:
outputDirectory:
reportRenderer:
reportTypeShortDesc: UNSPECIFIED
requiredOrderOptions:
tokenDataProvider:
userStore:
workingDirectory:
Cronto Self-Service Approval Step
messageProvider
) allowOnlyPushDevices
) If this flag is set and there is no push-enabled device for the user, approval is not possible.
This feature may be used for mobile application services, where showing a cryptogram on the same device is not useful.
pushSelectionForSingleDevice
) crontoHandler
) Handles all Cronto-specific actions.
When the Cronto app communicates directly to IAM (for online validation and push notification management) these requests are on a separate session and must therefore be handled by a separate, global Cronto Handler defined in "Cronto App Communication" in Loginapp.
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
maxResponseRetries
) The number of times the user may enter a wrong response before the flow is aborted (and the challenge is deleted). If set to 0, only 1 attempt is possible for each challenge.
The purpose of this settings is usability. The failed attempts counter is always increased upon receiving a wrong OTP and the user is locked when the global failed attempts limit is exceeded.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.CrontoSelfServiceApprovalStepConfig
id: CrontoSelfServiceApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
allowOnlyPushDevices: false
authenticationMethodId: CRONTO
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
maxResponseRetries: 3
messageProvider:
onFailureGotos:
preCondition:
pushSelectionForSingleDevice: false
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Cronto Self-Services (Legacy)
crontoHandler
) userCanDisableAllDevices
) activationSessionLifetime
) userCanOrderAdditionalLetter
) If this option is activated, users can order an additional activation letter, given they have already received a letter but need a new one.
The letter can be ordered on the activation page and the device management page.
minimalNewLetterIntervalInHours
) Number of hours that must at least have passed since the last Cronto activation letter has been ordered. This is only used if "User can order additional letter" is activated.
Note:By setting this value to 0, no waiting time until an additional letter can be ordered is required. However, it is recommended to set a different value to prevent a letter being ordered while another one is still being printed or being delivered.
provideDeactivationChallenge
)
type: com.airlock.iam.login.rest.application.configuration.CrontoSelfServiceRestConfig
id: CrontoSelfServiceRestConfig-xxxxxx
displayName:
comment:
properties:
activationSessionLifetime: 120
crontoHandler:
minimalNewLetterIntervalInHours: 24
provideDeactivationChallenge: true
userCanDisableAllDevices: false
userCanOrderAdditionalLetter: false
Cronto Token Controller
crontoHandler
) autoOrder
)
type: com.airlock.iam.admin.application.configuration.cronto.CrontoTokenController
id: CrontoTokenController-xxxxxx
displayName:
comment:
properties:
autoOrder: false
crontoHandler:
Cronto Token Service
crontoHandler
) tokenDataProvider
)
type: com.airlock.iam.core.misc.tokenservice.CrontoTokenService
id: CrontoTokenService-xxxxxx
displayName:
comment:
properties:
crontoHandler:
tokenDataProvider:
Cronto Transaction Approval Step
messageProvider
) authenticatePushDevicesOnly
) If this flag is set and there is no push-enabled device for the user, transaction approval is not possible.
This feature may be used for mobile application approvals, where showing a cryptogram on the same device is not appropriate.
pushSelectionForSingleDevice
) pushToAllDevices
) crontoHandler
) Handles all Cronto-specific actions.
When the Cronto app communicates directly to IAM (for online validation and push notification management) these requests are on a separate session and must therefore be handled by a separate, global Cronto Handler defined in "Cronto App Communication" in Loginapp.
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
maxResponseRetries
) The number of times the user may enter a wrong response before the flow is aborted (and the challenge is deleted). If set to 0, only 1 attempt is possible for each challenge.
The purpose of this settings is usability. The failed attempts counter is always increased upon receiving a wrong OTP and the user is locked when the global failed attempts limit is exceeded.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.transactionapproval.application.configuration.cronto.CrontoTransactionApprovalStepConfig
id: CrontoTransactionApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
authenticatePushDevicesOnly: false
authenticationMethodId: CRONTO
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
maxResponseRetries: 3
messageProvider:
onFailureGotos:
preCondition:
pushSelectionForSingleDevice: false
pushToAllDevices: false
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Cronto was used for login (Transaction Approval only)
selectableIfNoAuthTokenIdPresent
)
type: com.airlock.iam.transactionapproval.application.configuration.selection.CrontoAuthTokenIdSelectionConditionConfig
id: CrontoAuthTokenIdSelectionConditionConfig-xxxxxx
displayName:
comment:
properties:
selectableIfNoAuthTokenIdPresent: true
CrontoSign Swiss App
pushNotificationsReminderPeriod
) bankUrlIndex
) pushNotificationSender
)
type: com.airlock.iam.core.misc.impl.cronto.pushnotification.CrontoSignSwissVascoPushAppHandler
id: CrontoSignSwissVascoPushAppHandler-xxxxxx
displayName:
comment:
properties:
bankUrlIndex:
pushNotificationSender:
pushNotificationsReminderPeriod: 3
CrontoSign Swiss Push Activation Possible
Flow condition that determines if the Cronto device used during login (or registered during the authentication flow) can be activated for push. It also considers the "Push Notification Reminder Period" property of the Cronto handler to determine if the user should already be asked again.
This condition is only useful in authentication flows and after a Cronto authentication or activation step.
crontoHandler
)
type: com.airlock.iam.flow.shared.application.configuration.cronto.CrontoPushActivationConditionConfig
id: CrontoPushActivationConditionConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
CrontoSign Swiss Push Activation Step
A step that allows push activation on the CrontoSign Swiss app.
In an authentication flow, it is typically used together with the "CrontoSign Swiss Push Activation Possible" condition, which is fulfilled if the currently used device (for login or newly registered) qualifies for push activation.
In self-service flows, it can be used without a condition, allowing the user to activate any Cronto device.
crontoHandler
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.cronto.CrontoPushActivationStepConfig
id: CrontoPushActivationStepConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
CSRF Token Extraction Step
This plugin obtains the login page of a backend application with a HTTP GET request. It then extracts the CSRF-token from the login form and stores it in the on-behalf login step context under the configured key for further use.
This on behalf login step is typically used as a first step in the sequence of on-behalf login steps.
csrfTokenSelector
) csrfStorageKey
) targetApplicationLoginPageUrl
) queryParameters
) If the query parameter is already defined in the target URL, the value defined through this configuration will be added to the existing values.
If the same parameter name is configured multiple times, the values will be added to the existing values in order of the configured list.
onBehalfLoginStepValidator
) additionalHeaders
)
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.CsrfFormTokenExtractionStep
id: CsrfFormTokenExtractionStep-xxxxxx
displayName:
comment:
properties:
additionalHeaders:
csrfStorageKey:
csrfTokenSelector:
onBehalfLoginStepValidator:
queryParameters:
targetApplicationLoginPageUrl:
CSV Renderer
headerNames
) dataColumnNames
) charset
) fieldDelimiter
) This property specifies the separation character used in the generated CSV output in order to separate fields from each other. Usually, a comma is used but, e.g., Excel requires this to be a semicolon. To use the generated file with Excel, use a semicolon, to use it with most other programs, use a comma.
If the field delimiter is a valid character in one of the exported fields, then a text delimiter has to configured! Lack of doing so might result in erroneous CSV output.
textDelimiter
)
type: com.airlock.iam.core.misc.renderer.CsvRenderer
id: CsvRenderer-xxxxxx
displayName:
comment:
properties:
charset: UTF-8
dataColumnNames:
fieldDelimiter: ,
headerNames:
textDelimiter:
CSV Users Export
For efficiency reasons, prefer using a "User Store Configuration" over a "User Persister Configuration".
type
) - BASIC: The downloaded file contains only basic infos about the user (username, roles) plus the context data selected by the context keys.
- FULL: The downloaded file contains all available data about the user plus the context data.
contextKeys
) charset
) separationCharacter
)
type: com.airlock.iam.admin.application.configuration.users.CsvUsersExportConfig
id: CsvUsersExportConfig-xxxxxx
displayName:
comment:
properties:
charset: UTF-8
contextKeys:
separationCharacter: ;
type: BASIC
Current Date And Time Value Provider
type: com.airlock.iam.common.application.configuration.valueprovider.DateAndTimeNowValueProviderConfig
id: DateAndTimeNowValueProviderConfig-xxxxxx
displayName:
comment:
properties:
Custom CAPTCHA
siteKey
) The site key can be assumed to be public knowledge and identifies the associated CAPTCHA account.
secretKey
) The secret is used to validate the CAPTCHA challenge response on the custom CAPTCHA server.
captchaServiceUrl
) For example, the API request for reCAPTCHA is 'https://google.com/recaptcha/api/siteverify' as POST method with the 'secret' and the user 'response' token as POST parameters.
enforceCaptchaForStep
) type
) proxyUri
) proxyLoginUser
) proxyLoginPassword
)
type: com.airlock.iam.flow.shared.application.configuration.captcha.CustomCaptchaConfig
id: CustomCaptchaConfig-xxxxxx
displayName:
comment:
properties:
captchaServiceUrl:
enforceCaptchaForStep: false
proxyLoginPassword:
proxyLoginUser:
proxyUri:
secretKey:
siteKey:
type: CUSTOM_CAPTCHA
Custom Claim (OAuth 2.0 Token Exchange)
claimName
) claimValue
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtCustomClaimConfig
id: OAuth2TokenExchangeJwtCustomClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
claimValue:
Custom Configuration-based Authentication UI
pageId
) - custom.page.<ID>.title.caption: to define the caption of the page
- custom.page.<ID>.title.page: to define HTML page title. If not set, the translation from the caption is used.
stepId
) requiredStepAction
) uiElements
) initialRestInvocation
)
type: com.airlock.iam.authentication.application.configuration.ui.ConfigurableAuthenticationStepUiConfig
id: ConfigurableAuthenticationStepUiConfig-xxxxxx
displayName:
comment:
properties:
initialRestInvocation:
pageId:
requiredStepAction:
stepId:
uiElements:
Custom Configuration-based Public Self-Service UI
User interface configuration for a configurable public self-service flow step.
The step is accessible by the following URI: /<loginapp-uri>/ui/app/self-service/flow/default/ext/<ID>
pageId
) - custom.page.<ID>.title.caption: to define the caption of the page
- custom.page.<ID>.title.page: to define HTML page title. If not set, the translation from the caption is used.
stepId
) requiredStepAction
) uiElements
) initialRestInvocation
)
type: com.airlock.iam.publicselfservice.application.configuration.ui.ConfigurablePublicSelfServiceStepUiConfig
id: ConfigurablePublicSelfServiceStepUiConfig-xxxxxx
displayName:
comment:
properties:
initialRestInvocation:
pageId:
requiredStepAction:
stepId:
uiElements:
Custom Configuration-based Self-Service UI
User interface configuration for a configurable protected self-service flow step.
The step is accessible by the following URI: /<loginapp-uri>/ui/app/protected/flow/<FLOW_ID>/ext/<ID>
pageId
) - custom.page.<ID>.title.caption: to define the caption of the page
- custom.page.<ID>.title.page: to define HTML page title. If not set, the translation from the caption is used.
stepId
) requiredStepAction
) uiElements
) initialRestInvocation
)
type: com.airlock.iam.selfservice.application.configuration.ui.ConfigurableSelfServiceStepUiConfig
id: ConfigurableSelfServiceStepUiConfig-xxxxxx
displayName:
comment:
properties:
initialRestInvocation:
pageId:
requiredStepAction:
stepId:
uiElements:
Custom Configuration-based User Self-Registration UI
User interface configuration for a configurable user self-registration flow step.
The step is accessible by the following URI: /<loginapp-uri>/ui/app/registration/flow/<FLOW_ID>/ext/<ID>
pageId
) - custom.page.<ID>.title.caption: to define the caption of the page
- custom.page.<ID>.title.page: to define HTML page title. If not set, the translation from the caption is used.
stepId
) requiredStepAction
) uiElements
) initialRestInvocation
)
type: com.airlock.iam.userselfreg.application.configuration.ui.ConfigurableUserSelfRegStepUiConfig
id: ConfigurableUserSelfRegStepUiConfig-xxxxxx
displayName:
comment:
properties:
initialRestInvocation:
pageId:
requiredStepAction:
stepId:
uiElements:
Custom Flow Processors
Allows to configure custom processors for any kind of flow.
Security Warning: For advanced users only. A custom processor configuration may change the behavior of, e.g., counting of failed logins, user locking and user validity checks. Using this advanced option may therefore have major security implications. Only use this option if you understand how to achieve a secure processor configuration.
processors
) Custom list of processors that are applied in the configured order.
It is crucial to understand that a faulty processor configuration leads to an insecure system. Unless the consequences are well understood, it is recommended to work with the respective default processors plugin provided for the flow type in question. Please read its documentation to know which processors it uses internally. Also read the plugin documentations of the individual processors, in particular to understand which processors are combinable and if so in which order.
type: com.airlock.iam.flow.application.configuration.processor.CustomFlowProcessorsConfig
id: CustomFlowProcessorsConfig-xxxxxx
displayName:
comment:
properties:
processors:
Custom JavaScript-based Authentication UI
User interface configuration for a custom JavaScript authentication flow step.
The step is accessible by the following URI: /<loginapp-uri>/ui/app/auth/flow/<FLOW_ID>/ext/<ID>
pageId
) - custom.page.<ID>.title.caption: to define the caption of the page
- custom.page.<ID>.title.page: to define HTML page title. If not set, the translation from the caption is used.
stepId
) requiredStepAction
)
type: com.airlock.iam.authentication.application.configuration.ui.CustomJavaScriptAuthenticationStepUiConfig
id: CustomJavaScriptAuthenticationStepUiConfig-xxxxxx
displayName:
comment:
properties:
pageId:
requiredStepAction:
stepId:
Custom JavaScript-based Public Self-Service UI
User interface configuration for a custom JavaScript public self-service flow step.
The step is accessible by the following URI: /<loginapp-uri>/ui/app/self-service/flow/default/ext/<ID>
pageId
) - custom.page.<ID>.title.caption: to define the caption of the page
- custom.page.<ID>.title.page: to define HTML page title. If not set, the translation from the caption is used.
stepId
) requiredStepAction
)
type: com.airlock.iam.publicselfservice.application.configuration.ui.CustomJavaScriptPublicSelfServiceStepUiConfig
id: CustomJavaScriptPublicSelfServiceStepUiConfig-xxxxxx
displayName:
comment:
properties:
pageId:
requiredStepAction:
stepId:
Custom JavaScript-based Self-Service UI
User interface configuration for a custom JavaScript self-service flow step.
The step is accessible by the following URI: /<loginapp-uri>/ui/app/protected/flow/<FLOW_ID>/ext/<ID>
pageId
) - custom.page.<ID>.title.caption: to define the caption of the page
- custom.page.<ID>.title.page: to define HTML page title. If not set, the translation from the caption is used.
stepId
) requiredStepAction
)
type: com.airlock.iam.selfservice.application.configuration.ui.CustomJavaScriptSelfServiceStepUiConfig
id: CustomJavaScriptSelfServiceStepUiConfig-xxxxxx
displayName:
comment:
properties:
pageId:
requiredStepAction:
stepId:
Custom JavaScript-based User Self-Registration UI
User interface configuration for a custom JavaScript user self-registration flow step.
The step is accessible by the following URI: /<loginapp-uri>/ui/app/registration/flow/<FLOW_ID>/ext/<ID>
pageId
) - custom.page.<ID>.title.caption: to define the caption of the page
- custom.page.<ID>.title.page: to define HTML page title. If not set, the translation from the caption is used.
stepId
) requiredStepAction
)
type: com.airlock.iam.userselfreg.application.configuration.ui.CustomJavaScriptUserSelfRegStepUiConfig
id: CustomJavaScriptUserSelfRegStepUiConfig-xxxxxx
displayName:
comment:
properties:
pageId:
requiredStepAction:
stepId:
Custom Protected Self-Service Flow
flowId
) steps
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
processors
) persistencyless
) If enabled, this flow does not consider persistency, i.e. users don't have to exist locally in order to use a self-service. This is typically used with SSO tickets or external authentication using OAuth or SAML.
Persistency-less flows are very limited in their capabilities, in particular:
- The user state (locked, invalid etc.) cannot be verified.
- Flow steps editing user data will complete without failure but changed data is lost.
Note that configuration validation support is limited. It is essential to test such a flow extensively to ensure it behaves correctly in all situations.
It is recommended to use the "Default Persistency-less Protected Self-Service Processors" when using a persistency-less flow.
type: com.airlock.iam.selfservice.application.configuration.flow.CustomProtectedSelfServiceFlowConfig
id: CustomProtectedSelfServiceFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
flowId:
persistencyless: false
processors:
steps:
Custom Public Self-Service Restrictions
Custom configuration for public self-service restrictions.
See the plugin descriptions of "Default Password Reset Restrictions" or "Default Self-Unlock Restrictions" for determine reasonable sets of restrictions.
restrictions
) Restrictions define which users are allowed to perform a public self-service. These restrictions are checked in the configured order and after the first restriction disallows public self-service, no further checks are performed.
Security Warning: We recommend to use at least the restrictions provided by the "Default Password Reset Restrictions". Omitting these restrictions may allow public self-service for unauthorized (e.g. locked or invalid) users. The "Nonexistent User Restriction" is probably always needed and should be the first restriction in the list.
type: com.airlock.iam.publicselfservice.application.configuration.restrictions.CustomPublicSelfServiceRestrictionsConfig
id: CustomPublicSelfServiceRestrictionsConfig-xxxxxx
displayName:
comment:
properties:
restrictions:
Custom User Persister-based User Store Provider
userPersister
)
type: com.airlock.iam.core.application.configuration.store.user.CustomUserPersisterBasedUserStoreProvider
id: CustomUserPersisterBasedUserStoreProvider-xxxxxx
displayName:
comment:
properties:
userPersister:
Customizable Device List
In case no Airlock 2FA account is associated with the current user, no device IDs are returned.
deviceFilters
) A device will only be returned by this provider in case it passes all the filtering steps defined by this sequence. An example is given in the plugin documentation.
Note: No configured predicate (default) means all device IDs of the user will be returned.
Note: Generally, combining the device filters using a "Logical AND Device Condition", and configuring it as a single filter is not equivalent to using a list of filters.
airlock2FASettings
)
type: com.airlock.iam.airlock2fa.application.configuration.provider.CustomizableAirlock2FADeviceIdsProviderConfig
id: CustomizableAirlock2FADeviceIdsProviderConfig-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
deviceFilters:
Customizable Identity Generator
pattern
) The pattern for the identity creation.
Syntax:pattern = fix_part | random_part [fix_part | random_part]*
random_part = {alphabet_name:number_of_characters}
fix_part = any_string_without_'{'
Custom alphabets can be configured below; built in alphabets are:
- "
digits
" all decimal digits (i.e. the characters 0123456790) - "
lower26
" standard alphabet with 26 lower chars (i.e. the characters abcdefghijklmnopqrstuvwxyz) - "
upper26
" standard alphabet with 26 upper chars (i.e. the characters ABCDEFGHIJKLMNOPQRSTUVWXYZ) - "
alpha52
" standard alphabet with 26 upper and 26 lower chars (i.e. the characters ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz) - "
distinct
" distinct standard signs: digits, upper and lower case letter without the hard to distinguish '0,O,1,l,I' (i.e. the characters 23456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ) - "
DISTINCT
" distinct standard uppercase signs: digits and upper case letter without the hard to distinguish '0,O,1,I' (i.e. the characters 23456789ABCDEFGHJKLMNPQRSTUVWXYZ) - "
extended
" contains most of the signs visible on a computer keyboard without the hard to distinguish '0,O,1,l,I' (i.e. the characters +-.,:;$<>()[]{}%&!?/*@#=_23456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ)
NOTE: Characters in this pattern do not pass the input filter for tokens (OTP, SMS, and alike). Choose a different pattern for tokens or relax the corresponding pattern (in the Loginapp's security settings). Characters may be blocked by a WAF deny rule.
alphabets
)
type: com.airlock.iam.common.application.configuration.user.CustomizableIdentityGenerator
id: CustomizableIdentityGenerator-xxxxxx
displayName:
comment:
properties:
alphabets:
pattern: user{digits:8}
Customizable Password Policy
Password policy validates a password against a list of predefined password policy checks. Each password policy check validates one requirement of the password.
Not all checks are applied in all situations (e.g. a check whether a password is too young to be changed is not applied during a mandatory password change).
policyChecks
) optionalPolicyChecks
) minimumPassedOptionalChecks
)
type: com.airlock.iam.core.misc.impl.authen.CustomizablePasswordPolicy
id: CustomizablePasswordPolicy-xxxxxx
displayName:
comment:
properties:
minimumPassedOptionalChecks: 0
optionalPolicyChecks:
policyChecks:
Data Sources
- User data
- Token data
Note that data sources for some tokens are configured directly in the corresponding token-specific settings.
userStore
) tokenDataSource
) userTrailDataSource
) Configures the global settings to persist user trail log messages across all modules.
If defined, user trail logs are additionally forwarded to the referenced repository. This does not affect writing messages to the respective module log files.
deviceUsageDataSource
) acceptedSsoTicketRepository
) Configures the repository used to store accepted SSO tickets and reject previously accepted ones.
The in-memory repository cannot be used if multiple instances of IAM are deployed in parallel (failover, horizontal scaling). Furthermore, the in-memory repository does not preserve previously accepted SSO tickets across IAM restarts.
type: com.airlock.iam.core.misc.plugin.config.GlobalPersisterSettings
id: GlobalPersisterSettings-xxxxxx
displayName:
comment:
properties:
acceptedSsoTicketRepository:
deviceUsageDataSource:
tokenDataSource:
userStore:
userTrailDataSource:
Database Credential Persister
The database is accessed via JDBC. It fetches the data of a user by directly executing a prepared statement. Making changes persistent is achieved by multiple update statement executions on the user record within a transaction.
This plug-in is very flexible in that it allows you to specify extra where clauses and search filters to select the set of credential records.
Note: This persister also supports iteration over credentials.
How this plug-in finds a credential record
There are two ways how this plugin finds a credential record for getting data, updating data and deleting data. The credential record is always fetched using a select statement given a primary key and applying the configured filters (additional where clause). The two variants differ in how the primary key is determined:- The primary key for selecting the credential record is the username itself. This is by far the most common and most efficient method to obtain credential data.
- The primary key is determined by a separate query including the username. The query can be configured. This way of selecting the credential record is more flexible but results in an additional select statement.
sqlDataSource
) credentialTableName
) colUserName
) userNameResolveQuery
) Such a query is useful if the username (used on the login page) is not part of the user table.
The query must be such that - given the username - it returns one value that can be used as primary key in the user table. The query must contain one question mark (?) which will be substituted by the username (a string).
If the query returns no records, it results in the user not being found.
If the query returns more than one record, it results in the username being ambiguous.
If this property is not defined, the username itself is used as primary key in the user table (the usual and efficient way).
Note: If this property is defined credential insertion by this plugin is no more possible.
colBinaryCredentialData
) BYTE
or VARBYTE
. The presence of this property indicates that the credential data is stored in binary form and not in string form. If this property is set, this class returns (and expects) instances of CredentialBean returning false in method "CredentialBean.isCredentialDataStringType()".
You cannot specify both this property and property "col-string-credential-type".
colStringCredentialData
) VARCHAR
or CHAR
. The presence of this property indicates that the credential data is stored as string and not in binary form. If this property is set, this class returns (and expects) instances of CredentialBean returning true in method "CredentialBean.isCredentialDataStringType()".
You cannot specify both this property and property "col-binary-credential-type".
colCredentialSerial
) VARCHAR
or CHAR
. colCredentialNotActiveAfter
) DATETIME
or TIMESTAMP
. colCredentialNotActiveBefore
) DATETIME
or TIMESTAMP
. colCredentialDeliveryDate
) DATETIME
or TIMESTAMP
colCredentialGenerationDate
) DATETIME
or TIMESTAMP
colNextBinaryCredentialData
) BYTE
or VARBYTE
. The presence of this property indicates that the credential data is stored in binary form and not in string form. If this property is set, this class returns (and expects) instances of CredentialBean returning false in method "CredentialBean.isCredentialDataStringType()".
You cannot specify both this property and property "col-string-credential-type".
colNextStringCredentialData
) VARCHAR
or CHAR
. The presence of this property indicates that the credential data is stored as string and not in binary form. If this property is set, this class returns (and expects) instances of CredentialBean returning true in method "CredentialBean.isCredentialDataStringType()".
You cannot specify both this property and property "col-binary-credential-type".
colNextCredentialSerial
) VARCHAR
or CHAR
. colNextCredentialNotActiveAfter
) DATETIME
or TIMESTAMP
. colNextCredentialNotActiveBefore
) DATETIME
or TIMESTAMP
. colNextCredentialDeliveryDate
) DATETIME
or TIMESTAMP
colNextCredentialGenerationDate
) DATETIME
or TIMESTAMP
colCredentialActive
) CHAR
or NUMBER
. The value "0" (zero) is treated as false, any other value is treated as true.If the column is not specified, all credentials are considered to be active.
colOtherCredentialsDeliveryTimestamps
) colCredentialOrderedFlag
) CHAR
or NUMBER
. The value "0" is treated as false, any other value is treated as true. colCredentialOrderedUser
) CHAR
or VARCHAR
. colCredentialOrderedDate
) DATETIME
or TIMESTAMP
. additionalWhereClause
) The SQL query without an additional where clause is "SELECT * FROM credential-table WHERE colusername = 'username'"(real values for "credential-table", "colusername" are taken from the configuration and "username" is taken from the credential object).
The SQL query with an additional where clause "xyz" is: "SELECT * FROM credential-table WHERE colusername = 'username' AND xyz".
Example: If the value of this configuration setting is "GROUP = 'a' AND COD = 1" the resulting query is "SELECT * FROM credential-table WHERE colusername = 'username' AND GROUP = 'a' AND COD = 1"
searchConditionQuery
) After the credential has been found by username (and matching the optional additional where clause as specified by configuration property "additional-where-clause") the query specified by this configuration property is executed.
If the result of the query is "true" or "1", the credential record is considered valid. In all other cases, the credential record is not valid, i.e. the behaviour is as if the record did not exist.
The value of this configuration property can be empty (no effect) or any valid SQL query. You can use values of the user record (Record selected from table specified by configuration property "user-table-name" by user name and optionally additional where clause) in the query as follows: ${xxx}
references the field (column) "xxx" from the selected user record.
Example:
In our example the selected user record has the following values (column name = value): user_id = 'freddy', person_no = 13, ...
Further, there is a different database table "PERSON" which is referenced by the user table. The table "PERSON" has a column of type boolean called "valid" which indicates whether a person record is valid or not.
Consider the following value for this configuration property: SELECT p.valid FROM PERSON p WHERE p.person_no = ${person_no}
Thus, when looking for the user record (given the username and the matching the optional additonal where part), the above query is executed where ${person_no}
is substituted by the value 13 of field "person_no" of the selected user record.
additionalIteratorWhereClause
) iteratorQuery
) Specifying such a query is only necessary if the username cannot be used as primary key in the user table (this only if property "user-name-resolve-query" is specified).
The query must be such that it returns one-column records one username (userid) per row.
Note that his query is used both when returning all user ids and when returning only matching user ids (filtered by the user). Thus, the query must be such that LIKE-clauses against context data columns work. This usually means that you must join the result with the user table (even if the user id is not read from the usertable) so the LIKE-clauses can access the context data of the user table. Failing to do so will result in runtime SQL syntax exceptions!Note: If this property is specified, additional-iterator-clauses and the deleted flag is ignored. They must be part of the query itself!
contextDataItems
) additionalContextData
) user-table-name
by user name) in the query as follows: ${xxx}
refers to the field (column) xxx
from the selected user record.
Note: These context data values are read only! When fetching credential records, the query will be executed for each credential and the values will be added to the context data container. Modified, new or deleted values will not be written when credential records are updated.
Also note that context data fields defined in configuration property context-data-columns
override corresponding entries in this property.
Example:SELECT p.mobile_no FROM person p WHERE p.person_no = ${person_no}
colDeleted
) Note: If a credential is deleted and this property is defined, the record is marked as deleted and not really removed from the database! If this property is not defined and a credential is deleted, the record is deleted from the database. The type of this column is either
CHAR
or NUMBER
. The value "0" is treated as not deleted, any other value is treated as deleted. colVersionId
) Such a technical column is used by some applications or libraries (such as Hibernate) to implement optimistic locking.
Note that this plugin still uses its own data-based optimistic locking mechanism. It just increments the value within a transaction in order to be compliant with other components' locking mechanisms.
The column must be of an integer type. Usually a long type is used.
colRecordModificationDate
) The type of the column must be compatible with a timestamp.
Note that - if configured (see separate property) - user information may also be written to the database at the same time.
colRecordModificationUser
) Note that - if configured (see separate property) - the modification date may also be written to the database at the same time.
recordModificationUser
)
type: com.airlock.iam.core.misc.impl.persistency.db.DatabaseCredentialPersister
id: DatabaseCredentialPersister-xxxxxx
displayName:
comment:
properties:
additionalContextData:
additionalIteratorWhereClause:
additionalWhereClause:
colBinaryCredentialData:
colCredentialActive:
colCredentialDeliveryDate:
colCredentialGenerationDate:
colCredentialNotActiveAfter:
colCredentialNotActiveBefore:
colCredentialOrderedDate:
colCredentialOrderedFlag:
colCredentialOrderedUser:
colCredentialSerial:
colDeleted:
colNextBinaryCredentialData:
colNextCredentialDeliveryDate:
colNextCredentialGenerationDate:
colNextCredentialNotActiveAfter:
colNextCredentialNotActiveBefore:
colNextCredentialSerial:
colNextStringCredentialData:
colOtherCredentialsDeliveryTimestamps:
colRecordModificationDate:
colRecordModificationUser:
colStringCredentialData:
colUserName:
colVersionId:
contextDataItems:
credentialTableName:
iteratorQuery:
recordModificationUser:
searchConditionQuery:
sqlDataSource:
userNameResolveQuery:
Database Field
column
) value
)
type: com.airlock.iam.core.misc.impl.persistency.db.DatabaseField
id: DatabaseField-xxxxxx
displayName:
comment:
properties:
column:
value:
Database Login History Repository Config
sqlDataSource
) maxNumberOfEntries
)
type: com.airlock.iam.common.application.configuration.loginhistory.DatabaseLoginHistoryRepositoryConfig
id: DatabaseLoginHistoryRepositoryConfig-xxxxxx
displayName:
comment:
properties:
maxNumberOfEntries: 50
sqlDataSource:
Database Maintenance Message Persister
Database interface for persisting maintenance messages.
The database model is based on two database tables: the first stores message details such as validity period, system availability, etc and the second stores the translations associated to the messages.
sqlDataSource
) cacheTimeout
) Setting this property to 0 (zero) or omitting this property results in a direct call to the underlying database layer every time the provider is asked for a maintenance message.
Note that the usage of the location token "${location}" in the additional where-clause of the message, disables caching.
messageTable
) messageColName
) messageColSystemAvailable
) messageColActive
) messageColValidFrom
) messageColValidTo
) messageColLocation
) messageColVersionId
) messageColRecordInsertionDate
) messageColRecordInsertionUser
) messageColRecordModificationDate
) messageColRecordModificationUser
) messageAdditionalWhereClause
) The SQL query without an additional where clause is something like
SELECT * FROM message_table WHERE VALID_FROM <= now AND VALID_TO >= now
.The SQL query with an additional where clause
xyz
is: SELECT * FROM message_table WHERE VALID_FROM <= now AND VALID_TO >= now AND (xyz)
.
Note that this where clause may be overridden for the message lookup using property "Message Lookup Additional Where Clause".
translationTable
) translationColMessageRef
) message-col-name
translationColLanguage
) translationColMessage
) translationAdditionalWhereClause
) The SQL query without an additional where clause is something like
SELECT * FROM translation_table WHERE language = 'en'
.The SQL query with an additional where clause
xyz
is: SELECT * FROM translation_table WHERE language = 'en' AND xyz
. recordModificationUser
) additionalInsertData
) This allows you to add arbitrary fixed or dynamic values when a new record is created. This is useful if some database fields may not be NULL but are not inserted by this plugin by default.
CautionMake sure to appropriately escape values (e.g. use single quotes around strings). They are used as provided in the SQL insert statements. This allows calling database dependent functions (e.g. in order to get a sequence number, system date, etc).
additionalInsertDataTranslations
) This allows you to add arbitrary fixed or dynamic values when a new record is created. This is useful if some database fields may not be NULL but are not inserted by this plugin by default.
CautionMake sure to appropriately escape values (e.g. use single quotes around strings). They are used as provided in the SQL insert statements. This allows calling database dependent functions (e.g. in order to get a sequence number, system date, etc).
type: com.airlock.iam.core.misc.impl.persistency.db.DatabaseMaintenanceMessagePersister
id: DatabaseMaintenanceMessagePersister-xxxxxx
displayName:
comment:
properties:
additionalInsertData:
additionalInsertDataTranslations:
cacheTimeout: 0
messageAdditionalWhereClause:
messageColActive:
messageColLocation:
messageColName:
messageColRecordInsertionDate:
messageColRecordInsertionUser:
messageColRecordModificationDate:
messageColRecordModificationUser:
messageColSystemAvailable:
messageColValidFrom:
messageColValidTo:
messageColVersionId:
messageTable:
recordModificationUser: Medusa
sqlDataSource:
translationAdditionalWhereClause:
translationColLanguage:
translationColMessage:
translationColMessageRef:
translationTable:
Database Sequence Generator
Sequence generator storing the sequence number in a database.
sqlDataSource
) sequenceName
) tableName
) columnSequenceName
) columnSequenceNumber
)
type: com.airlock.iam.core.misc.util.report.barcode.DatabaseSequenceGenerator
id: DatabaseSequenceGenerator-xxxxxx
displayName:
comment:
properties:
columnSequenceName: NAME
columnSequenceNumber: STATE
sequenceName:
sqlDataSource:
tableName: SEQUENCES
Database Token List Persister
This plug-in allows you to specify extra where clauses and search filters to select the set of users.
How this plug-in finds a user record
There are two ways how this plugin finds a user record for getting user data, updating user data and deleting user data. The user record is always fetched using a select statement given a primary key and applying the configured filters (additional where clause). The two variants differ in how the primary key is determined:- The primary key for selecting the user record is the username itself. This is by far the most common and most efficient method to obtain user data.
- The primary key is determined by a separate query including the username. The query can be configured. This way of selecting the user record is more flexible but results in an additional select statement.
Estimate for the Length of the Token List Database Field
The length of the encoded token hash list depends mainly on the number of unused tokens in the list, the used hash function and the encoding of the list. Here is an example using the SHA1PasswordHash as hashfunction (which produces 40 bytes for each token) together with the hashed token list encoding used by this persister implementation (actually it is the encoding provided byTokenListHasher#hashedTokenListToBytes(HashedTokenList)
):Each unused token uses 40 bytes for the hash value, 4 bytes for the index and 4 bytes for the length of the hash value, thus 48 bytes. Due to the nature of the hash function, this figures are independent of the length of the tokens.
Additionally the encoded list holds the number of the tokens (when the list was new) in 4 bytes, the length of the identification string in 4 bytes, the identification string of arbitrary length and the generation timestamp in 8 bytes. This makes another 16 bytes excluding the identification string.
If the list has 100 tokens and the identification string is 20 bytes at most, this makes 100 * 48 + 16 + 20 = 4836 bytes.
sqlDataSource
) tokenListTableName
) colUserName
) userNameResolveQuery
) Such a query is useful if the username (used on the login page) is not part of the user table.
The query must be such that - given the username - it returns one value that can be used as primary key in the user table. The query must contain one question mark (?) which will be substituted by the username (a string).
If the query returns no records, it results in the user not being found.
If the query returns more than one record, it results in the username being ambiguous.
If this property is not defined, the username itself is used as primary key in the user table (the usual and efficient way).
Note: If this property is defined, user insertion by this plugin is no more possible.
colTokenList
) colNewTokenList
) colGenerationTimeStamp
) DATETIME
or TIMESTAMP
colDeliveryTimeStamp
) DATETIME
or TIMESTAMP
colOtherCredentialsDeliveryTimestamps
) colListActive
) CHAR
or NUMBER
. The value "0" (zero) is treated as false, any other value is treated as true.If the column is not specified, all token lists are considered to be active.
colChallengeOpenSince
) DATETIME
or TIMESTAMP
. colUnansweredChallenges
) NUMBER
. colNewListOrdered
) CHAR
or NUMBER
. The value "0" is treated as false, any other value is treated as true. colNewListOrderedUser
) VARCHAR
. colNewListOrderedDate
) DATETIME
or TIMESTAMP
. additionalWhereClause
) The SQL query without an additional where clause is "SELECT * FROM token-list-table WHERE colusername = 'username'"(real values for "token-list-table", "colusername" are taken from the configuration and "username" is taken from the token list object).
The SQL query with an additional where clause "xyz" is: "SELECT * FROM token-list-table WHERE colusername = 'username' AND xyz".
Example: If the value of this configuration setting is "GROUP = 'a' AND COD = 1" the resulting query is "SELECT * FROM token-list-table WHERE colusername = 'username' AND GROUP = 'a' AND COD = 1"
additionalIteratorWhereClause
) iteratorQuery
) Specifying such a query is only necessary if the username cannot be used as primary key in the user table (this only if property "user-name-resolve-query" is specified).
The query must be such that it returns one-column records one username (userid) per row.
Note that his query is used both when returning all user ids and when returning only matching user ids (filtered by the user). Thus, the query must be such that LIKE-clauses against context data columns work. This usually means that you must join the result with the user table (even if the user id is not read from the usertable) so the LIKE-clauses can access the context data of the user table. Failing to do so will result in runtime SQL syntax exceptions!Note: If this property is specified, additional-iterator-clauses and the deleted flag is ignored. They must be part of the query itself!
contextDataItems
) colVersionId
) Such a technical column is used by some applications or libraries (such as Hibernate) to implement optimistic locking.
Note that this plugin still uses its own data-based optimistic locking mechanism. It just increments the value within a transaction in order to be compliant with other components' locking mechanisms.
The column must be of an integer type. Usually a long type is used.
colRecordModificationDate
) The type of the column must be compatible with a timestamp.
Note that - if configured (see separate property) - user information may also be written to the database at the same time.
colRecordModificationUser
) Note that - if configured (see separate property) - the modification date may also be written to the database at the same time.
recordModificationUser
)
type: com.airlock.iam.core.misc.impl.persistency.db.DatabaseTokenListPersister
id: DatabaseTokenListPersister-xxxxxx
displayName:
comment:
properties:
additionalIteratorWhereClause:
additionalWhereClause:
colChallengeOpenSince:
colDeliveryTimeStamp:
colGenerationTimeStamp:
colListActive:
colNewListOrdered:
colNewListOrderedDate:
colNewListOrderedUser:
colNewTokenList:
colOtherCredentialsDeliveryTimestamps:
colRecordModificationDate:
colRecordModificationUser:
colTokenList:
colUnansweredChallenges:
colUserName:
colVersionId:
contextDataItems:
iteratorQuery:
recordModificationUser: Medusa
sqlDataSource:
tokenListTableName:
userNameResolveQuery:
Database Token Persister
Defines the table and column names, as well as additional query settings for the Database Token Persister.
This persister handles both token and token assignment data.
sqlDataSource
) tokenTable
) tokenSequence
) The name of the database sequence providing primary keys (Oracle only).
If left empty, Airlock IAM expects the database to support auto-increment columns (SQL Server, MySQL).
tokenColTokenId
) The name of the column holding the token identity (primary key).
This column needs to be set to auto_increment (H2, mysql,..) or the database sequence name must be configured (Oracle).
tokenColType
) tokenColSerialId
) tokenColActive
) tokenColActivationDate
) tokenColObsoletesTokenId
) The name of the column holding the 'obsoletes_token' token reference (foreign key).
Stores a reference to the token that gets deactivated the next time this token is used.
tokenColValidityRangeLower
) tokenColValidityRangeUpper
) tokenColGenerationDate
) tokenColFirstUsageDate
) tokenColLatestUsageDate
) tokenColTotalUsages
) tokenColTokenData
) tokenColActivatesTokenId
) The name of the column holding the 'activates_token' token reference (foreign key).
Stores a reference to the token that gets activated the next time this token is used.
tokenColGenericDataElement1
) tokenColGenericDataElement2
) tokenColGenericDataElement3
) tokenColGenericDataElement4
) tokenColGenericDataElement5
) tokenColGenericDataElement6
) tokenColGenericDataElement7
) tokenColGenericDataElement8
) tokenColGenericDataElement9
) tokenColGenericDataElement10
) tokenColGenericDataElement11
) tokenColGenericDataElement12
) tokenColTrackingId
) tokenAdditionalWhereClause
) Optional SQL query condition that is added to the WHERE clause when searching for, updating or deleting tokens.
- Example for an SQL query without an additional WHERE clause:
SELECT * FROM token WHERE type = 'myTokenType'
- Example for an SQL query with an additional WHERE clause "
foo()
":SELECT * FROM token WHERE type = 'myTokenType' AND foo()
Note that this WHERE clause may be overridden for the token lookup using the property: "Token Search Additional Where Clause"
tokenSearchAdditionalWhereClause
) additionalTokenInsertData
) This property defines a list of name/value pairs used in insert statements when a new token record is inserted.
This allows you to add arbitrary fixed or dynamic values when a new record is created.
Caution: Make sure to appropriately escape values (e.g. use single quotes around strings). They are used as provided in the SQL insert statements. This allows calling database dependent functions (e.g. in order to get a sequence number, system date, etc). Also, do not use any of the standard fields of the token table.
tokenAssignmentTable
) tokenAssignmentColTokenId
) tokenAssignmentColUser
) tokenAssignmentColAssignmentDate
) tokenAssignmentColAssignmentUser
) tokenAssignmentColOrderNew
) tokenAssignmentColOrderNewUser
) tokenAssignmentColOrderNewDate
) tokenAssignmentColOrderOptions
) tokenAssignmentColAdditionalInformation
) tokenAssignmentColComment
) tokenAssignmentAdditionalWhereClause
) Optional SQL query condition that is added to the WHERE clause when searching for, updating or deleting token assignments.
- Example for an SQL query without additional WHERE clause:
SELECT * FROM token_assignment WHERE ta_user = 'user'
- Example for an SQL query with additional WHERE clause "
foo()
":SELECT * FROM token_assignment WHERE ta_user = 'user' AND foo()
additionalTokenAssignmentInsertData
) This property defines a list of name/value pairs used in insert statements when a new token assignment record is inserted.
This allows you to add arbitrary fixed or dynamic values when a new record is created.
Caution: Make sure to appropriately escape values (e.g. use single quotes around strings). They are used as provided in the SQL insert statements. This allows calling database dependent functions (e.g. in order to get a sequence number, system date, etc). Also, do not use any of the standard fields of the token assignment table.
type: com.airlock.iam.core.misc.impl.persistency.token.DatabaseTokenPersister
id: DatabaseTokenPersister-xxxxxx
displayName:
comment:
properties:
additionalTokenAssignmentInsertData:
additionalTokenInsertData:
sqlDataSource:
tokenAdditionalWhereClause:
tokenAssignmentAdditionalWhereClause:
tokenAssignmentColAdditionalInformation:
tokenAssignmentColAssignmentDate:
tokenAssignmentColAssignmentUser:
tokenAssignmentColComment:
tokenAssignmentColOrderNew:
tokenAssignmentColOrderNewDate:
tokenAssignmentColOrderNewUser:
tokenAssignmentColOrderOptions:
tokenAssignmentColTokenId:
tokenAssignmentColUser:
tokenAssignmentTable:
tokenColActivatesTokenId:
tokenColActivationDate:
tokenColActive:
tokenColFirstUsageDate:
tokenColGenerationDate:
tokenColGenericDataElement1:
tokenColGenericDataElement10:
tokenColGenericDataElement11:
tokenColGenericDataElement12:
tokenColGenericDataElement2:
tokenColGenericDataElement3:
tokenColGenericDataElement4:
tokenColGenericDataElement5:
tokenColGenericDataElement6:
tokenColGenericDataElement7:
tokenColGenericDataElement8:
tokenColGenericDataElement9:
tokenColLatestUsageDate:
tokenColObsoletesTokenId:
tokenColSerialId:
tokenColTokenData:
tokenColTokenId:
tokenColTotalUsages:
tokenColTrackingId:
tokenColType:
tokenColValidityRangeLower:
tokenColValidityRangeUpper:
tokenSearchAdditionalWhereClause:
tokenSequence:
tokenTable:
Database User Persister
This plug-in is very flexible in that most database columns are optional and it allows you to specify extra where clauses and search filters to select the set of users. It also allows to fetch role information from separate tables.
Note: This persister also supports insertion and deletion of users and can be used to iterate over users.
How this plug-in finds a user record
There are two ways how this plugin finds a user record for getting user data, updating user data and deleting user data. The user record is always fetched using a select statement given a primary key and applying the configured filters (additional where clause). The two variants differ in how the primary key is determined:- The primary key for selecting the user record is the username itself. This is by far the most common and most efficient method to obtain user data.
- The primary key is determined by a separate query including the username. The query can be configured. This way of selecting the user record is more flexible but results in an additional select statement.
sqlDataSource
) userTableName
) colUserName
) userNameResolveQuery
) Such a query is useful if the username (used on the login page) is not part of the user table.
The query must be such that - given the username - it returns one value that can be used as primary key in the user table. The query must contain one question mark (?) which will be substituted by the username (a string).
If the query returns no records, it results in the user not being found.
If the query returns more than one record, it results in the username being ambiguous.
If this property is not defined, the username itself is used as primary key in the user table (the usual and efficient way).
Note: If this property is defined user insertion by this plugin is no more possible.
colPassword
) In general the type of this database column is expected to be BYTE or VARBYTE because password hashes are byte sequences. However, if a password hash function is used that returns a character sequence (for example the password itself) this also works with column type CHAR or VARCHAR.
The plug-in tries to find out automatically whether the password hash is binary or string type by reading a value from the database and looking at the type of the returned object. This may lead to problems with NULL values or "too intelligent" JDBC drivers that implicitly convert HEX- or base64-strings to binary data. The optional property "Is Pwd Hash String Type" can be used to tell the plug-in explicitly what data type this column is.
isPwdHashStringType
) The value
TRUE
indicates that the password hash column is a string type column. The value FALSE
indicates that the password hash column is a binary type column.If this optional property is not defined or empty, the plug-in tries to determine the type of column automatically (see description of property "Col Password").
colAuthMethod
) CHAR
, VARCHAR
) and its value may be NULL
. defaultAuthMethod
) colNextAuthMethod
) CHAR
, VARCHAR
) and its value may be NULL
. defaultNextAuthMethod
) colAuthMigrationDate
) DATETIME
or TIMESTAMP
and its value may be NULL
. colUserLocked
) Authenticators usually set a user locked after some number of consecutively failed login attempts. This column type is either
CHAR
or NUMBER
. The value "0" is treated as false
, any other value is treated as true
.If this column is not specified, users are not considered locked.
colUserLockReason
) This can be the hole description of the reason or a key to the string resource.
This column type is either
CHAR
or VARCHAR
. colUserLockDate
) The type of this column either
DATETIME
or TIMESTAMP
. colFailedLogins
) NUMBER
.If this column is not specified, the failed logins are not counted.
colFailedTokenCounts
) CLOB
(or a DB-type equivalent).If this column is not specified, the failed attempts in the flow-based REST authentication API are not counted.
colFailedLoginsBeforeLatestLogin
) NUMBER
.If this column is not specified, the failed logins before the latest successful login are not counted.
colTotalLogins
) NUMBER
.If this column is not specified, the successful logins are not counted.
colPasswordChangeForced
) This column type is either
CHAR
or NUMBER
. The value "0" is treated as false
, any other value is treated as true
.If this column is not specified, no password change is enforced.
colPasswordDeliveryDate
) The type of this column either
DATETIME
or TIMESTAMP
. Note that it will work with most data types but depending on the chosen database data type, only the date without the time is stored.If this column is not specified, the delivery date of the latest password is not provided to callers.
colOtherCredentialsDeliveryTimestamps
) The type of every referenced column is either a
DATETIME
or TIMESTAMP
.This information can be used by components that care about not delivering more than one user credential at the same time.
If this column is not specified, no delivery dates are provided to callers.
colPasswordGenerationDate
) The type of this column either
DATETIME
or TIMESTAMP
.This information is needed by components in which the generation date of a password and its delivery date is not necessarily the same. This can - for example - be the case when a generated credential is held back because another credential for the same user is delivered at the same time.
If this column is not specified, no password generation date is provided to callers.
colLatestPasswordChange
) The type of this column either
DATETIME
or TIMESTAMP
.colNextEnforcedPasswordChange
) The type of this column either
DATETIME
or TIMESTAMP
.colPasswordOrderedFlag
) This column type is either
CHAR
or NUMBER
. The value "0" is treated as false, any other value is treated as true.If this column is not specified, the password order state is always reported to be
false
. colPasswordOrderedUser
) This column type is either
CHAR
or VARCHAR
.If this column is not specified, the password order user is always
null
. colPasswordOrderedDate
) This column type is either
DATETIME
or TIMESTAMP
.If this column is not specified, the password order date is always
null
. colFailedPasswordResets
) The name of the database column with the number of failed password reset attempts for flow-based password reset. The type of this column is NUMBER
Security note: If this column is not specified, failed password reset attempts are not counted, which enables brute-force attacks.
colRoleString
) The type of this column is
CHAR
or VARCHAR
.Note: There are other ways to determine a user's roles (see other configuration properties). If the roles granted to a user are obtained from other tables (via foreign keys), leave this property empty and use the property
roles-query
instead. rolesQuery
) Col Role String
, this property allows to retrieve the roles based on foreign tables.This property defines an arbitrary SQL query that returns the roles associated with the user. Note: The statement must be such that the query returns rows consisting of one column only with the granted role!
You may use the string
${userId}
to reference the user id of the authenticated user inside the SQL query. The reference may be used once or multiple times.
Example: In the following example, the user table is USER
, there is role table ROLE
and a table with the user-to-role mappings USER2ROLE
:
roles-query="SELECT r.role_name from ROLE r, USER u, USER2ROLE u2r where u.userName = ${userId} AND u.id = u2r.user AND u2r.role = r.id"
grantRoles
) This set of roles is added to the otherwise determined set of roles. Thus, it does not replace otherwise determined roles but can be used in conjunction with other methods.
colUserValid
) The type of this column is either
CHAR
or NUMBER
. The value "0" is treated as invalid, any other value is treated as valid.If this column is not specified, all users are considered to be valid.
colUserNotValidAfter
) DATETIME
or TIMESTAMP
. colUserNotValidBefore
) DATETIME
or TIMESTAMP
. colLatestSuccessfulLogin
) DATETIME
or TIMESTAMP
. colSecondLatestSuccessfulLogin
) DATETIME
or TIMESTAMP
. colLatestLoginAttempt
) DATETIME
or TIMESTAMP
. colFirstLogin
) DATETIME
or TIMESTAMP
. colUnlockAttempts
) NUMBER
. colLatestUnlockAttempt
) DATETIME
or TIMESTAMP
. colSelfRegisteredFlag
) CHAR
or NUMBER
. The value "0" is treated as false
, any other value is treated as true
.If this column is not specified, it will be assumed that no users are self-registered.
colSelfRegistrationDate
) DATETIME
or TIMESTAMP
. colChannelVerificationResends
) NUMBER
. If this column is not specified, the number of allowed resend attempts is not limited.
colLastGSID
) colLastGSIDDate
) colSecretQuestionsEnabled
) additionalWhereClause
) The SQL query without an additional where clause is
SELECT * FROM usertable WHERE colusername = 'username'
(real values for "usertable
", "colusername
" are taken from the configuration and "username
" is taken from the user name input field of the login mask.The SQL query with an additional where clause
xyz
is: SELECT * FROM usertable WHERE colusername = 'username' AND xyz
. Example: If the value of this configuration setting is
"GROUP = 'cus1' AND MANDATE = 'abc'"
the resulting query is SELECT * FROM usertable WHERE colusername = 'username' AND GROUP = 'cus1' AND MANDATE = 'abc'
See also property
search-condition-query
: It offers a more powerful (although slightly less efficient) way to control the set of valid users. additionalIteratorWhereClause
) The SQL query without an additional where clause is
SELECT colusername FROM usertable
(real values for "usertable
", "colusername
" are taken from the configuration.The SQL query with an additional where clause
xyz
is: SELECT colusername FROM usertable WHERE xyz
. Example: If the value of this configuration setting is
"GROUP = 'cus1' AND MANDATE = 'abc'"
the resulting query is SELECT colusername FROM usertable WHERE GROUP = 'cus1' AND MANDATE = 'abc'
See also property
search-condition-query
: It offers a more powerful (although slightly less efficient) way to control the set of valid users. iteratorQuery
) Specifying such a query is only necessary if the username cannot be used as primary key in the user table (this only if property "User Name Resolve Query" is specified).
The query must be such that it returns one-column records one username (userid) per row.
Note that his query is used both when returning all user ids and when returning only matching user ids (filtered by the user). Thus, the query must be such that LIKE-clauses against context data columns work. This usually means that you must join the result with the user table (even if the user id is not read from the usertable) so the LIKE-clauses can access the context data of the user table. Failing to do so will result in runtime SQL syntax exceptions!Note: If this property is specified, "Additional Iterator Clauses" and the deleted flag is ignored. They must be part of the query itself!
searchConditionQuery
) (See also configuration property
additional-where-clause
: it offers a different, slightly more efficient but less powerful way to limit the set of valid users).After the user has been found by username (and matching the optional additional where clause as specified by configuration property
additional-where-clause
) the query specified by this configuration property is executed. If the result of the query is true
or 1
, the user is considered valid. In all other cases, the user is not valid, i.e. the behaviour is as if the user would not exist.
The value of this configuration property can be empty (no effect) or any valid SQL query. You can use values of the user record (Record selected from table specified by configuration property user-table-name
by user name and optionally additional where clause
) in the query as follows: ${xxx}
refers to the field (column) xxx
from the selected user record.
Example: In our example the selected user record has the following values (column name = value): user_id
= 'freddie'
, person_no
= 13
, ... Further, there is a different database table
PERSON
which is referenced by the user table. The table PERSON
has a column of type boolean called "valid" which indicates whether a person record is valid or not. Consider the following value for this configuration property: SELECT p.valid FROM PERSON p WHERE p.person_no = ${person_no}
Thus, when looking for the user record (given the username and the matching the optional additonal where part), the above query is executed where
${person_no}
is substituted by the value 13
of field person_no
of the selected user record. contextDataColumns
) A list of database columns that are loaded/stored in the user's context data container.
Use either an appropriately typed instance (preferred) or the legacy type using auto-detection (the default up to IAM 6.4).
additionalContextData
) user-table-name
by user name) in the query as follows: ${xxx}
refers to the field (column) xxx
from the selected user record.
Note: These context data values are read only! When fetching user records, the query will be executed for each user and the values will be added to the context data container. Modified, new or deleted values will not be written when user records are updated.
Also note that context data fields defined in configuration property context-data-columns
override corresponding entries in this property.
Example:SELECT p.mobile_no FROM person p WHERE p.person_no = ${person_no}
colDeleted
) Note: If a user is deleted and this property is defined, the record is only marked as deleted and not really removed from the database! If this property is not defined and a user is deleted, the record is deleted from the database. The type of this column is either
NUMBER
(recommended) or CHAR
. The value "1" represents a deleted user, "0" represents a non-deleted user. colVersionId
) Such a technical column is used by some applications or libraries (such as Hibernate) to implement optimistic locking.
Note that this plugin still uses its own data-based optimistic locking mechanism. It just increments the value within a transaction in order to be compliant with other components' locking mechanisms.
The column must be of an integer type. Usually a long type is used.
colRecordInsertionDate
) The type of the column must be compatible with a timestamp.
Note that - if configured (see separate property) - user information may also be written to the database at the same time.
colRecordInsertionUser
) Note that - if configured (see separate property) - the insertion date may also be written to the database at the same time.
colRecordModificationDate
) The type of the column must be compatible with a timestamp.
Note that - if configured (see separate property) - user information may also be written to the database at the same time.
colRecordModificationUser
) Note that - if configured (see separate property) - the modification date may also be written to the database at the same time.
recordModificationUser
) additionalInsertData
) This allows you to add arbitrary fixed or dynamic values when a new record is created. This is useful if some database fields may not be NULL but are not inserted by this plugin by default.
Caution: Make sure to appropriately escape values (e.g. use single quotes around strings). They are used as provided in the SQL insert statements. This allows calling database dependent functions (e.g. in order to get a sequence number, system date, etc).
Caution: If the columns specified here are the same as configured in the context data fields or in any "Col ..." property, remove them from the other places for this persister instance.
userChangeEventListeners
) rowsetRangePattern
) This property only has an effect if used in connection with a "Database User Store".
A string formatter pattern describing how to constrain the result set to a subrange of all results. Set this value in case Airlock IAM cannot determine the optimal query pattern automatically.
The first argument is the number of rows to skip (offset), and the second argument is the number of rows to return (limit).
If no pattern is set, Airlock IAM will attempt to automatically determine the query based on the database type.
Commonly used patterns:
- LIMIT %2$d OFFSET %1$d for MySQL, MariaDB, H2, HSQLDB, PostgreSQL, SQLite
- OFFSET %1$d ROWS FETCH NEXT %2$d ROWS ONLY for SQL:2008 standard, Derby, SQL Server 2012, Oracle 12c
caseSensitiveExactMatching
) This property only has an effect if used in connection with a "Database User Store".
A String formatter pattern describing how to compare a string field on equality, case sensitive.If the database is already case sensitive (most DBs, except MySQL and MariaDB) the default value can be used.
The argument (%s) is the name of the field to compare, and the question mark is the value to be searched for.
Commonly used patterns:
- %s = ? – in most cases
- BINARY `%s` = ? – for MySQL and MariaDB databases with standard (case insensitive) settings
caseSensitiveMatching
) This property only has an effect if used in connection with a "Database User Store".
A String formatter pattern describing how to search in a string field, case sensitive.If the database is already case sensitive (most DBs, except MySQL and MariaDB) the default value can be used.
The argument (%s) is the name of the field to compare, and the question mark is the value to be searched for. Important: This is used for approximate matching, e.g. "contains" matching, where the search value could be like "%bla%", thus the "LIKE" operator must be used instead of the equality sign.
Commonly used patterns:
- %s LIKE ? – in most cases
- %s LIKE BINARY ? – for MySQL and MariaDB databases with standard (case insensitive) settings
- %s COLLATE latin1_general_cs LIKE ? – alternative for MySQL and MariaDB, possibly more efficient, but collation must be known
caseInsensitiveExactMatching
) This property only has an effect if used in connection with a "Database User Store".
A String formatter pattern describing how to compare a string database field on equality, case insensitive.If the database is already case insensitive (e.g. MySQL and MariaDB) the default value can be used.
The argument (%s) is the name of the field to compare, and the question mark is the value to be searched for. For some databases a less efficient "LIKE" operator has to be used for this.
Depending on used DB and version, as well as the specific setup, different values can be the most efficient. For large user repositories, a DB expert might be consulted or tests with different settings should be performed.
Commonly used patterns:
- LOWER( %s ) = LOWER ( ? ) – works for most DBs, tested with Oracle DB. Note that this is only really efficient, if a lower-case index is created for the relevant columns.
- %s COLLATE latin1_general_ci = ? – recommended for MSSQL.
- %s = ? – for databases with default case insensitive matching, e.g. MySQL and MariaDB with standard settings
caseInsensitiveMatching
) This property only has an effect if used in connection with a "Database User Store".
A String formatter pattern describing how to compare a string database field on equality, case insensitive.If the database is already case insensitive (e.g. MySQL and MariaDB) the default value can be used.
The argument (%s) is the name of the field to compare, and the question mark is the value to be searched for. Important: This is used for approximate matching, e.g. "contains" matching, where the search value could be like "%bla%", thus the "LIKE" operator must be used instead of the equality sign.
Depending on used DB and version, as well as the specific setup, different values can be the most efficient. For large user repositories, a DB expert might be consulted or tests with different settings should be performed.
Commonly used patterns:
- LOWER( %s ) LIKE LOWER ( ? ) – works for most DBs, tested with Oracle DB. Note that this is only really efficient, if a lower-case index is created for the relevant columns.
- %s COLLATE latin1_general_ci LIKE ? – recommended for MSSQL.
- %s LIKE ? – for databases with default case insensitive matching, e.g. MySQL and MariaDB with standard settings
- %s ILIKE ? – for PostgreSQL databases
type: com.airlock.iam.core.misc.impl.persistency.db.DatabaseUserPersister
id: DatabaseUserPersister-xxxxxx
displayName:
comment:
properties:
additionalContextData:
additionalInsertData:
additionalIteratorWhereClause:
additionalWhereClause:
caseInsensitiveExactMatching: LOWER( %s ) = LOWER ( ? )
caseInsensitiveMatching: LOWER( %s ) LIKE LOWER ( ? )
caseSensitiveExactMatching: %s = ?
caseSensitiveMatching: %s LIKE ?
colAuthMethod:
colAuthMigrationDate:
colChannelVerificationResends:
colDeleted:
colFailedLogins:
colFailedLoginsBeforeLatestLogin:
colFailedPasswordResets:
colFailedTokenCounts:
colFirstLogin:
colLastGSID:
colLastGSIDDate:
colLatestLoginAttempt:
colLatestPasswordChange:
colLatestSuccessfulLogin:
colLatestUnlockAttempt:
colNextAuthMethod:
colNextEnforcedPasswordChange:
colOtherCredentialsDeliveryTimestamps:
colPassword:
colPasswordChangeForced:
colPasswordDeliveryDate:
colPasswordGenerationDate:
colPasswordOrderedDate:
colPasswordOrderedFlag:
colPasswordOrderedUser:
colRecordInsertionDate:
colRecordInsertionUser:
colRecordModificationDate:
colRecordModificationUser:
colRoleString:
colSecondLatestSuccessfulLogin:
colSecretQuestionsEnabled:
colSelfRegisteredFlag:
colSelfRegistrationDate:
colTotalLogins:
colUnlockAttempts:
colUserLockDate:
colUserLockReason:
colUserLocked:
colUserName:
colUserNotValidAfter:
colUserNotValidBefore:
colUserValid:
colVersionId:
contextDataColumns:
defaultAuthMethod:
defaultNextAuthMethod:
grantRoles:
isPwdHashStringType: true
iteratorQuery:
recordModificationUser: Medusa
rolesQuery:
rowsetRangePattern:
searchConditionQuery:
sqlDataSource:
userChangeEventListeners:
userNameResolveQuery:
userTableName:
Database User Store
databaseUserPersister
)
type: com.airlock.iam.core.application.configuration.store.user.DatabaseUserStoreProvider
id: DatabaseUserStoreProvider-xxxxxx
displayName:
comment:
properties:
databaseUserPersister:
Date And Time Context Data
contextDataItemNameConfig
) valueProviderConfig
)
type: com.airlock.iam.userselfreg.application.configuration.definition.DateAndTimeNonInteractiveUserDataItemDefinitionConfig
id: DateAndTimeNonInteractiveUserDataItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
contextDataItemNameConfig:
valueProviderConfig:
Date And Time Context Data Item Config
The database column must be of a date with time type (e.g. DATETIME (TIMESTAMP on Oracle)) and the values in the context data container are guaranteed to be of type java.util.Date.
contextDataName
) databaseColumnName
) readonlyOnUpdate
)
type: com.airlock.iam.core.application.configuration.contextdata.DateAndTimeContextDataItemConfig
id: DateAndTimeContextDataItemConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
databaseColumnName:
readonlyOnUpdate: false
Date And Time Context Data Item Name
contextDataName
)
type: com.airlock.iam.core.application.configuration.contextdata.DateAndTimeContextDataItemNameConfig
id: DateAndTimeContextDataItemNameConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
Date And Time Context Data Value Provider
Provides the date and time value contained in the specified context data item of the user.
Make sure the configured context data item is also configured on the user persister.
contextDataField
) mandatory
) If enabled, the value provided by this context data item is not allowed to be null.
If this option is enabled and the context data item is null (e.g. if the configured context data is not configured on the user persister), an exception will be thrown at runtime.
type: com.airlock.iam.common.application.configuration.valueprovider.contextdata.ContextDataDateAndTimeValueProviderConfig
id: ContextDataDateAndTimeValueProviderConfig-xxxxxx
displayName:
comment:
properties:
contextDataField:
mandatory: false
Date And Time Data Transformer
The values in the context data container are guaranteed to be of type java.util.Date.
properties
) Use the asterisk character ("*") to replace all properties.
pattern
)
type: com.airlock.iam.core.misc.util.datatransformer.DateAndTimeDataTransformer
id: DateAndTimeDataTransformer-xxxxxx
displayName:
comment:
properties:
pattern:
properties:
Date And Time User Context Data Item
contextDataName
) required
) validators
)
type: com.airlock.iam.flow.shared.application.configuration.item.DateAndTimeContextDataItemDefinitionConfig
id: DateAndTimeContextDataItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
required: true
validators:
Date And Time Validator
minRelative
) The "minimum relative value" is the lower limit (earliest possible) for allowed difference in days to the current date.
Examples: A value of 1 means that tomorrow is the earliest possible date to enter, a value of -365 means that the entered date can be at most one year in the past.
minDate
) The earliest date allowed to be filled in. This cannot be used together with "Minimum Relative" and must be in ISO 8601 format.
maxRelative
) The "maximum relative value" is the upper limit (last possible) for allowed difference in days to the current date. This cannot be used together with "Max Date".
Examples: A value of 1 means that tomorrow is the latest possible date to enter, a value of -365 means that the entered date has to be at least one year in the past. Use this property to configure a minimal required age.
maxDate
) The latest date allowed to be filled in. This cannot be used together with "Maximum Relative" and it must be in ISO 8601 format.
type: com.airlock.iam.common.application.configuration.validation.DefaultDateAndTimeValidatorConfig
id: DefaultDateAndTimeValidatorConfig-xxxxxx
displayName:
comment:
properties:
maxDate:
maxRelative:
minDate:
minRelative:
Date And Time With Offset Value Provider Config
dateAndTimeProvider
) offsetProvider
) The amount to offset Date And Time Provider by.
A positive offset will result in a later date and time than Date And Time Provider, while a negative offset will result in an earlier date and time.
unit
)
type: com.airlock.iam.common.application.configuration.valueprovider.DateAndTimeWithOffsetValueProviderConfig
id: DateAndTimeWithOffsetValueProviderConfig-xxxxxx
displayName:
comment:
properties:
dateAndTimeProvider:
offsetProvider:
unit:
Date Context Data Item Config
The database column must either be of a date type (e.g. DATE; TIMESTAMP and DATETIME will also work where supported) or of a string type (e.g. VARCHAR, CHAR (whitespaces are removed automatically)), in which case a date pattern must be specified).
The values in the context data container are guaranteed to be of type java.time.LocalDate.
contextDataName
) databaseColumnName
) datePatternForStringColumns
) readonlyOnUpdate
)
type: com.airlock.iam.core.application.configuration.contextdata.DateContextDataItemConfig
id: DateContextDataItemConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
databaseColumnName:
datePatternForStringColumns:
readonlyOnUpdate: false
Date Data Transformer
The values in the context data container are guaranteed to be of type java.time.LocalDate.
properties
) Use the asterisk character ("*") to replace all properties.
pattern
)
type: com.airlock.iam.core.misc.util.datatransformer.DateDataTransformer
id: DateDataTransformer-xxxxxx
displayName:
comment:
properties:
pattern:
properties:
Date Format
translationKey
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.validation.DateFormatValidationConfig
id: DateFormatValidationConfig-xxxxxx
displayName:
comment:
properties:
translationKey:
Date UI Element
label
) property
) placeholder
) validations
) htmlId
) submitToServer
) initialValueQuery
) See the JSONPath documentation for the full documentation: https://github.com/dchester/jsonpath
Examples:Assume the initial REST call returns the following JSON response:
{ "meta": { "type": "jsonapi.metadata.document", "timestamp": "2023-03-10T13:06:01.294+02:00" }, "data": [ { "type": "user", "id": "user1", "attributes": { "contextData": { "givenname": "User1", "surname": "FSMTest", "roles": "customerA" } } }, { "type": "user", "id": "user2", "attributes": { "contextData": { "givenname": "User2", "surname": "FSMTest", "roles": "customerB" } } } ] }
The following table shows the results of various JSONPath queries given the JSON above:
Description JSONPath Query Extracted Initial Value Static path from the root $.meta.type jsonapi.metadata.document The role of the user whose id equals "user1" $.data[?(@.id == 'user1')].attributes.contextData.roles customer The number of users $.data.length 2 All "givenname" attributesNote:
This query yields multiple results.
The first one is set to the initial value, the rest is discarded. $..givenname User1
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableUiDateConfig
id: ConfigurableUiDateConfig-xxxxxx
displayName:
comment:
properties:
htmlId:
initialValueQuery:
label:
placeholder:
property:
submitToServer: true
validations:
Date User Context Data Item
contextDataName
) required
) validators
)
type: com.airlock.iam.flow.shared.application.configuration.item.DateContextDataItemDefinitionConfig
id: DateContextDataItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
required: true
validators:
Date User Profile Item Config
dateFormat
) minRelative
) The "minimum relative value" is the lower limit (earliest possible) for allowed difference in days to the current date.
Examples: A value of 1 means that tomorrow is the earliest possible day to enter, a value of -365 means that the entered date can be at most one year in the past.
minDate
) The earliest date allowed to be filled in. This cannot be used together with "Minimum Relative" and must be in the same format as specified in "Date Format".
maxRelative
) The "maximum relative value" is the upper limit (last possible) for allowed difference in days to the current date. This cannot be used together with "Max Date".
Examples: A value of 1 means that tomorrow is the latest possible day to enter, a value of -365 means that the entered date has to be at least one year in the past. Use this property to configure a minimal required age.
maxDate
) The latest date allowed to be filled in. This cannot be used together with "Maximum Relative" and it must be in the same format as specified in "Date Format".
dateTransformation
) - DATE: the date value is transformed to a java.util.Date object (date with time, where all time values are set to 0).
Use 'Date And Time Context Data Item Config' for the corresponding context data item in the persister. - LOCAL_DATE: the date value is transformed to a java.time.LocalDate object (date only).
Use 'Local Date Context Data Item Config' for the corresponding context data item in the persister. - STRING: the date value is transformed to a String as defined by "Date Format".
Use 'String Context Data Item Config' for the corresponding context data item in the persister.
stringResourceKey
) propertyName
) optional
) modifiable
) validateOnlyChangedValues
) sortable
)
type: com.airlock.iam.common.application.configuration.userprofile.DateUserProfileItemConfig
id: DateUserProfileItemConfig-xxxxxx
displayName:
comment:
properties:
dateFormat: dd.MM.yyyy
dateTransformation: LOCAL_DATE
maxDate:
maxRelative:
minDate:
minRelative:
modifiable: true
optional: true
propertyName:
sortable: true
stringResourceKey:
validateOnlyChangedValues: true
Date Validator
minRelative
) The "minimum relative value" is the lower limit (earliest possible) for allowed difference in days to the current date.
Examples: A value of 1 means that tomorrow is the earliest possible date to enter, a value of -365 means that the entered date can be at most one year in the past.
minDate
) The earliest date allowed to be filled in. This cannot be used together with "Minimum Relative" and must be in ISO 8601 format.
maxRelative
) The "maximum relative value" is the upper limit (last possible) for allowed difference in days to the current date. This cannot be used together with "Max Date".
Examples: A value of 1 means that tomorrow is the latest possible date to enter, a value of -365 means that the entered date has to be at least one year in the past. Use this property to configure a minimal required age.
maxDate
) The latest date allowed to be filled in. This cannot be used together with "Maximum Relative" and it must be in ISO 8601 format.
type: com.airlock.iam.common.application.configuration.validation.DefaultDateValidatorConfig
id: DefaultDateValidatorConfig-xxxxxx
displayName:
comment:
properties:
maxDate:
maxRelative:
minDate:
minRelative:
Date/Time Input Token Controller Element
label
) property
) The referenced property must be available in the attributes
value of the generic token REST call response. If the property is nested, e.g. inside the contextData
key, it can be referenced with dot notation (see example values).
The ID of the response is referenced by using the reserved value @id
.
placeholder
) required
) dateOnly
) readOnly
) hideIfEmpty
)
type: com.airlock.iam.admin.application.configuration.generic.ui.DateInputTokenControllerUiElementConfig
id: DateInputTokenControllerUiElementConfig-xxxxxx
displayName:
comment:
properties:
dateOnly: false
hideIfEmpty: false
label:
placeholder:
property:
readOnly: false
required: false
Default Account Link Linking Flow
Simple configuration for an account link linking self-service flow.
The following steps are automatically generated:
- An Account Link Linking Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultAccountLinkLinkingFlowConfig
id: DefaultAccountLinkLinkingFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
flowId:
Default Account Link Removal Flow
Simple configuration for an account link removal self-service flow.
The following steps are automatically generated:
- An Account Link Removal Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultAccountLinkDeletionFlowConfig
id: DefaultAccountLinkDeletionFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
flowId:
Default Aggregate Report Strategy
Key | Value |
---|---|
aggr_count | <number of reports> |
aggr_langs | <List of all languages> |
aggr_filenames | <List of all file names> |
<key Param1> | <List of all Param1 values> |
<key Param1>.aggr_first | <Value of this parameter in the first report. > |
<key Param1>.aggr_last | <Value of this parameter in the last report. > |
All parameters passed to the reports are listed as <key Param1>. All the lists are in the same order of reports as they have been genereated (first generated report at position 0).
type: com.airlock.iam.core.misc.util.report.aggregation.DefaultAggregateReportStrategy
id: DefaultAggregateReportStrategy-xxxxxx
displayName:
comment:
properties:
Default Authentication Processor
updateLoginStatistics
)
type: com.airlock.iam.authentication.application.configuration.processor.DefaultAuthenticationProcessorConfig
id: DefaultAuthenticationProcessorConfig-xxxxxx
displayName:
comment:
properties:
updateLoginStatistics: true
Default Authentication Processors Config
This plugin automatically configures a list of essential flow processors, depending on the use case. Note that User Enumeration Protection and Temporary Locking cannot be used at the same time. Either one of two will be used depending on which one is enabled.
The processors are configured in this order:
- CAPTCHA Processor
- User Identification Processor
- Latest Authentication Feedback Processor (only if enabled)
- Default Authentication Processor
- Factor Use Reporting Processor
- Failed Factor Attempts Processor (with strict counting)
- Renew Session ID Processor
- User Validity Processor
- Login History Processor (only if enabled)
- Unlock Attempts Reset Processor
- Device Usage Processor
- Set UI Tenant ID Processor
addLatestAuthenticationFeedback
) The latest authentication information is provided in all flow step results (REST responses) after successfully identifying the user. In addition, the Loginapp UI displays this information on selected second factor pages.
Note: If an authentication flow starts with a user identifying step without verification of an authentication factor (e.g. password, remember-me cookie, SSO ticket, ...) this may lead to unwanted information leakage.
writeLoginHistory
) updateLoginStatistics
)
type: com.airlock.iam.authentication.application.configuration.processor.DefaultAuthenticationProcessorsConfig
id: DefaultAuthenticationProcessorsConfig-xxxxxx
displayName:
comment:
properties:
addLatestAuthenticationFeedback: false
updateLoginStatistics: true
writeLoginHistory: false
Default Authorization Processors
- User Validity Processor
- Factor Use Reporting Processor
type: com.airlock.iam.authentication.application.configuration.processor.DefaultAuthorizationProcessorsConfig
id: DefaultAuthorizationProcessorsConfig-xxxxxx
displayName:
comment:
properties:
Default Cronto Device Removal Flow
Simple configuration for a Cronto device removal self-service flow.
The following steps are automatically generated:
- A Delete Cronto Device Initiation Step.
- An Apply Changes Step
The access condition for the flow is always a Cronto Device Removal Possible.
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) crontoHandler
) allowDeletingLastDevice
) authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultCrontoDeviceDeletionFlowConfig
id: DefaultCrontoDeviceDeletionFlowConfig-xxxxxx
displayName:
comment:
properties:
allowDeletingLastDevice: false
authorizationCondition:
crontoHandler:
flowId:
Default Cronto Device Renaming Flow
Simple configuration for a Cronto device renaming self-service flow.
The following steps are automatically generated:
- A Cronto Device Selection Step.
- A Rename Cronto Device Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) crontoHandler
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultCrontoDeviceRenamingFlowConfig
id: DefaultCrontoDeviceRenamingFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
crontoHandler:
flowId:
Default Cronto Login Message Provider Config
Provides the default Cronto login message.
This plugin configures a Generic Cronto Message Provider for the translation string cronto.login-message with the two value map providers for the user's context-data and user statistics.
crontoHandler
)
type: com.airlock.iam.flow.shared.application.configuration.message.DefaultCrontoLoginMessageProviderConfig
id: DefaultCrontoLoginMessageProviderConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
Default Disable Cronto Device Flow
Simple configuration for a self-service flow to disable a Cronto device.
The following steps are automatically generated:
- A Disable Cronto Device Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) crontoHandler
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultCrontoDeviceDisablingFlowConfig
id: DefaultCrontoDeviceDisablingFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
crontoHandler:
flowId:
Default Disable Cronto Push Flow
Simple configuration for a self-service flow to disable Cronto push notification.
The following steps are automatically generated:
- A Disable Cronto Push Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) crontoHandler
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultCrontoPushDisablingFlowConfig
id: DefaultCrontoPushDisablingFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
crontoHandler:
flowId:
Default Disable FIDO Credential Flow
Simple configuration for a self-service flow to disable a FIDO credential.
The following steps are automatically generated:
- A Disable FIDO Credential Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) fidoSettings
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultFidoCredentialDisablingFlowConfig
id: DefaultFidoCredentialDisablingFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
fidoSettings:
flowId:
Default Enable Cronto Device Flow
Simple configuration for a self-service flow to enable a Cronto device.
The following steps are automatically generated:
- A Enable Cronto Device Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) crontoHandler
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultCrontoDeviceEnablingFlowConfig
id: DefaultCrontoDeviceEnablingFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
crontoHandler:
flowId:
Default Enable Cronto Push Flow
Simple configuration for a self-service flow to enable Cronto push notification.
The following steps are automatically generated:
- A Enable Cronto Push Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) crontoHandler
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultCrontoPushEnablingFlowConfig
id: DefaultCrontoPushEnablingFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
crontoHandler:
flowId:
Default Enable FIDO Credential Flow
Simple configuration for a self-service flow to enable a FIDO credential.
The following steps are automatically generated:
- A Enable FIDO Credential Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) fidoSettings
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultFidoCredentialEnablingFlowConfig
id: DefaultFidoCredentialEnablingFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
fidoSettings:
flowId:
Default End-To-End Encryption Password Repository
passwordDecryption
) internalPasswordRepository
) The password repository that handles the password operations (check/change/set) after decryption.
The Default Password Repository cannot be used in self-registration flows.
type: com.airlock.iam.common.application.configuration.password.repository.DefaultE2eEncryptionPasswordRepositoryConfig
id: DefaultE2eEncryptionPasswordRepositoryConfig-xxxxxx
displayName:
comment:
properties:
internalPasswordRepository:
passwordDecryption:
Default FIDO Credential Display Name Change Flow
Simple configuration for a FIDO credential display name change self-service flow.
The following steps are automatically generated:
- A FIDO Credential Selection Step.
- A FIDO Credential Display Name Change Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) fidoSettings
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultFidoCredentialDisplayNameChangeFlowConfig
id: DefaultFidoCredentialDisplayNameChangeFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
fidoSettings:
flowId:
Default FIDO Credential Removal Flow
Simple configuration for a FIDO credential removal self-service flow.
The following steps are automatically generated:
- A Delete FIDO Credential Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) fidoSettings
) allowDeletingLastCredential
) authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultFidoCredentialDeletionFlowConfig
id: DefaultFidoCredentialDeletionFlowConfig-xxxxxx
displayName:
comment:
properties:
allowDeletingLastCredential: false
authorizationCondition:
fidoSettings:
flowId:
Default mTAN Deletion Flow
Simple configuration for an mTAN number deletion self-service flow.
The following steps are automatically generated:
- A Delete mTAN Number Initiation Step.
- An Apply Changes Step
The access condition for the flow is always an mTAN Number Deletion Possible using the "Allow Deleting Last Number" property.
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) mtanSettings
) allowDeletingLastNumber
) authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultMtanDeletionFlowConfig
id: DefaultMtanDeletionFlowConfig-xxxxxx
displayName:
comment:
properties:
allowDeletingLastNumber: false
authorizationCondition:
flowId:
mtanSettings:
Default mTAN Token Edit Flow
Simple configuration for an mTAN token editing self-service flow.
The following steps are automatically generated:
- A Select mTAN Token Step.
- A mTAN Token Edit Step (step ID "edit-mtan") to edit the mTAN number and optionally also the label.
- A Selection Step with an optional mTAN Verification Step (if the number has been edited)
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
mtanSettings
) labelEditable
) messageProvider
)
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultMtanTokenEditFlowConfig
id: DefaultMtanTokenEditFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
flowId:
labelEditable: true
messageProvider:
mtanSettings:
Default mTAN Token Registration Flow
Simple configuration for an mTAN token registration self-service flow.
The following steps are automatically generated:
- A mTAN Token Registration Step (step ID "register-mtan") to register the mTAN number and optionally also a label.
- An mTAN Verification Step to verify the new number by sending and verifying an OTP
- An Apply Changes Step
The access condition for the flow is always an mTAN Number Registration Possible.
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
mtanSettings
) labelRegistration
) messageProvider
)
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultMtanTokenRegistrationFlowConfig
id: DefaultMtanTokenRegistrationFlowConfig-xxxxxx
displayName:
comment:
properties:
authorizationCondition:
flowId:
labelRegistration: true
messageProvider:
mtanSettings:
Default OAuth 2.0 Consent Deny Flow
Simple configuration for an OAuth 2.0 Consent Deny Self-Service Flow.
The following steps are automatically generated:
- An OAuth 2.0 Consent Deny Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultOAuth2DenyConsentFlowConfig
id: DefaultOAuth2DenyConsentFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
flowId:
Default OAuth 2.0 Consent Grant Flow
Simple configuration for an OAuth 2.0 Consent Grant Self-Service Flow.
The following steps are automatically generated:
- An OAuth 2.0 Consent Grant Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultOAuth2GrantConsentFlowConfig
id: DefaultOAuth2GrantConsentFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
flowId:
Default OAuth 2.0 Consents Delete Flow
Simple configuration for an OAuth 2.0 Consents Delete Self-Service Flow.
The following steps are automatically generated:
- An OAuth 2.0 Consents Delete Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultOAuth2DeleteConsentsFlowConfig
id: DefaultOAuth2DeleteConsentsFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
flowId:
Default OAuth 2.0 Session Deletion Flow
Simple configuration for an OAuth 2.0 session deletion self-service flow.
The following steps are automatically generated:
- An Delete OAuth 2.0 Session Initiation Step.
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultOAuth2DeleteSessionFlowConfig
id: DefaultOAuth2DeleteSessionFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
flowId:
Default Password Repository
allowedPasswordValidityDuration
) If a password is changed, the 'latest password change timestamp' is set and, if this property is defined, the 'next enforced password change timestamp' is updated.
If this property is not defined, the 'next enforced password change timestamp' is not updated.
hashFunction
) Note that the password hash function may or may not support password history checks. If the configured password hash function does not support password history checks but a policy checker requires this capability, an exception is thrown when trying to change a password.
NOTE: Some password hashes, such as SHA 256 Password Hash or Scrypt Password Hash, produce binary output. If one of these is used, make sure the persistence layer supports binary data in the hash field and the corresponding persistence plugins (e.g. Database User Store or Ldap Connector) are configured to treat hash values as binary values.
In case the persistence layer expects a string, encode the password hash by wrapping it with an encoder. To achieve this, use the Password Hash Configuration plugin and specify the hash function (such as Scrypt Password Hash) together with the desired encoder. We recommend using the Base64 Password Hash Encoder.
legacyHashFunctions
) If the password cannot be verified using the main "Hash Function" above, all hashes in this list are tried as well. If any hash of this list matches, the password is stored using the current main hash function (see property "Hash Function"). In this case, a potential password history is lost.
This feature allows changing the password hash function with automatic migration of all users that log in.
Notice that having a legacy hash function in this list producing the same output length as the main hash function can pose a security risk since it might be possible for an attacker to provoke a match using a weaker hash method.
useLatin1Encoding
) If enabled, passwords containing special characters stored by IAM earlier than 6.3 are still accepted. This option does not have to be activated if all passwords were set using IAM 6.3 or later or if all passwords were set via webservices or REST.
To support legacy passwords, those with special characters are additionally checked using their legacy encoding in latin1 and if matching, they are rehashed and stored using the current hash function. In this case, a potential password history is lost.
type: com.airlock.iam.authentication.application.configuration.password.repository.InMemoryPasswordRepositoryConfig
id: InMemoryPasswordRepositoryConfig-xxxxxx
displayName:
comment:
properties:
allowedPasswordValidityDuration:
hashFunction:
legacyHashFunctions:
useLatin1Encoding: false
Default Password Reset Restrictions
Default restrictions for password reset flows. Currently, they are (in this order):
- Nonexistent User Restriction
- Invalid User Restriction
- Locked User Restriction
By default, these restrictions do not report violations and therefore prevent user enumeration. To include custom restrictions or to configure restrictions for other types of self-service flows, the "Custom Public Self-Service Restrictions" plugin can be used.
allowLockedUser
) If enabled, users that are locked because of too many failed password checks (lock reason "LockReason.TooManyAuthAtts.PASSWORD") are allowed to perform a password reset flow. Locked users with any other lock reason cannot reset their password. To allow other lock reasons, use the "Locked User Restriction" plugin with "Custom Public Self-Service Restrictions".
nonexistentUserFeedback
) If enabled, nonexistent users attempting to start a password reset flow receive an error response with error code "USER_NOT_FOUND". Otherwise, the flow would also continue for nonexistent users but fail in the verification step (to protect against user enumeration).
Security consideration: Enabling feedback on restriction violations can increase usability but it weakens or disables the user enumeration protection.
invalidUserFeedback
) If enabled, invalid users attempting to start a password reset flow receive an error response with error code "USER_INVALID". Otherwise, the flow would also continue for invalid users, but fail in the verification step (to protect against user enumeration).
Security consideration: Enabling feedback on restriction violations can increase usability but it weakens or disables the user enumeration protection.
lockedUserFeedback
) If enabled, locked users attempting to start a password reset flow receive an error response with error code "USER_LOCKED". Otherwise, the flow would also continue for locked users but fail in the verification step (to protect against user enumeration).
Security consideration: Enabling feedback on restriction violations can increase usability but it weakens or disables the user enumeration protection.
type: com.airlock.iam.publicselfservice.application.configuration.restrictions.DefaultPasswordResetRestrictionsConfig
id: DefaultPasswordResetRestrictionsConfig-xxxxxx
displayName:
comment:
properties:
allowLockedUser: false
invalidUserFeedback: false
lockedUserFeedback: false
nonexistentUserFeedback: false
Default Persistency-less Authentication Processors
This plugin automatically configures a list of essential flow processors for a persistency-less authentication flow. The processors are configured in this order:
- User Identification Processor
- Default Authentication Processor
- Factor Use Reporting Processor
- Renew Session ID Processor
- User Validity Processor
- Set UI Tenant ID Processor
type: com.airlock.iam.authentication.application.configuration.processor.DefaultPersistencyLessAuthenticationProcessorsConfig
id: DefaultPersistencyLessAuthenticationProcessorsConfig-xxxxxx
displayName:
comment:
properties:
Default Persistency-less Protected Self-Service Processors
This plugin automatically configures a list of essential flow processors for a persistency-less self-service flow. The processors are configured in this order:
- Factor Use Reporting Processor
- User Validity Processor
- Renew Session ID Processor
- Set UI Tenant ID Processor
type: com.airlock.iam.selfservice.application.configuration.processor.DefaultPersistencyLessSelfServiceProcessorsConfig
id: DefaultPersistencyLessSelfServiceProcessorsConfig-xxxxxx
displayName:
comment:
properties:
Default Protected Self-Service Processors
The processors are configured in this order:
- Factor Use Reporting Processor
- Failed Factor Attempts Processor (with lenient counting)
- User Validity Processor
- Renew Session ID Processor
- Device Usage Processor
- Set UI Tenant ID Processor
type: com.airlock.iam.selfservice.application.configuration.processor.DefaultSelfServiceProcessorsConfig
id: DefaultSelfServiceProcessorsConfig-xxxxxx
displayName:
comment:
properties:
Default Public Self-Service Processors
The processors are configured in this order:
- CAPTCHA Processor
- User Identification Processor
- Factor Use Reporting Processor
- Failed Factor Attempts Processor (with lenient counting)
- Public Self-Service Allowed Processor
- Renew Session ID Processor
- Device Usage Processor
- Set UI Tenant ID Processor
To use custom processors or flows where these processors are not appropriate, use the "Custom Flow Processors".
type: com.airlock.iam.publicselfservice.application.configuration.processors.DefaultPublicSelfServiceProcessorsConfig
id: DefaultPublicSelfServiceProcessorsConfig-xxxxxx
displayName:
comment:
properties:
Default Remember-Me Device Deletion Flow
Simple configuration for a Remember-Me device deletion self-service flow.
The following steps are automatically generated:
- A Delete Remember-Me Device Initiation Step
- An Apply Remember-Me Device Deletion
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) rememberMeConfig
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) Precondition that must be fulfilled for the user to be authorized to access this flow without further authentication.
Note the difference to the "Access Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultRememberMeDeviceDeletionFlowConfig
id: DefaultRememberMeDeviceDeletionFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
flowId:
rememberMeConfig:
Default Self-Unlock Restrictions
Default restrictions for self-unlock flows. Currently, they are (in this order):
- Nonexistent User Restriction
- Invalid User Restriction
- Locked User Restriction (only users with one of the configured "Allowed Lock Reasons" are allowed to perform self-unlock. Users that are not locked may still perform a self-unlock flow.)
- Too Many Unlocks Restriction
By default, these restrictions do not report violations and therefore prevent user enumeration. To include custom restrictions or to configure restrictions for other types of self-service flows, the "Custom Public Self-Service Restrictions" plugin can be used.
nonexistentUserFeedback
) If enabled, nonexistent users attempting to start a self-unlock flow receive an error response with error code "USER_NOT_FOUND". Otherwise, the flow would also continue for nonexistent users but fail in the verification step (to protect against user enumeration).
Security consideration: Enabling feedback on restriction violations can increase usability but it weakens or disables the user enumeration protection.
invalidUserFeedback
) If enabled, invalid users attempting to start a self-unlock flow receive an error response with error code "USER_INVALID". Otherwise, the flow would also continue for invalid users, but fail in the verification step (to protect against user enumeration).
Security consideration: Enabling feedback on restriction violations can increase usability but it weakens or disables the user enumeration protection.
lockedUserFeedback
) If enabled, locked users attempting to start a self-unlock flow receive an error response with error code "USER_LOCKED". Otherwise, the flow would also continue for locked users but fail in the verification step (to protect against user enumeration).
Security consideration: Enabling feedback on restriction violations can increase usability but it weakens or disables the user enumeration protection.
tooManyUnlockFeedback
) If enabled and the 'Public Self-Service Flow Settings' configuration has a 'Max Number of Unlocks' limit configured, locked users with more unlock attempts attempting to start a self-unlock flow receive an error response with error code "TOO_MANY_UNLOCKS". Otherwise, the flow would also continue for locked users but fail in the verification step (to protect against user enumeration).
Security consideration: Enabling feedback on restriction violations can increase usability but it weakens or disables the user enumeration protection.
allowedLockReasons
) List of lock reasons that still allow the user to perform the self-unlock. Locked users with any lock reason not listed here will be rejected.
Note that a user is not automatically unlocked after a successful public self-service. A "Unlock User Step (Public Self-Service)" step has to be configured to perform this task.
type: com.airlock.iam.publicselfservice.application.configuration.restrictions.DefaultSelfUnlockRestrictionsConfig
id: DefaultSelfUnlockRestrictionsConfig-xxxxxx
displayName:
comment:
properties:
allowedLockReasons: [LockReason.TooManyAuthAtts.PASSWORD]
invalidUserFeedback: false
lockedUserFeedback: false
nonexistentUserFeedback: false
tooManyUnlockFeedback: false
Default TAN Service
This plugin provides TAN service functionality for TAN list and matrix card authentication.
tokenListPersister
) tokenAlphabet
) tokenLength
) tokensPerList
) reuseChallengeTokens
) false
a single token will never be re-challenged. As a result, the space of remaining tokens will decrease with each successful challenge response. indexPositionsPerChallenge
) hashFunction
) IdentityPasswordHash
plugin) results potential security vulnerability in that the token lists may easily be reconstructed from the stored hash values. lowOnTokensThreshold
) eventSourceName
) eventNotificator
) low-on-tokens-threshold
). The event notificator can then handle the event by (for example) sending an email to somebody or starting some asynchronous processing.Leaving this property unset results in no notification events to be generated.
activateNewListWithFirstUsage
) If this property is set to
TRUE
and there are both an active and a new list, the new list can be activated any time by using it. If the property is FALSE
(default), the new list is only activated after the active list has expired or the all the tokens have been used. maxListValidity
) If the value -1 is used, the token list does not expire.
ignoreTokenCase
) true
the case of characters is ignored when checking tokens. maxTokenLength
) ignoreTokenCase
is set to true, all combinations of lowercase and uppercase characters are generated and checked against the stored hash value of the token. If a user enters a token that is very long, the generation of all combinations takes a significant amount of time. To prevent the system from being slowed down because of the generation, this property has to be configured if the property ignoreTokenCase
is set to true.
type: com.airlock.iam.core.misc.impl.tanserver.DefaultTanService
id: DefaultTanService-xxxxxx
displayName:
comment:
properties:
activateNewListWithFirstUsage: false
eventNotificator:
eventSourceName:
hashFunction:
ignoreTokenCase: false
indexPositionsPerChallenge:
lowOnTokensThreshold:
maxListValidity: -1
maxTokenLength: 10
reuseChallengeTokens: true
tokenAlphabet:
tokenLength:
tokenListPersister:
tokensPerList:
Default Technical Client Registration Processors
type: com.airlock.iam.techclientreg.application.configuration.processor.DefaultTechClientRegProcessorsConfig
id: DefaultTechClientRegProcessorsConfig-xxxxxx
displayName:
comment:
properties:
Default Token Data Provider
Default implementation of a TokenDataProvider.
tokenPersister
)
type: com.airlock.iam.core.misc.impl.persistency.token.DefaultTokenDataProvider
id: DefaultTokenDataProvider-xxxxxx
displayName:
comment:
properties:
tokenPersister:
Default Transaction Approval Flow Processor
type: com.airlock.iam.transactionapproval.application.configuration.flow.DefaultTransactionApprovalFlowProcessorConfig
id: DefaultTransactionApprovalFlowProcessorConfig-xxxxxx
displayName:
comment:
properties:
Default Transaction Approval Processors Config
This plugin automatically configures a list of essential flow processors, depending on the use case. Note that User Enumeration Protection and Temporary Locking cannot be used at the same time. Either one of two will be used depending on which one is enabled.
The processors are configured in this order:
- User Identification Processor
- Default Transaction Approval Flow Processor
- Factor Use Reporting Processor
- Failed Factor Attempts Processor (with strict counting)
- Renew Session ID Processor
- User Validity Processor
- Unlock Attempts Reset Processor
- Device Usage Processor
type: com.airlock.iam.transactionapproval.application.configuration.flow.DefaultTransactionApprovalProcessorsConfig
id: DefaultTransactionApprovalProcessorsConfig-xxxxxx
displayName:
comment:
properties:
Default User Self-Registration Processors
- CAPTCHA Processor
- User Self-Registration Logging Processor
- Renew Session ID Processor
- Set UI Tenant ID Processor
type: com.airlock.iam.userselfreg.application.configuration.processor.DefaultUserSelfRegProcessorsConfig
id: DefaultUserSelfRegProcessorsConfig-xxxxxx
displayName:
comment:
properties:
Default X509 Factory Implementation
gracePeriodInM
)
type: com.airlock.iam.core.misc.impl.cert.crl.X509FactoryConfig
id: X509FactoryConfig-xxxxxx
displayName:
comment:
properties:
gracePeriodInM: 10
Delete Cronto Device Initiation Step
crontoHandler
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.CrontoDeviceDeletionInitiationStepConfig
id: CrontoDeviceDeletionInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Delete FIDO Credential Initiation Step
fidoSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.FidoCredentialDeletionInitiationStepConfig
id: FidoCredentialDeletionInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fidoSettings:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Delete mTAN Number Initiation Step
mtanSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.MtanNumberDeletionInitiationStepConfig
id: MtanNumberDeletionInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
mtanSettings:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Delete OAuth 2.0 Session Initiation Step
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.OAuth2DeleteSessionInitiationStepConfig
id: OAuth2DeleteSessionInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Delete Remember-Me Device Initiation Step
rememberMeConfig
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.RememberMeDeviceDeletionInitiationStepConfig
id: RememberMeDeviceDeletionInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
rememberMeConfig:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Delete Roles
patterns
)
type: com.airlock.iam.common.application.configuration.role.DeleteRoleTransformationConfig
id: DeleteRoleTransformationConfig-xxxxxx
displayName:
comment:
properties:
patterns:
Delete Users Task
It is up to the configured user persister to decide whether the deleted users are effectively deleted from the persistent store, or only marked as deleted.
Note that this task iterates over all users and fetches them one-by-one from the persistent store. In order to avoid performance issues, consider to configure the underlying user iterator with a restriction that matches the delete condition, e.g. by using an 'Additional Iterator Where Clause' when using a database user persister.
userPersister
) userIterator
) Usually this is the same as the user persister.
deleteCondition
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.user.DeleteUsersTask
id: DeleteUsersTask-xxxxxx
displayName:
comment:
properties:
deleteCondition:
userIterator:
userPersister:
Demo Service Config
There are no configuration properties.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.DemoServiceConfig
id: DemoServiceConfig-xxxxxx
displayName:
comment:
properties:
Denying Adminapp REST API Configuration
type: com.airlock.iam.admin.application.configuration.DenyingAdminappRestConfig
id: DenyingAdminappRestConfig-xxxxxx
displayName:
comment:
properties:
Denying Authenticator
There are no configuration properties.
The plugin writes the canonical class name description of this plugin to the context data container. The class name is stored under the key authPluginClassName
. A short description of this authentication method is stored under the key authMethodShortDesc
. This information may be used by callers.
type: com.airlock.iam.core.misc.impl.authen.DenyingAuthenticator
id: DenyingAuthenticator-xxxxxx
displayName:
comment:
properties:
Denying Request Authentication
type: com.airlock.iam.common.application.configuration.credential.DenyingRequestAuthenticationConfig
id: DenyingRequestAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
Destroy Last User Session
Destroys currently active user sessions when the user is locked by an admin in the Adminapp.
Note: This only works if the Adminapp is deployed behind the same Airlock Gateway (WAF) as the Loginapp.
userPersister
) Used to read and terminate the GSID (global session id) information of the locked user.
Make sure that the selected user persister is configured for persisting the GSID.
type: com.airlock.iam.admin.application.configuration.locking.DestroyLastUserSession
id: DestroyLastUserSession-xxxxxx
displayName:
comment:
properties:
userPersister:
Destroy Multiple Existing Sessions Config
loginSessionContextDataKeys
) loginDateContextDataKeys
) logoutSessionContextDataKeys
) logoutDateContextDataKeys
)
type: com.airlock.iam.login.application.configuration.existingsessionbehavior.DestroyMultipleExistingSessionsConfig
id: DestroyMultipleExistingSessionsConfig-xxxxxx
displayName:
comment:
properties:
loginDateContextDataKeys:
loginSessionContextDataKeys:
logoutDateContextDataKeys:
logoutSessionContextDataKeys:
Destroy Other User Session
type: com.airlock.iam.login.application.configuration.existingsessionbehavior.DestroyOtherUserSessionConfig
id: DestroyOtherUserSessionConfig-xxxxxx
displayName:
comment:
properties:
Device Token Authentication Step
deviceTokenSettings
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.devicetoken.DeviceTokenAuthStepConfig
id: DeviceTokenAuthStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: DEVICE_TOKEN
customFailureResponseAttributes:
customResponseAttributes:
deviceTokenSettings:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Device Token Deleted
Event that is triggered by the deletion of a device token.
Note that when configuring this event within an event subscriber, the loginapp user store will not be used to provide context data values. Instead, the user store configured within the loginapp request authentication is used.
type: com.airlock.iam.common.application.configuration.event.DeviceTokenDeletedSubscribedEventConfig
id: DeviceTokenDeletedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Device Token Identity Verification Step Config
deviceTokenSettings
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.DeviceTokenIdentityVerificationStepConfig
id: DeviceTokenIdentityVerificationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: DEVICE_TOKEN
customFailureResponseAttributes:
customResponseAttributes:
deviceTokenSettings:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Device Token List
deviceTokenSettings
) accessCondition
) Precondition that must be fulfilled for a user to access the device token list.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.token.DeviceTokenListSelfServiceRestConfig
id: DeviceTokenListSelfServiceRestConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
deviceTokenSettings:
Device Token Management UI
Allows an authenticated user to list his registered device tokens. Only enabled and valid device tokens are shown.
The device token management interface is accessible at /<loginapp-uri>/ui/app/protected/tokens/device-token after user authentication.
pageExitTarget
) If configured, an additional button is displayed on the device token management to exit the page. On click, this button redirects the user to the configured target.
To redirect to a target application, redirect to the corresponding "Authentication Flow". If the flow can be skipped due to the obtained tags, the user is directly forwarded to the target application.
type: com.airlock.iam.selfservice.application.configuration.ui.tokens.DeviceTokenManagementUiConfig
id: DeviceTokenManagementUiConfig-xxxxxx
displayName:
comment:
properties:
pageExitTarget:
Device Token Management UI Redirect
type: com.airlock.iam.selfservice.application.configuration.ui.tokens.DeviceTokenManagementFlowRedirectTargetConfig
id: DeviceTokenManagementFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
Device Token Registered
Event that is triggered by the registration of a device token.
Note that when configuring this event within an event subscriber, the loginapp user store will not be used to provide context data values. Instead, the user store configured within the loginapp request authentication is used.
type: com.airlock.iam.login.application.configuration.event.DeviceTokenRegisteredSubscribedEventConfig
id: DeviceTokenRegisteredSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Device Token Registration Step
Flow step for registering a device token. Only available via REST calls.
Note that for the changes made in this step to take effect, an "Apply Changes Step" with an "Apply Device Token Registration" handler must be configured after it in the same flow. If missing, the device token registration is lost.
Security note: For authentication and self-service flows this step should be restricted to strongly authenticated users. To do so a 'Pre Condition' under 'Tags/Guards' must be set to ensure that the user is authenticated.
deviceTokenSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.step.devicetoken.DeviceTokenRegistrationStepConfig
id: DeviceTokenRegistrationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
deviceTokenSettings:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Device Token Settings
Configures device token registration and authentication
Allows devices (e.g. mobile apps on smart phones) to register a public key (after successful authentication) and use the key for later authentication.
For example, this can be used as follows: when logging in for the first time using the mobile app, the user authenticates using the password and a second factor. After this initial login, the mobile app registers its public key and obtains a device token. For later logins, the user authenticates using password only. The second factor can be omitted as long as the app has the device token.
tokenDataProvider
) allowedSignatureAlgorithms
) tokenValidityDays
) The validity period of a "binding", i.e. the amount of time a registered key is accepted for authentication after it has been registered. Afterwards, a registered key is no more accepted for authentication and a new key must be registered.
The validity is only relevant when the device token is registered. When using a device token, the expiry date that was computed at registration time is relevant.
type: com.airlock.iam.flow.shared.application.configuration.devicetoken.DeviceTokenSettings
id: DeviceTokenSettings-xxxxxx
displayName:
comment:
properties:
allowedSignatureAlgorithms: [ES256, ES256K, ES384, ES512]
tokenDataProvider:
tokenValidityDays: 30
Device Usage Database Repository
sqlDataSource
) logQueries
) If enabled, all SQL queries executed on this repository will be written to the module's corresponding log file. This is only effective if the log level is set to at least INFO.
Warning: query values (including potentially sensitive data) will be logged as well.
tenantId
) Identity added to the database records to distinguish between different tenants. Only logs that match the tenant ID specified here will be retrieved on query.
If left empty, 'no_tenant' is used as the effective value for tenant ID.
type: com.airlock.iam.common.application.configuration.device.DeviceUsageRepositoryConfig
id: DeviceUsageRepositoryConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sqlDataSource:
tenantId:
Device Usage Processor
On successfully completed flows, the processor persists the device usages that were reported by the steps.
Currently only the following steps report device usages
- Airlock 2FA Public Self-Service Approval Step
- Airlock 2FA Self-Service Approval Step
- Airlock 2FA Mobile Only Authentication Step
- Airlock 2FA Step for Authentication
- Airlock 2FA Transaction Approval Step
If the "Device Usage Repository" in the application (Loginapp/Transaction Approval) is not configured, the device usages will not be persisted.
type: com.airlock.iam.authentication.application.configuration.processor.DeviceUsageProcessorConfig
id: DeviceUsageProcessorConfig-xxxxxx
displayName:
comment:
properties:
Device Was Registered In Current Flow Condition
type: com.airlock.iam.airlock2fa.application.configuration.provider.predicate.Airlock2FADeviceRegisteredInFlowPredicateConfig
id: Airlock2FADeviceRegisteredInFlowPredicateConfig-xxxxxx
displayName:
comment:
properties:
Device Was Used For Login Condition
In case Airlock 2FA was not used for login, the condition is false for every device.
Note:This predicate should only be used in authentication and protected self-service flows since the other flows do not contain information on the last device used for login.
type: com.airlock.iam.airlock2fa.application.configuration.provider.predicate.Airlock2FADeviceUsedForLoginPredicateConfig
id: Airlock2FADeviceUsedForLoginPredicateConfig-xxxxxx
displayName:
comment:
properties:
Digipass Push App Handler
pushNotificationSender
) transactionDataSigningNotificationActionId
)
type: com.airlock.iam.core.misc.impl.cronto.pushnotification.DigipassPushAppHandler
id: DigipassPushAppHandler-xxxxxx
displayName:
comment:
properties:
pushNotificationSender:
transactionDataSigningNotificationActionId: airlockIamPushTransaction
Disable Cronto Device Initiation Step
crontoHandler
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.CrontoDeviceDisablingInitiationStepConfig
id: CrontoDeviceDisablingInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Disable Cronto Push Initiation Step
crontoHandler
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.CrontoPushDisablingInitiationStepConfig
id: CrontoPushDisablingInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Disable FIDO Credential Initiation Step
fidoSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.FidoCredentialDisablingInitiationStepConfig
id: FidoCredentialDisablingInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fidoSettings:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Disabled Or Missing Secret Questions Restriction Config
Does not allow users that cannot use secret questions to perform a public self-service and returns a corresponding feedback message. A user must have enough secret questions provisioned and they must be active for this user.
For public self-service flows using secret question identity verification, the purpose of this restriction is only to add an informative feedback message. This increases usability but could allow user enumeration since it makes it possible to find existing users without secret questions.
We recommend to configure this restriction as the last restriction to be checked.
secretQuestionsSettings
)
type: com.airlock.iam.publicselfservice.application.configuration.restrictions.DisabledOrMissingSecretQuestionsRestrictionConfig
id: DisabledOrMissingSecretQuestionsRestrictionConfig-xxxxxx
displayName:
comment:
properties:
secretQuestionsSettings:
Disclaimer Text Config
language
) text
)
type: com.airlock.iam.common.application.configuration.termsofservice.DisclaimerTextConfig
id: DisclaimerTextConfig-xxxxxx
displayName:
comment:
properties:
language:
text:
Display Language SAML 2.0 Attribute
samlAttributeName
) nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.DisplayLanguageAttributeConfig
id: DisplayLanguageAttributeConfig-xxxxxx
displayName:
comment:
properties:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
samlAttributeName:
Display Language String Provider Config
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.DisplayLanguageStringProviderConfig
id: DisplayLanguageStringProviderConfig-xxxxxx
displayName:
comment:
properties:
Distributed Claim Config
Distributed Claims provide a way to include static references to claims held by 3rd party claims providers.
The client may then fetch those claims using the given URL from the claims providers.
Supplying an 'access_token' is currently not supported.
claimNames
) The claim name(s) to be obtained using the distributed claim.
These names will be used in the _claim_names object to reference this distributed claim.
endpointUrl
) The resource endpoint from which the associated Claim can be retrieved. The endpoint MUST return the Claim as a JWT.
type: com.airlock.iam.oauth2.application.configuration.claims.DistributedClaimConfig
id: DistributedClaimConfig-xxxxxx
displayName:
comment:
properties:
claimNames:
endpointUrl:
Do Nothing Obtainer
type: com.airlock.iam.core.misc.impl.cert.crl.DoNothingObtainer
id: DoNothingObtainer-xxxxxx
displayName:
comment:
properties:
DOCX Save Option
fileNameExtension
) fontsPath
) The absolute or relative path containing all TrueType fonts required for the conversion.
This is mandatory on unix-like operating systems and optional on Windows where the installed Windows fonts will always be included automatically.
1. Font Substitution: When rendering or converting a document, IAM may encounter fonts that are not available on the system where the operation is being performed. By defining font sources, you provide IAM with a list of locations to search for required fonts. This enables IAM to automatically substitute missing fonts with available alternatives from the defined font sources.
2. Consistent Rendering: Defining font sources allows you to ensure consistent font rendering across different systems. By specifying the exact font sources to be used, you can guarantee that the same fonts will be available and utilized, regardless of the system where the document is processed. This can be crucial for maintaining consistent visual appearance, especially when sharing documents across different environments.
In order to reflect changes from the file system, reactivating the IAM configuration is required.
type: com.airlock.iam.core.misc.renderer.saveaction.DocxSaveActionConfig
id: DocxSaveActionConfig-xxxxxx
displayName:
comment:
properties:
fileNameExtension: .docx
fontsPath:
Drop-Down UI Element
label
) property
) required
) options
) htmlId
) submitToServer
) initialValueQuery
) See the JSONPath documentation for the full documentation: https://github.com/dchester/jsonpath
Examples:Assume the initial REST call returns the following JSON response:
{ "meta": { "type": "jsonapi.metadata.document", "timestamp": "2023-03-10T13:06:01.294+02:00" }, "data": [ { "type": "user", "id": "user1", "attributes": { "contextData": { "givenname": "User1", "surname": "FSMTest", "roles": "customerA" } } }, { "type": "user", "id": "user2", "attributes": { "contextData": { "givenname": "User2", "surname": "FSMTest", "roles": "customerB" } } } ] }
The following table shows the results of various JSONPath queries given the JSON above:
Description JSONPath Query Extracted Initial Value Static path from the root $.meta.type jsonapi.metadata.document The role of the user whose id equals "user1" $.data[?(@.id == 'user1')].attributes.contextData.roles customer The number of users $.data.length 2 All "givenname" attributesNote:
This query yields multiple results.
The first one is set to the initial value, the rest is discarded. $..givenname User1
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableUiDropDownConfig
id: ConfigurableUiDropDownConfig-xxxxxx
displayName:
comment:
properties:
htmlId:
initialValueQuery:
label:
options:
property:
required:
submitToServer: true
Dummy Certificate Status Checker
type: com.airlock.iam.core.misc.impl.cert.dummy.DummyCertificateStatusChecker
id: DummyCertificateStatusChecker-xxxxxx
displayName:
comment:
properties:
Dummy Credential Persister
Getting a Credential (getCredentialByName
):
- If the username contains the string "notfound" a NotFoundException is thrown.
- If the username contains the string "ambig" a NotUniqueException is thrown.
- If the username contains the string "except" a PersisterException is thrown.
- If the username contains the string "inactive" an inactive credential is returned.
- If the username contains the string "order" a credential with the order flag set is returned.
- If the username contains the string "binary" a binary type credential is returned. The binary data is the binary representation of the username.
- If the username does not contain the string "binary" a string type credential is returned. The credential data is the username.
Updating a Credential (makeCredentialPersistent
):
- If the username contains the string "notfound" a NotFoundException is thrown.
- If the username contains the string "ambig" a NotUniqueException is thrown.
- If the username contains the string "except" a PersisterException is thrown.
- For all other usernames, the call returns normally.
Getting all User-IDs (getAllUserIds
):
- Returns a list with 100 random user ids.
Getting matching User-IDs (getMatchingUserIds
):
- If the value to match contains the string "empty" an empty list is returned.
- If the value to match contains the string "big" a list with 10'000 random user ids is returned.
- If the value to match contains the string "except" a PersisterException is thrown.
- For all values to match, a list with 100 random user ids is returned.
type: com.airlock.iam.core.misc.impl.persistency.DummyCredentialPersister
id: DummyCredentialPersister-xxxxxx
displayName:
comment:
properties:
Dummy Cronto Push Notification Sender
simulateFailure
)
type: com.airlock.iam.core.misc.impl.cronto.pushnotification.DummyCrontoPushNotificationSender
id: DummyCrontoPushNotificationSender-xxxxxx
displayName:
comment:
properties:
simulateFailure: false
Dummy Email Service
type: com.airlock.iam.core.misc.impl.email.DummyEmailService
id: DummyEmailService-xxxxxx
displayName:
comment:
properties:
Dummy Extended User Persister
Getting a User (getPersistentUserByName
):
- If the username contains the string "notfound" a NotFoundException is thrown.
- If the username contains the string "ambig" a NotUniqueException is thrown.
- If the username contains the string "except" a PersisterException is thrown.
- If the username contains the string "nobody" a user with no roles is returned.
- If the username contains the string "locked" a locked user is returned. Locked date and reason are set.
- If the username contains the string "pwch" the password change enforced flag is set for the returned user.
- If the username contains the string "pworder" the password order flag is set for the returned user.
- If the username contains the string "manyfailed" the user is not locked but has 10 failed logins.
- For all other user names, a user bean with the specified username and fixed other data is returned. The roles of the user are configurable.
Updating a User (makeUserPersistent
):
- If the username contains the string "notfound" a NotFoundException is thrown.
- If the username contains the string "ambig" a NotUniqueException is thrown.
- If the username contains the string "except" a PersisterException is thrown.
- For all other usernames, the call returns normally.
Inserting a User (insertUser
):
- If the username of the inserted user contains the string "ambig" a NotUniqueException is thrown.
- If the username of the inserted user contains the string "except" a PersisterException is thrown.
- For all other usernames, the call returns normally.
Deleting a User (deleteUser
):
- If the username contains the string "notfound" a NotFoundException is thrown.
- If the username contains the string "ambig" a NotUniqueException is thrown.
- If the username contains the string "except" a PersisterException is thrown.
- For all other usernames, the call returns normally.
Getting all User-IDs (getAllUserIds
):
- Returns a list with 100 random user ids.
Getting matching User-IDs (getMatchingUserIds
):
- If the value to match contains the string "empty" an empty list is returned.
- If the value to match contains the string "big" a list with 10'000 random user ids is returned.
- If the value to match contains the string "except" a PersisterException is thrown.
- For all values to match, a list with 100 random user ids is returned.
The method changeUsername(String oldUsername, String newUsername)
is not implemented and will throw a NotImplementedException
.
userRoles
) The roles must be specified as comma-separated list.
type: com.airlock.iam.core.misc.impl.persistency.DummyExtendedUserPersister
id: DummyExtendedUserPersister-xxxxxx
displayName:
comment:
properties:
userRoles: [role1, role2]
Dummy IAK Verifier
- Users with a name containing "noiak" will have no IAK (case-insensitive)
- Accepts all IAKs that contain the string "ok" (case-insensitive)
- Throws an exception for all IAKs that contain the string "exc" (case-insensitive)
- Rejects all other IAKs.
This plugin has no configuration properties.
type: com.airlock.iam.core.misc.impl.authen.DummyIakVerifier
id: DummyIakVerifier-xxxxxx
displayName:
comment:
properties:
Dummy Maintenance Message Persister
-
getMaintenanceMessage(Date date)
: returns a dummy message containing de/fr/en translations. This works for every location.
-
getAllMaintenanceMessages(int maxMessages)
: returnsmaxMessages
random messages with the location null. -
getMaintenanceMessageByName(String name)
: passing "nf" leads to aNotFoundException
, "nu" leads to aNotUniqueException
, all other names will return a random message with the given name. -
insertMaintenanceMessage(MaintenanceMessage message)
: Inserting a message with name "nu" leads to aNotUniqueException
, all other names are accepted. -
updateMaintenanceMessage(MaintenanceMessage message)
: Updating a message with name "nf" leads to aNotFoundException
, "nu" leads to aNotUniqueException
, all other names are accepted. -
deleteMaintenanceMessage(MaintenanceMessage message)
: Deleting a message with name "nf" leads to aNotFoundException
, "nu" leads to aNotUniqueException
, all other names are accepted.
type: com.airlock.iam.core.misc.impl.sysmessage.DummyMaintenanceMessagePersister
id: DummyMaintenanceMessagePersister-xxxxxx
displayName:
comment:
properties:
Dummy Matrix Authenticator
Expects a credential of type
Usernames and responses other than the challenge (just concatenate the coordinate pairs; no spaces) are processed as follows:
- User "unknown" is unknown.
- User "ambiguous" is abiguous
- User "locked" is a locked user
- User "invalid" is an invalid user
- User "unspec" results in an unspecified authentication failure
- The request will result in an
AuthenticatorException if any response contains "except". - The request will be accepted if any response contains "accept".
- All other responses are not accepted.
If the authentication succeeds, the roles "role1" and "role2" are granted to the user.
There are no configuration properties.
The plugin writes the canonical class name description of this plugin to the context data container. The class name is stored under the key authPluginClassName
. A short description of this authentication method is stored under the key authMethodShortDesc
. This information may be used by callers.
type: com.airlock.iam.core.misc.impl.authen.DummyMatrixAuthenticator
id: DummyMatrixAuthenticator-xxxxxx
displayName:
comment:
properties:
Dummy Password Renderer
type: com.airlock.iam.core.misc.util.password.generator.DummyPasswordRenderer
id: DummyPasswordRenderer-xxxxxx
displayName:
comment:
properties:
Dummy Password Service
Using checkPassword(...)
- All passwords containing the string "wrong" will be rejected.
- All passwords containing the string "change" will be accepted but lead to a forced password change.
- All passwords containing the string "expired" will be accepted but lead to a forced password change because the password has expired.
- All passwords containing the string "exception" will lead to an exception.
- All other passwords are accepted.
Using changePassword(...)
- All old passwords containing the string "wrong" will be rejected. The number of retries is 3.
- All old passwords containing the string "toomany" will be rejected and the number of retries is zero.
- All old passwords containing the string "exception" will lead to an exception.
- All other old passwords are accepted.
- All new passwords containing the string "short" will be rejected because it is too short.
- All new passwords containing the string "long" will be rejected because it is too long.
- All new passwords containing the string "hist" will be rejected with a history match.
- All new passwords containing the string "req" will be rejected because required characters are missing.
- All new passwords containing the string "forb" will be rejected because it contains forbidden characters.
- All new passwords containing the string "black" will be rejected because matches a blacklist.
- All new passwords containing the string "young" will be rejected because the old password is too young to be changes.
Does not consider policy check plugins injected externally (using method setPasswordPolicyChecks
).
type: com.airlock.iam.core.misc.impl.authen.DummyPasswordService
id: DummyPasswordService-xxxxxx
displayName:
comment:
properties:
Dummy Polling Authenticator
authenticationState
) authenticationMethod
)
type: com.airlock.iam.core.misc.impl.authen.DummyPollingAuthenticator
id: DummyPollingAuthenticator-xxxxxx
displayName:
comment:
properties:
authenticationMethod: AIRLOCK_2FA
authenticationState: FAILED
Dummy Report Renderer
type: com.airlock.iam.core.misc.util.report.DummyReportRenderer
id: DummyReportRenderer-xxxxxx
displayName:
comment:
properties:
Dummy SMS Gateway
Dummy SMS gateway that prints the SMS (including originator name and target number) to the log file and standard out.
To produce an exception
in the plugin using the SMS gateway.
type: com.airlock.iam.core.misc.impl.sms.DummySmsGateway
id: DummySmsGateway-xxxxxx
displayName:
comment:
properties:
Dummy Token List Persister
Getting a token user structure (getTokenUserStructure
):
- If the username contains the string "notfound" a NotFoundException is thrown.
- If the username contains the string "ambig" a NotUniqueException is thrown.
- If the username contains the string "except" a PersisterException is thrown.
- If the username contains the string "inactive" an inactive token user structure is returned.
- If the username contains the string "order" a token user structure with the order flag set is returned.
- All returned token lists contain 130 tokens with 3 characters each which are either random or set to the token's index (0-padded), depending on configuration.
Updating a token user structure (makeTokenUserStructurePersistent
):
- If the username contains the string "notfound" a NotFoundException is thrown.
- If the username contains the string "ambig" a NotUniqueException is thrown.
- If the username contains the string "except" a PersisterException is thrown.
- For all other usernames, the call returns normally.
Getting all User-IDs (getAllUserIds
):
- Returns a list with 100 random user ids.
useRandomTokens
) numberOfUnansweredChallenges
)
type: com.airlock.iam.core.misc.impl.persistency.DummyTokenListPersister
id: DummyTokenListPersister-xxxxxx
displayName:
comment:
properties:
numberOfUnansweredChallenges: 0
useRandomTokens: true
Dummy Token List Renderer
tokensPerRow
) This is needed to be able to translate internal token indices to a challenge coordinate pair.
type: com.airlock.iam.core.misc.impl.renderer.DummyTokenListRenderer
id: DummyTokenListRenderer-xxxxxx
displayName:
comment:
properties:
tokensPerRow: 10
Dummy Token Verifier
- The token
123456
is accepted. - The token
111111
leads to the next token mode. - The token
222222
leads to a new pin being required. - The token
333333
leads to a new pin being accepted. - The token
999999
results in a TokenVerifierException. - All other tokens are denied.
555555
. There are no configuration properties
.
type: com.airlock.iam.core.misc.impl.tokenverifier.DummyTokenVerifier
id: DummyTokenVerifier-xxxxxx
displayName:
comment:
properties:
Dummy Two Step Authenticator
This plugin can be used for testing and MUST NOT BE USED PRODUCTIVELY.
Note that all comparisons are done case-insensitive, i.e. NOT regarding case.
The responses are dependent on the credentials as follows:
- User "unknown" is unknown.
- User "ambiguous" is ambiguous.
- User "locked" is a locked user.
- User "invalid" is an invalid user.
- User "unspec" results in an unspecified authentication failure.
- User "exception" results in an authenticator exception being thrown.
- For user "mtan" no password is expected but a mtan code is required in the second step.
- For user "token" no password is expected but a token is required in the second step.
- For user "nexttoken" no password is expected but the next token will be requested.
- For user "index" no password is expected but a index-token challenge (with 3 challenges) is sent in the second step.
- For user "index1" no password is expected but a index-token challenge (with 1 challenge) is sent in the second step.
- For user "matrix" no password is expected but a matrix card challenge (with 3 challenges) is sent in the second step.
- For user "matrix1" no password is expected but a matrix card challenge (with 1 challenge) is sent in the second step.
- For user "smartcard" no password is expected but a string challenge is sent in the second step.
- For user "newpin" no password is expected but a new pin is required in the next step.
- For user "unassigned" the result is CREDENTIAL_NOT_ASSIGNED.
- All other users are valid users and a password is expected.
- The password "password" is accepted and no further steps are required.
- The password "step" or "pwstep" is accepted and leads to password-required in the second step.
- The password "mtan" is accepted and leads to a mtan code required in the second step.
- The password "token" is accepted and leads to token-required in the second step. The last used token is 123456.
- The password "nexttoken" is accepted and leads to next-token-required in the next step. The last used token is 123456.
- The password "index" is accepted and leads to an index-challenge (with 3 challenges) in the second step.
- The password "index1" is accepted and leads to an index-challenge (with 1 challenge) in the second step.
- The password "matrix" is accepted and leads to a matrix-challenge (with 3 challenges) in the second step.
- The password "matrix1" is accepted and leads to a matrix-challenge (with 1 challenge) in the second step.
- The password "smartcard" is accepted and leads to a string challenge in the second step.
- The password "newpin" is accepted and leads to a new pin being required in the second step.
- The password "pwdchange" or "pwch" is accepted but forces a password change.
- The password "usergotlocked" is considered to be wrong AND the user-got-locked flag is set.
- All other passwords are not accepted.
- Any value containing the string "accept" or "acpt" will be accepted as token and as response to the index-challenge and the matrix challenge.
- Any value containing the string "pwdchange" or "pwch" accepts the response and leads to forced password change.
- Any value containing the string "mtan" accepts the response and leads to requiring a mtan code.
- Any value containing the string "token" accepts the response and leads to requiring a token.
- Any value containing the string "nexttoken" accepts the response and leads to requiring a next token.
- Any value containing the string "matrix" accepts the response and leads to a matrix challenge.
- Any value containing the string "newpin" accepts the response and leads to requiring a new pin.
- Any value containing the string "index" accepts the response and leads to an index challenge.
- Any value containing the string "unspec" results in an unspecified authentication failure.
- Any value containing the string "except" results in an authenticator exception being thrown.
- All other values are not accepted.
If the authentication succeeds, the roles "role1" and "role2" are granted to the user.
The plugin writes the canonical class name description of this plugin to the context data container. The class name is stored under the key authPluginClassName
. A short description of this authentication method is stored under the key authMethodShortDesc
. This information may be used by callers.
instanceName
)
type: com.airlock.iam.core.misc.impl.authen.DummyTwoStepAuthenticator
id: DummyTwoStepAuthenticator-xxxxxx
displayName:
comment:
properties:
instanceName:
Dummy Vasco Handler
DO NOT USE IN PRODUCTION
Since VascoHandler needs a native library in order to be configured, this dummy implementation can be used for testing purposes if one does not want to load the native library
When importing tokens, the key specifies the number of tokens to be generated (i.e. key '5' will generate 5 tokens). Just select any file (the file is ignored, but may not be empty).
When verifying tokens, the serialId of the token is accepted. All other input strings will be declined.
tokenType
) authMode
) - RESPONSE ONLY for Vasco Digipass OTP tokens
- MASTER ACTIVATION for Cronto account licenses
requestSoftwareVectorDuringLicenseImport
)
type: com.airlock.iam.core.misc.util.vasco.DummyVascoHandler
id: DummyVascoHandler-xxxxxx
displayName:
comment:
properties:
authMode: response only
requestSoftwareVectorDuringLicenseImport: false
tokenType: DUMMY
Dynamic Active Directory String Generator
A fixed pattern is used that will generate passwords based on the restrictions given by an Active Directory, i.e. a password must meet three out of the following four requirements:
passwordPolicy
) Remark: The pattern must be able to construct strings that will be accepted by the policy.
After the policy rejected 10'000 generated strings (for each string to create) the plugin gives up and throws a runtime exception. This should not occur in real-life, since during initialization of this plugin, 100 test strings are generated to ensure the compatibility of the pattern with the policy. During this initial check, only 200 rejections from the policy are allowed. This is a much harder constraint, than 10'000 allowed rejections afterwards when the plugin is used. Therefore in practice the probability of a failure after initialization of the plugin should be negligible.
type: com.airlock.iam.core.misc.impl.authen.DynamicActiveDirectoryStringGenerator
id: DynamicActiveDirectoryStringGenerator-xxxxxx
displayName:
comment:
properties:
passwordPolicy:
Dynamic Step Activation Config
targetStepId
) activatable
) deactivatable
)
type: com.airlock.iam.flow.api.application.configuration.dynamicactivation.DynamicStepActivationConfig
id: DynamicStepActivationConfig-xxxxxx
displayName:
comment:
properties:
activatable: true
deactivatable: true
targetStepId:
eCall SMS Gateway (v1)
Legacy SMS gateway implementation for "http://www.ecall.ch/".
This plugin uses the HTTP(S) interface of eCall to send SMS messages.
Important: This plugin only supports the eCall HTTP SMS Gateway Version 1.x (using the "/ecallurl/ecallurl.ASP" endpoint). For ECall HTTP Gateway 2.0, please use the generic "HTTP SMS Gateway" using the following configuration:
- HTTP Method: "POST"
- Service URI: "https://url.ecall.ch/Api/Sms"
- Message Parameter: "Message"
- Recipient Parameter: "Address"
- Originator Parameter: "CallBack" (or leave empty for the default originator of the associated account)
- Flash Parameter: (if flash is required, otherwise leave empty)
- Parameter Name: "MsgType"
- Parameter Value: "Flash"
- Attribute Value Pairs:
- "Username=xyz" (replace with your technical user id)
- "Password=xyz" (replace with your password)
- Successful Response Pattern can be left empty. Every response with code 200 is a successful response.
accountUsername
) accountPassword
) serviceUri
) See note in plug-in description when using SSL (HTTPS instead of HTTP).
proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
connectTimeout
) Therefore, a connection may take a maximum of twice this time until it is aborted.
correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
visiblePhoneNumberDigitsInLog
) Defines the number of phone number digits visible in log statements.
Thus, if the value is zero, all digits are masked, if it is large enough, all digits are visible. If set to 3, for example, the logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.core.misc.impl.sms.EcallSmsGateway
id: EcallSmsGateway-xxxxxx
displayName:
comment:
properties:
accountPassword:
accountUsername:
allowOnlyTrustedCerts: true
connectTimeout: 10
correlationIdHeaderName:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
serviceUri:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
verifyServerHostname: true
visiblePhoneNumberDigitsInLog: 100
Edited Context Data Map
type: com.airlock.iam.selfservice.application.configuration.message.UserDataEditValueMapProviderConfig
id: UserDataEditValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
Email Address
translationKey
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.validation.EmailValidationConfig
id: EmailValidationConfig-xxxxxx
displayName:
comment:
properties:
translationKey:
Email Address Added
Event that is published when a new email address has been added to a user.
This event is published in Loginapp flows by the "Apply Email Change" handler and in the Adminapp by Generic Token Controllers for tokens with "EMAIL" as Token Event Type and by profile items of type "Email User Profile Item".
type: com.airlock.iam.common.application.configuration.event.EmailAddressAddedSubscribedEventConfig
id: EmailAddressAddedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Email Address Changed
Event that is published when a user's email address has been changed.
This event is published in Loginapp flows by the "Apply Email Change" handler and in the Adminapp by Generic Token Controllers for tokens with "EMAIL" as Token Event Type and by profile items of type "Email User Profile Item".
type: com.airlock.iam.common.application.configuration.event.EmailAddressChangedSubscribedEventConfig
id: EmailAddressChangedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Email Address Deleted
Event that is published when a user's email address has been deleted.
This event is published in Loginapp flows by the "Apply Email Change" handler and in the Adminapp by Generic Token Controllers for tokens with "EMAIL" as Token Event Type and by profile items of type "Email User Profile Item".
type: com.airlock.iam.common.application.configuration.event.EmailAddressDeletedSubscribedEventConfig
id: EmailAddressDeletedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Email Address Validator
maximumLength
)
type: com.airlock.iam.common.application.configuration.validation.EmailAddressValidatorConfig
id: EmailAddressValidatorConfig-xxxxxx
displayName:
comment:
properties:
maximumLength: 100
Email Change Verification Step
Flow step that uses the email address provided by the user in an User Data Edit Step. It verifies the email address by sending an email with an OTP that has to be entered correctly for the flow to continue.
Note that channel verification is the only way to ensure the uniqueness of email addresses while at the same time not revealing already registered email addresses.
emailItem
) emailProvider
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
emailService
) otpGenerator
) emailMessageProvider
) maxFailedAttempts
) otpValidity
) otpCaseSensitive
) sendAsHtml
) If enabled, the verification email will be sent as an HTML mail. Otherwise it will be sent as plain text.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
If a more fine-grained control is required, use a 'Transforming Value Map Provider' with an 'HTML String Escaper' to transform all values of the map. (Alternatively, if you want to transform only individual values of a map, use a 'Value Provider Map' with 'Transforming String Value Providers'.)
maskingSettings
) If left empty, the email address will not be masked.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.login.application.configuration.EmailChangeVerificationStepConfig
id: EmailChangeVerificationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: EMAIL
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
emailItem:
emailMessageProvider:
emailProvider:
emailService:
interactiveGotoTargets:
maskingSettings:
maxFailedAttempts: 1
onFailureGotos:
otpCaseSensitive: true
otpGenerator:
otpValidity: 300
preCondition:
requiresActivation: false
sendAsHtml: false
skipCondition:
stepId:
tagsOnSuccess:
Email Event Subscriber (Adminapp)
emailService
) recipientAddress
) subjectResourceKey
) - ${contextDataName} for the value of contextDataName in the context-data of the managed user.
- ${event.createdAt,date,format} for the date/time at which the event was created, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
- event.createdAt
- event.data.addedRoles (list of strings)
- event.data.airlock2FAAccountId
- event.data.airlock2FADeviceId
- event.data.activeAuthenticationMethod
- event.data.contextDataChanged.%s.newValue (where "%s" is replaced by the context-data field name).
- event.data.contextDataChanged.%s.oldValue (where "%s" is replaced by the context-data field name).
- event.data.crontoDeviceId
- event.data.fidoCredentialId
- event.data.lockReason
- event.data.mtanNewPhoneNumber
- event.data.mtanNumberId
- event.data.mtanOldPhoneNumber
- event.data.newEmailAddress
- event.data.newRoles (list of strings)
- event.data.oldEmailAddress
- event.data.oldRoles (list of strings)
- event.data.previousAuthenticationMethod
- event.data.removedRoles (list of strings)
- event.data.userId
- event.id
- event.metadata.requestIp
- event.metadata.userAgent
- event.source.adminId
bodyResourceKey
) - ${contextDataName} for the value of contextDataName in the context-data of the managed user.
- ${event.createdAt,date,format} for the date/time at which the event was created, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
- event.createdAt
- event.data.addedRoles (list of strings)
- event.data.airlock2FAAccountId
- event.data.airlock2FADeviceId
- event.data.activeAuthenticationMethod
- event.data.contextDataChanged.%s.newValue (where "%s" is replaced by the context-data field name).
- event.data.contextDataChanged.%s.oldValue (where "%s" is replaced by the context-data field name).
- event.data.crontoDeviceId
- event.data.fidoCredentialId
- event.data.lockReason
- event.data.mtanNewPhoneNumber
- event.data.mtanNumberId
- event.data.mtanOldPhoneNumber
- event.data.newEmailAddress
- event.data.newRoles (list of strings)
- event.data.oldEmailAddress
- event.data.oldRoles (list of strings)
- event.data.previousAuthenticationMethod
- event.data.removedRoles (list of strings)
- event.data.userId
- event.id
- event.metadata.requestIp
- event.metadata.userAgent
- event.source.adminId
sendAsHtml
) languageContextDataName
) defaultLanguage
) event
)
type: com.airlock.iam.admin.application.configuration.event.AdminappEmailEventSubscriberConfig
id: AdminappEmailEventSubscriberConfig-xxxxxx
displayName:
comment:
properties:
bodyResourceKey: email.notification.body
defaultLanguage: de
emailService:
event:
languageContextDataName:
recipientAddress:
sendAsHtml: false
subjectResourceKey: email.notification.subject
Email Event Subscriber (Loginapp)
emailService
) recipientAddress
) subjectResourceKey
) - ${valueMapKey} for the value of valueMapKey provided by any of the configured Value Map Providers.
- ${event.createdAt,date,format} to include the date/time at which the event was created, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
- event.createdAt
- event.data.airlock2FAAccountId
- event.data.airlock2FADeviceId
- event.data.activeAuthenticationMethod
- event.data.authenticationMethods
- event.data.browser
- event.data.city
- event.data.contextDataChanged.%s.newValue (where "%s" is replaced by the context-data field name).
- event.data.contextDataChanged.%s.oldValue (where "%s" is replaced by the context-data field name).
- event.data.countryCode
- event.data.crontoDeviceId
- event.data.device
- event.data.deviceTokenId
- event.data.fidoCredentialId
- event.data.fidoPublicKeyCredentialId
- event.data.fidoRelyingPartyId
- event.data.lockReason
- event.data.mtanNewPhoneNumber
- event.data.mtanNumberId
- event.data.mtanOldPhoneNumber
- event.data.newEmailAddress
- event.data.oldEmailAddress
- event.data.operatingSystem
- event.data.previousAuthenticationMethod
- event.data.stepResult.attributes.<attribute-name> (where <attribute-name> ist the name of the additional attribute, could be nested.)
- event.data.stepResult.errorCode
- event.data.stepResult.nextAction
- event.data.stepResult.type
- event.data.userId
- event.id
- event.metadata.requestIp
- event.metadata.userAgent
- event.source.applicationId
- event.source.configurationContext
- event.source.flowId
- event.source.stepId
bodyResourceKey
) - ${valueMapKey} for the value of valueMapKey provided by any of the configured Value Map Providers.
- ${event.createdAt,date,format} to include the date/time at which the event was created, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
- event.createdAt
- event.data.airlock2FAAccountId
- event.data.airlock2FADeviceId
- event.data.activeAuthenticationMethod
- event.data.authenticationMethods
- event.data.browser
- event.data.city
- event.data.contextDataChanged.%s.newValue (where "%s" is replaced by the context-data field name).
- event.data.contextDataChanged.%s.oldValue (where "%s" is replaced by the context-data field name).
- event.data.countryCode
- event.data.crontoDeviceId
- event.data.device
- event.data.deviceTokenId
- event.data.fidoCredentialId
- event.data.fidoPublicKeyCredentialId
- event.data.fidoRelyingPartyId
- event.data.lockReason
- event.data.mtanNewPhoneNumber
- event.data.mtanNumberId
- event.data.mtanOldPhoneNumber
- event.data.newEmailAddress
- event.data.oldEmailAddress
- event.data.operatingSystem
- event.data.previousAuthenticationMethod
- event.data.stepResult.attributes.<attribute-name> (where <attribute-name> ist the name of the additional attribute, could be nested.)
- event.data.stepResult.errorCode
- event.data.stepResult.nextAction
- event.data.stepResult.type
- event.data.userId
- event.id
- event.metadata.requestIp
- event.metadata.userAgent
- event.source.applicationId
- event.source.configurationContext
- event.source.flowId
- event.source.stepId
sendAsHtml
) language
) event
) valueMapProviders
)
type: com.airlock.iam.login.application.configuration.event.LoginappEmailEventSubscriberConfig
id: LoginappEmailEventSubscriberConfig-xxxxxx
displayName:
comment:
properties:
bodyResourceKey: email.notification.body
emailService:
event:
language:
recipientAddress:
sendAsHtml: false
subjectResourceKey: email.notification.subject
valueMapProviders:
Email Identity Verification Step
Public self-service flow step that verifies the user identity by sending an email with an OTP that the user has to enter correctly for the flow to continue.
This is an identity verification step that differs from a general "factor check" step in the following ways:
- It doesn't fail with non-existing users or users without an email address.
- It implements stealth mode: if a user does not exist or cannot do a public self-service for whatever reason, no error is returned, but any OTP entered is rejected, so that the step can never be completed successfully.
emailContextData
) emailService
) otpGenerator
) subjectResourceKey
) bodyResourceKey
) The resource key for the email message body.
The following syntax can be used to include data in the template:
- ${TOKEN} to include the generated OTP.
- ${USERNAME} to include the name of the user (as entered to initiate the public self-service).
- ${Now,date,format} to include the current date/time, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
- ${contextDataName} to include the value of the context data field "contextDataName". Note that only context data of type "string" can be included.
Note that unreplaced variables result in a failure and no email is sent. Therefore, only variable names should be used that are guaranteed to be available when the email verification is performed.
maxFailedAttempts
) otpValidity
) otpCaseSensitive
) sendAsHtml
) If enabled, the verification email will be sent as an HTML mail. Otherwise it will be sent as plain text.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
escapeHtmlValues
) HTML-escape all provided values if property Send As HTML is enabled.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.EmailIdentityVerificationStepConfig
id: EmailIdentityVerificationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: EMAIL
bodyResourceKey: public-self-service.email.otp.body
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
emailContextData:
emailService:
escapeHtmlValues: true
interactiveGotoTargets:
maxFailedAttempts: 1
onFailureGotos:
otpCaseSensitive: true
otpGenerator:
otpValidity: 300
preCondition:
requiresActivation: false
sendAsHtml: false
skipCondition:
stepId:
subjectResourceKey: public-self-service.email.otp.subject
tagsOnSuccess:
Email Item Definition
key
) required
) unique
) enableStealthMode
) maximumInputLength
) initialValueProvider
) validators
) The "Email Address Validator" is automatically applied. A manual configuration is not necessary.
type: com.airlock.iam.flow.shared.application.configuration.item.EmailItemDefinitionConfig
id: EmailItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
enableStealthMode: true
initialValueProvider:
key: email
maximumInputLength: 100
required: true
unique: true
validators:
Email Message Provider
subjectResourceKey
) bodyResourceKey
) valueProviders
) List of value map providers that are used to replace the variables in the localized template. The values providers are called in the configured order and their values are added to a map. Later providers can overwrite values from earlier providers. If no value providers are configured, the localized template should not contain any variables, since all of them would be replaced by empty strings.
If available, the OTP token for the ${TOKEN} variable is automatically added to the map and doesn't have to be configured here.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
If a more fine-grained control is required, use a 'Transforming Value Map Provider' with an 'HTML String Escaper' to transform all values of the map. (Alternatively, if you want to transform only individual values of a map, use a 'Value Provider Map' with 'Transforming String Value Providers'.)
escapeValuesInHtml
) HTML-escape all provided values if this message provider is used in an HTML email.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
If a more fine-grained control is required, use a 'Transforming Value Map Provider' with an 'HTML String Escaper' to transform all values of the map. (Alternatively, if you want to transform only individual values of a map, use a 'Value Provider Map' with 'Transforming String Value Providers'.)
type: com.airlock.iam.flow.shared.application.configuration.message.GenericEmailMessageProviderConfig
id: GenericEmailMessageProviderConfig-xxxxxx
displayName:
comment:
properties:
bodyResourceKey:
escapeValuesInHtml: true
subjectResourceKey:
valueProviders:
Email Notification Step
emailService
) recipientAddressProvider
) subjectResourceKey
) - ${valueMapKey} will look up the configured Value Map Providers and include the value found under the key valueMapKey.
- ${NOW,date,format} to include the current date/time, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
bodyResourceKey
) - ${valueMapKey} will look up the configured Value Map Providers and include the value found under the key valueMapKey.
- ${NOW,date,format} to include the current date/time, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
valueMapProviders
) sendAsHtml
) If enabled, the verification email will be sent as an HTML mail. Otherwise it will be sent as plain text.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
If a more fine-grained control is required, use a 'Transforming Value Map Provider' with an 'HTML String Escaper' to transform all values of the map. (Alternatively, if you want to transform only individual values of a map, use a 'Value Provider Map' with 'Transforming String Value Providers'.)
escapeHtmlValues
) HTML-escape all provided values if property Send As HTML is enabled.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
If a more fine-grained control is required, use a 'Transforming Value Map Provider' with an 'HTML String Escaper' to transform all values of the map. (Alternatively, if you want to transform only individual values of a map, use a 'Value Provider Map' with 'Transforming String Value Providers'.)
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.step.email.EmailNotificationStepConfig
id: EmailNotificationStepConfig-xxxxxx
displayName:
comment:
properties:
bodyResourceKey: email.notification.body
customFailureResponseAttributes:
customResponseAttributes:
emailService:
escapeHtmlValues: true
onFailureGotos:
preCondition:
recipientAddressProvider:
requiresActivation: false
sendAsHtml: false
skipCondition:
stepId:
subjectResourceKey: email.notification.subject
tagsOnSuccess:
valueMapProviders:
Email Notification Task
emailService
) subjectRenderer
) contentRenderer
) contentIsHtml
) userPersister
) userIterator
) notificationSentDateContextAttribute
) emailAddressContextAttribute
) givennameContextAttribute
) surnameContextAttribute
) correspondanceLanguageContextAttribute
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.EmailNotificationTask
id: EmailNotificationTask-xxxxxx
displayName:
comment:
properties:
contentIsHtml: false
contentRenderer:
correspondanceLanguageContextAttribute:
emailAddressContextAttribute:
emailService:
givennameContextAttribute:
notificationSentDateContextAttribute:
subjectRenderer:
surnameContextAttribute:
userIterator:
userPersister:
Email Notifier
emailService
) userPersister
) emailContextDataField
) mailSubject
) mailBody
)
type: com.airlock.iam.core.misc.impl.notification.EmailNotifier
id: EmailNotifier-xxxxxx
displayName:
comment:
properties:
emailContextDataField:
emailService:
mailBody:
mailSubject:
userPersister:
Email OTP Authentication Step
Configuration for an authentication flow step to check an OTP sent via email. This Email OTP Authentication Step supports template based emails.
Note: Emails are neither confidential nor authentic (i.e. the user cannot be sure that the email is really from Airlock IAM and Airlock IAM cannot be sure that the email is delivered to the correct user). Therefore, this step must not be used for high-security applications.emailService
) emailMessageProvider
) recipientAddress
) messageTemplateIsHtml
) ignoreCase
) maskingSettings
) If left empty, the email address will not be masked.
otpGenerator
) otpValiditySeconds
) maxRetries
) The number of times the user may enter a wrong OTP before the flow is aborted. If set to zero (the default), only one attempt is possible.
The purpose of this settings is usability. The failed attempts counter is always increased upon receiving a wrong OTP and the user is locked when the global failed attempts limit is exceeded.
maxResends
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.emailotp.EmailOtpAuthenticationStepConfig
id: EmailOtpAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: EMAIL
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
emailMessageProvider:
emailService:
ignoreCase: false
interactiveGotoTargets:
maskingSettings:
maxResends: 0
maxRetries: 0
messageTemplateIsHtml: true
onFailureGotos:
otpGenerator:
otpValiditySeconds: 300
preCondition:
recipientAddress:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Email Otp Authenticator
The Email OTP Authenticator is an authenticator plug-in designed for an additional authentication step and also suitable for transaction verification.
The user receives an Email message containing a code. He has to provide this code for successful authentication.
The message template used to form the messages sent to the user is taken from the credential object passed in the first step. If no such template is available (or if the property "dont-use-credential-message" is TRUE) the message template is taken from the configuration of this plugin (see property "message-template").
Note: The Email OTP Authenticator should only be used as an additional step in an authentication process and not stand-alone.
Note: Emails are neither confidential nor authentic in any way (i.e. the user cannot be sure that the email is really from Airlock IAM and Airlock IAM cannot be sure that the email is delivered to the correct user). This must be considered regarding security. This authenticator is not to be used for high-security applications!
The plugin writes the canonical class name description of this plugin to the context data container. The class name is stored under the key authPluginClassName
. A short description of this authentication method is stored under the key authMethodShortDesc
. This information may be used by callers.
emailService
) messageTemplate
) Note: The template is used if no message template is available in the credential passed in the first authentication step or if the property "dont-use-credential-message" is set to TRUE.
The email message contains only the token if no template specified at all.
The string $TOKEN$ in the message template is mandatory and is replaced by the token.
If the message text is HTML code, you must set the property "message-template-is-html" to true.
In order to access our services, please provide the following security code: $TOKEN$
Your Airlock IAM Server
subject
) messageTemplateIsHtml
) ignoreTokenCase
) true
the case of characters is ignored when checking tokens. maxTokenRetransmissions
) retransmitSameToken
) true
is less secure but helps avoiding erroneous user input when the initial token code is received before its retransmission. credentialPersister
) tokenValidityMillis
) The value 0 (zero) disables this feature, i.e. tokens never expire (this is the default).
maxTokenRetries
) tokenGenerator
)
type: com.airlock.iam.core.misc.impl.authen.EmailOtpAuthenticator
id: EmailOtpAuthenticator-xxxxxx
displayName:
comment:
properties:
credentialPersister:
emailService:
ignoreTokenCase: false
maxTokenRetransmissions: 0
maxTokenRetries: 0
messageTemplate: $TOKEN$
messageTemplateIsHtml: true
retransmitSameToken: false
subject:
tokenGenerator:
tokenValidityMillis: 0
Email OTP Transaction Approval Step
emailService
) emailMessageProvider
) recipientAddress
) messageTemplateIsHtml
) ignoreCase
) maskingSettings
) If left empty, the email address will not be masked.
otpGenerator
) otpValiditySeconds
) maxRetries
) The number of times the user may enter a wrong OTP before the flow is aborted. If set to zero (the default), only one attempt is possible.
The purpose of this settings is usability. The failed attempts counter is always increased upon receiving a wrong OTP and the user is locked when the global failed attempts limit is exceeded.
maxResends
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.transactionapproval.application.configuration.email.EmailOtpTransactionApprovalStepConfig
id: EmailOtpTransactionApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: EMAIL
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
emailMessageProvider:
emailService:
ignoreCase: false
interactiveGotoTargets:
maskingSettings:
maxResends: 0
maxRetries: 0
messageTemplateIsHtml: true
onFailureGotos:
otpGenerator:
otpValiditySeconds: 300
preCondition:
recipientAddress:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Email OTP was used for login (Transaction Approval only)
selectableIfNoAuthTokenIdPresent
)
type: com.airlock.iam.transactionapproval.application.configuration.selection.EmailOtpAuthTokenIdSelectionConditionConfig
id: EmailOtpAuthTokenIdSelectionConditionConfig-xxxxxx
displayName:
comment:
properties:
selectableIfNoAuthTokenIdPresent: true
Email SMS Gateway
This plugin sends an email message with a configurable subject and the actual SMS message as body as email using the configured EmailService plugin.
The recipient of the email may depend on the target SMS message (see configuration properties).
Note that this plugin cannot only be used to use Email as channel instead of SMS but it also serves as integration plugin for SMS gateways that actually work this way (i.e. expect an email).
This plugin does neither support multi-sms-messages nor flash messages.
emailService
) mailSubject
) recipientTemplate
) The recipient address may contain the string "
${phonenumber}
", which will be replaced by the phone number passed to this plugin. internationalPrefix
) visiblePhoneNumberDigitsInLog
) Defines the number of phone number digits visible in log statements.
Thus, if the value is zero, all digits are masked, if it is large enough, all digits are visible. If set to 3, for example, the logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.core.misc.impl.sms.EmailSmsGateway
id: EmailSmsGateway-xxxxxx
displayName:
comment:
properties:
emailService:
internationalPrefix: +
mailSubject:
recipientTemplate:
visiblePhoneNumberDigitsInLog: 100
Email User Profile Item Config
validationPattern
) Pattern for validating the email address.
The provided regex is used in Java for server-side validation and potentially in Javascript for client-side validation. The capabilities of these regex interpreters differ. Therefore make sure to only use patterns that are equivalent in both types of interpreters.
checkUniqueness
) If defined, the user persister is used to check whether the value is unique by querying the corresponding user iterator plugin.
This user iterator must provide the context data value specified by this profile item.
Usually, the same plugin is used that was used to load the user data to the form this profile item is part of.
checkUniquenessAgainstUsername
) If set to true
, uniqueness is also checked against the username
. The value entered by the user is not allowed to exist neither in the configured property nor as a username. This is mainly used in conjunction with a username transformer, where login is possible with an alias property in addition to the username.
This flag is only checked if checkUniqueness
is configured.
prefill
) stringResourceKey
) propertyName
) optional
) modifiable
) validateOnlyChangedValues
) sortable
)
type: com.airlock.iam.common.application.configuration.userprofile.EmailUserProfileItemConfig
id: EmailUserProfileItemConfig-xxxxxx
displayName:
comment:
properties:
checkUniqueness:
checkUniquenessAgainstUsername: false
modifiable: true
optional: true
prefill:
propertyName:
sortable: true
stringResourceKey:
validateOnlyChangedValues: true
validationPattern: [a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@(?:[a-zA-Z0-9-]+\.){1,20}[a-zA-Z-]{2,63}
Email Verification Step
User self-registration flow step that verifies the email address of a user by sending an email with an OTP that has to be entered correctly for the flow to continue.
Note that channel verification is the only way to ensure the uniqueness of email addresses while at the same time not revealing already registered email addresses (if Stealth Mode is enabled).
emailItemDefinition
) captchaProvider
) - the response of the flow selecting request (when this step is the first interactive step in a flow).
- the step response immediately preceding the protected step (when this step is not the first interactive step in a flow).
Caution: The CAPTCHA only protects the verification of the OTP. The OTP is send to the user before the CAPTCHA is solved.
emailService
) otpGenerator
) emailMessageProvider
) maxFailedAttempts
) otpValidity
) otpCaseSensitive
) sendAsHtml
) If enabled, the verification email will be sent as an HTML mail. Otherwise it will be sent as plain text.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
If a more fine-grained control is required, use a 'Transforming Value Map Provider' with an 'HTML String Escaper' to transform all values of the map. (Alternatively, if you want to transform only individual values of a map, use a 'Value Provider Map' with 'Transforming String Value Providers'.)
maskingSettings
) If left empty, the email address will not be masked.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.userselfreg.application.configuration.step.EmailRegistrationVerificationStepConfig
id: EmailRegistrationVerificationStepConfig-xxxxxx
displayName:
comment:
properties:
captchaProvider:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
emailItemDefinition:
emailMessageProvider:
emailService:
interactiveGotoTargets:
maskingSettings:
maxFailedAttempts: 1
onFailureGotos:
otpCaseSensitive: true
otpGenerator:
otpValidity: 300
preCondition:
requiresActivation: false
sendAsHtml: false
skipCondition:
stepId:
tagsOnSuccess:
Enable Cronto Device Initiation Step
crontoHandler
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.CrontoDeviceEnablingInitiationStepConfig
id: CrontoDeviceEnablingInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Enable Cronto Push Initiation Step
crontoHandler
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.CrontoPushEnablingInitiationStepConfig
id: CrontoPushEnablingInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Enable FIDO Credential Initiation Step
fidoSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.FidoCredentialEnablingInitiationStepConfig
id: FidoCredentialEnablingInitiationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fidoSettings:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Enabling All Access Controller
type: com.airlock.iam.core.misc.impl.authorization.EnablingAllAccessController
id: EnablingAllAccessController-xxxxxx
displayName:
comment:
properties:
Encoded User Data Header
name
) ticketService
) ticketEncoder
) Note that some ticket encoders do not support ticket expiration, i.e. they do not encode the ticket validity into the ticket.
urlEncodingScheme
) Make sure that the component receiving the ticket uses the same URL encoding scheme.
addPrefixToValue
) valuePrefix
) mappingNames
) If no mapping name is specified, the HTTP header is used on all Airlock Gateway mappings.
Note: Headers must never be defined globally and on a specific mapping at the same time.
type: com.airlock.iam.core.misc.impl.sso.EncodedUserDataHeader
id: EncodedUserDataHeader-xxxxxx
displayName:
comment:
properties:
addPrefixToValue: true
mappingNames:
name: Authorization
ticketEncoder:
ticketService:
urlEncodingScheme: UTF-8
valuePrefix: Bearer
Encoded User Data Response Header
name
) ticketService
) ticketEncoder
) Note that some ticket encoders do not support ticket expiration, i.e. they do not encode the ticket validity into the ticket.
urlEncodingScheme
) Make sure that the component receiving the ticket uses the same URL encoding scheme.
valuePrefix
)
type: com.airlock.iam.core.application.configuration.header.EncodedUserDataResponseHeader
id: EncodedUserDataResponseHeader-xxxxxx
displayName:
comment:
properties:
name: Authorization
ticketEncoder:
ticketService:
urlEncodingScheme: UTF-8
valuePrefix:
Encrypted Password Hash
Stores the password hash in encrypted form. It will first call the internal hash function and then encrypt the resulting hash.
If a password history is required, wrap this plugin in a 'History Password Hash'. However, bear in mind that an encrypted hash can be longer than the hash value itself. This affects the number of possible entries of 'Max History Length' in 'History Password Hash'.
hashFunction
) keystore
) encryptionKeyAlias
) encryptionKeyPassword
) cipherTransformation
)
type: com.airlock.iam.core.misc.util.password.hash.EncryptedPasswordHashConfig
id: EncryptedPasswordHashConfig-xxxxxx
displayName:
comment:
properties:
cipherTransformation: AES/ECB/PKCS5Padding
encryptionKeyAlias:
encryptionKeyPassword:
hashFunction:
keystore:
Enumeration User Context Data Item
contextDataName
) required
) values
)
type: com.airlock.iam.flow.shared.application.configuration.item.EnumContextDataItemDefinitionConfig
id: EnumContextDataItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
required: true
values:
Equals Old Password Policy
ignoreCase
)
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyEqualsOldCheck
id: PwdPolicyEqualsOldCheck-xxxxxx
displayName:
comment:
properties:
ignoreCase: false
Esp Sign Ticket Decoder
Note:In order for the encoder to be compliant with legacy code, the encoding of the ticket information is not straight forward and not like in the other ticket encoders.
Use the ticket encoder
type: com.airlock.iam.core.misc.util.ticket.codec.esp.EspSignTicketDecoder
id: EspSignTicketDecoder-xxxxxx
displayName:
comment:
properties:
Esp Sign Ticket Encoder
Note:In order for this encoder to be compliant with legacy code, the encoding of the ticket information is not straight forward and not like in the other ticket encoders.
Use the ticket decoder
type: com.airlock.iam.core.misc.util.ticket.codec.esp.EspSignTicketEncoder
id: EspSignTicketEncoder-xxxxxx
displayName:
comment:
properties:
Expert Mode Redis State Repository Config
State repository that stores all values in a Redis service.
Caution: This plugin supports a very wide range of configuration options and not all of them have been tested to work with Airlock IAM.
It is recommended to use as few Redis config options as possible: this minimizes the possible need for manual changes for future versions of Redis. Please refer to the property documentations for example configurations.
yamlConfig
) The configuration of the built-in Redisson Redis client in YAML format. Please consult the Redisson Configuration Documentation for details on the available configuration options.
A configuration file which contains the YAML configuration can be used as an alternative to this configuration (see below).
Note:
- Cluster mode is currently not supported
- Configuring read-only Redis nodes does do not improve performance, because Airlock IAM does not use any read-only operations.
encryption
) Encryption settings defining whether and how state information in Redis is encrypted. IAM state contains sensitive information. State encryption prevents other systems from reading and modifying IAM state information.
To enable state encryption with non-encrypted state already present, use the "Migrating State Encryption" plugin.
legacyKeyFormat
) When changing this setting after state has already been stored in Redis, that state will be lost and the corresponding sessions will be terminated.
namespace
) A string that will be used as a namespace for the keys in Redis.
This is useful if, for example, multiple IAM instances share the same Redis instance and one must ensure that their Redis keys don't interfere with each other
When changing this setting after state has already been stored in Redis, that state will be lost and the corresponding sessions will be terminated.
type: com.airlock.iam.common.application.configuration.state.ExpertModeRedisStateRepositoryConfig
id: ExpertModeRedisStateRepositoryConfig-xxxxxx
displayName:
comment:
properties:
encryption:
legacyKeyFormat: false
namespace: default
yamlConfig:
Exponential Temporary Locking Strategy
Duration = (Base Duration) * (Exponential Factor) ^ (n - 1) + (Additional Duration) * (n - 1)
Note that the first addend is always greater than Base DurationbaseDurationMs
) exponentialFactor
) After one failed attempt, Base Duration is used. After two failed attempts, Base Duration is multiplied with this factor. After three failed attempts, this factor is multiplied once more. For example, if the factor is 2.0, the duration is doubled with every failed attempt.
Note that this property can be combined with Additional Duration. See the plugin description for the overall formula.
additionalDurationMs
) After one failed attempt, Base Duration is used. After two failed attempts, the additional duration is added to Base Duration. After three failed attempts, the additional duration is added once more.
Note that this property can be combined with Exponential Factor. See the plugin description for the overall formula.
type: com.airlock.iam.common.application.configuration.templock.ExponentialTemporaryLockingStrategyConfig
id: ExponentialTemporaryLockingStrategyConfig-xxxxxx
displayName:
comment:
properties:
additionalDurationMs: 0
baseDurationMs: 3000
exponentialFactor: 2.0
Export Users Task
userPersister
) userIterator
) csvRenderer
) exportDirectory
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.ExportUsersTask
id: ExportUsersTask-xxxxxx
displayName:
comment:
properties:
csvRenderer:
exportDirectory:
userIterator:
userPersister:
Extended String User Profile Item Config
displayPattern
) This regular expression is used to extract values which can be used in "Display Output" to determine the display value.
The two fields are applied to the value to be displayed as follows: value.replaceAll(displayPattern, displayReplacement)
.
displayReplacement
) readOnlyPattern
) validationPattern
) Pattern for validating the value of the field.
The provided regex is used in Java for server-side validation and potentially in Javascript for client-side validation. The capabilities of these regex interpreters differ. Therefore make sure to only use patterns that are equivalent in both types of interpreters.
checkUniqueness
) If defined, the user persister is used to check whether the value is unique by querying the corresponding user iterator plugin.
This user iterator must provide the context data value specified by this profile item.
Usually, the same plugin is used that was used to load the user data to the form this profile item is part of.
checkUniquenessAgainstUsername
) If set to true
, uniqueness is also checked against the username
. The value entered by the user is not allowed to exist neither in the configured property nor as a username. This is mainly used in conjunction with a username transformer, where login is possible with an alias property in addition to the username.
This flag is only checked if checkUniqueness
is configured.
prefill
) stringResourceKey
) propertyName
) optional
) modifiable
) validateOnlyChangedValues
) sortable
)
type: com.airlock.iam.common.application.configuration.userprofile.ExtendedStringUserProfileItemConfig
id: ExtendedStringUserProfileItemConfig-xxxxxx
displayName:
comment:
properties:
checkUniqueness:
checkUniquenessAgainstUsername: false
displayPattern:
displayReplacement:
modifiable: true
optional: true
prefill:
propertyName:
readOnlyPattern:
sortable: true
stringResourceKey:
validateOnlyChangedValues: true
validationPattern:
Extended User Persister-based User Store Provider
userPersister
)
type: com.airlock.iam.core.application.configuration.store.user.ExtendedUserPersisterBasedUserStoreProvider
id: ExtendedUserPersisterBasedUserStoreProvider-xxxxxx
displayName:
comment:
properties:
userPersister:
External Database Password Repository Config
It is typically used in cases where the Default Password Repository does not work:
- The passwords are stored in a database different from the user database.
- In self-registration flows (where there is no in-memory user that is persisted automatically).
userStore
) allowedPasswordValidityDuration
) If a password is changed, the 'latest password change timestamp' is set and, if this property is defined, the 'next enforced password change timestamp' is updated.
If this property is not defined, the 'next enforced password change timestamp' is not updated.
hashFunction
) Note that the password hash function may or may not support password history checks. If the configured password hash function does not support password history checks but a policy checker requires this capability, an exception is thrown when trying to change a password.
NOTE: Some password hashes, such as SHA 256 Password Hash or Scrypt Password Hash, produce binary output. If one of these is used, make sure the persistence layer supports binary data in the hash field and the corresponding persistence plugins (e.g. Database User Store or Ldap Connector) are configured to treat hash values as binary values.
In case the persistence layer expects a string, encode the password hash by wrapping it with an encoder. To achieve this, use the Password Hash Configuration plugin and specify the hash function (such as Scrypt Password Hash) together with the desired encoder. We recommend using the Base64 Password Hash Encoder.
legacyHashFunctions
) If the password cannot be verified using the main "Hash Function" above, all hashes in this list are tried as well. If any hash of this list matches, the password is stored using the current main hash function (see property "Hash Function"). In this case, a potential password history is lost.
This feature allows changing the password hash function with automatic migration of all users that log in.
Notice that having a legacy hash function in this list producing the same output length as the main hash function can pose a security risk since it might be possible for an attacker to provoke a match using a weaker hash method.
useLatin1Encoding
) If enabled, passwords containing special characters stored by IAM earlier than 6.3 are still accepted. This option does not have to be activated if all passwords were set using IAM 6.3 or later or if all passwords were set via webservices or REST.
To support legacy passwords, those with special characters are additionally checked using their legacy encoding in latin1 and if matching, they are rehashed and stored using the current hash function. In this case, a potential password history is lost.
type: com.airlock.iam.common.application.configuration.password.repository.ExternalDatabasePasswordRepositoryConfig
id: ExternalDatabasePasswordRepositoryConfig-xxxxxx
displayName:
comment:
properties:
allowedPasswordValidityDuration:
hashFunction:
legacyHashFunctions:
useLatin1Encoding: false
userStore:
Factor Use Reporting Processor
type: com.airlock.iam.authentication.application.configuration.processor.FactorUseReportingProcessorConfig
id: FactorUseReportingProcessorConfig-xxxxxx
displayName:
comment:
properties:
Failed Factor Attempts Processor
strictCounting
)
type: com.airlock.iam.authentication.application.configuration.processor.FailedFactorAttemptsProcessorConfig
id: FailedFactorAttemptsProcessorConfig-xxxxxx
displayName:
comment:
properties:
strictCounting: true
Failover SMS Gateway
smsGateways
) revertToPrimaryTimeout
)
type: com.airlock.iam.core.misc.impl.sms.FailoverSmsGateway
id: FailoverSmsGateway-xxxxxx
displayName:
comment:
properties:
revertToPrimaryTimeout:
smsGateways:
Failure HTTP Response
httpStatusCode
) httpHeaders
) workflow
)
type: com.airlock.iam.login.app.misc.configuration.oneshot.FailureHttpResponseConfig
id: FailureHttpResponseConfig-xxxxxx
displayName:
comment:
properties:
httpHeaders:
httpStatusCode: 401
workflow: CONTINUE
Failure Step
errorCode
) authMethod
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) stepId
) customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.application.configuration.step.FailureStepConfig
id: FailureStepConfig-xxxxxx
displayName:
comment:
properties:
authMethod:
customFailureResponseAttributes:
customResponseAttributes:
errorCode:
preCondition:
requiresActivation: false
skipCondition:
stepId:
Fallback Authenticator
The reason of "failing" can be configured (see separate properties):
- Error during authentication process
- User not found
- User not valid (outside validity period or flagged as invalid)
- Credential not assigned
- Credential not active
- Authentication failed (e.g. password wrong)
In general, when switching to the next authenticator, the credential object (e.g. username and password) used with the first authenticator that led to the "failure" is used again with the next authenticator. A new session is obtained from the next authenticator. After trying all authenticators, the result from the last authenticator is returned regardless of its result.
Example usage: Use the reason "user not found" if it is not clear what system to authenticate against in case of multiple user directories.
authenticators
) failoverOnAuthenticationError
) Enable to switch to the next authenticator if an unrecoverable error occurs.
Typical errors arise from unreachable databases or other dependent systems.
failoverIfUserNotFound
) failoverIfUserNotValid
) failoverIfCredentialNotAssigned
) failoverIfCredentialNotActive
) failoverIfAuthenticationFails
)
type: com.airlock.iam.core.misc.impl.authen.FallbackAuthenticator
id: FallbackAuthenticator-xxxxxx
displayName:
comment:
properties:
authenticators:
failoverIfAuthenticationFails: false
failoverIfCredentialNotActive: false
failoverIfCredentialNotAssigned: false
failoverIfUserNotFound: true
failoverIfUserNotValid: true
failoverOnAuthenticationError: true
Fallback CRL Fetcher
fetchers
)
type: com.airlock.iam.core.misc.impl.cert.crl.FallbackCrlFetcher
id: FallbackCrlFetcher-xxxxxx
displayName:
comment:
properties:
fetchers:
Fallback Crl Obtainer
delegates
)
type: com.airlock.iam.core.misc.impl.cert.crl.FallbackCrlObtainer
id: FallbackCrlObtainer-xxxxxx
displayName:
comment:
properties:
delegates:
Fallback String Value Provider
stringValueProviders
) treatEmptyStringsAsNull
)
type: com.airlock.iam.common.application.configuration.valueprovider.FallbackStringValueProviderConfig
id: FallbackStringValueProviderConfig-xxxxxx
displayName:
comment:
properties:
stringValueProviders:
treatEmptyStringsAsNull: false
FIDO Attestation Certificate Trust Verifier
- "packed" attestation statement (see Webauthn - Packed Attestation Statement Format)
- "fido-u2f" attestation statement (see Webauthn - FIDO U2F Attestation Statement Format)
An attestation certificate in such an attestation statement is valid if trust can be derived back to a trusted certificate (a.k.a. trust anchor) configured in the truststore, requiring that
- the attestation certificate and every certificate in the chain is valid at the time of registration;
- the signature of the attestation certificate and every certificate in the chain (excepted the last one) can be verified using the public key attested in the next certificate;
- the signature of the attestation certificate or of at least one certificate in the chain can be verified by a public key attested in one of the trusted certificates configured in the trust store.
trustStore
) Security warning: Putting a certificate in the trust store has security implications. In particular, trusting a certificate implies trusting every chain of certificates that can be derived back to this trusted certificate. Depending on your requirements as to which type of FIDO authenticators should or should not be accepted, it might be advisable to not directly trust root certificates of a particular FIDO authenticator manufacturer, in order to ensure that future FIDO authenticators from this manufacturer will not be automatically accepted. If the system needs to be as closed as possible, then trusting only the deepest intermediate certificate in the chain would be advisable.
maximumCertificateChainLength
) It is recommended to keep this value as low as possible to ensure that Airlock IAM is not overly burdened by such verifications (denial of service).
type: com.airlock.iam.fido.application.configuration.registration.FidoAttestationCertificateTrustVerifierConfig
id: FidoAttestationCertificateTrustVerifierConfig-xxxxxx
displayName:
comment:
properties:
maximumCertificateChainLength: 3
trustStore:
FIDO Authentication Step
Step to authenticate a user with a FIDO authenticator.
onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
This step can return the following error codes:
FIDO_AUTHENTICATION_FAILED
: The FIDO authentication failed for unspecified reasons (either in the browser/client or during server-side verification).FIDO_AUTHENTICATION_TIMEOUT
: The response from the browser/client has timed out.FIDO_AUTHENTICATION_ABORTED
: The authentication has been aborted in the browser/client.FIDO_AUTHENTICATION_NOT_ALLOWED
: The browser/client did not allow authentication with the given credentials.FIDO_WEB_AUTHN_NOT_AVAILABLE
: The client/browser is not capable of performing WebAuthn/FIDO authentication.NO_VALID_TOKEN
: The user has no eligible FIDO credential registered.
fidoSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.fido.login.application.configuration.FidoAuthenticationStepConfig
id: FidoAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fidoSettings:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
FIDO Consistency User Change Listener
- on user deletion: delete associated FIDO user account and its credentials.
- on user name change: updates the user reference for the FIDO user account.
fidoSettings
)
type: com.airlock.iam.fido.application.configuration.FidoConsistencyUserChangeListener
id: FidoConsistencyUserChangeListener-xxxxxx
displayName:
comment:
properties:
fidoSettings:
FIDO Credential Deleted
type: com.airlock.iam.common.application.configuration.event.FidoCredentialDeletedSubscribedEventConfig
id: FidoCredentialDeletedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
FIDO Credential Display Name Change Step
If auto generate display name is enabled during the registration, it is also possible to configure this step after a FIDO Credential Registration Step.
The change is applied by a "Apply Changes Step" which requires an "Apply FIDO Credential Display Name Change" to persist the new name.
fidoSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.fido.login.application.configuration.FidoCredentialDisplayNameChangeStepConfig
id: FidoCredentialDisplayNameChangeStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fidoSettings:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
FIDO Credential List
fidoSettings
) accessCondition
) Precondition that must be fulfilled for a user to access the FIDO credential list.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.token.FidoCredentialListSelfServiceRestConfig
id: FidoCredentialListSelfServiceRestConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
fidoSettings:
FIDO Credential Management UI
Depending on the configuration, the user interface allows an authenticated user:
- to register a new FIDO credential.
The FIDO credential management interface is accessible at /<loginapp-uri>/ui/app/protected/tokens/fido/credentials after user authentication.
flowToRegisterCredential
) flowToChangeDisplayName
) ID of the flow which is used for changing the display name of a FIDO credential. The first interactive step of the corresponding flow must be a FIDO Credential Selection Step.
If not configured, the user will not be able to edit the display name of a credential via the management UI.
flowToDeleteCredential
) ID of the flow which is used for deletion of a FIDO credential. The first interactive step of the corresponding flow must be a Delete FIDO Credential Initiation Step.
If not configured, the user will not be able to delete a credential via the management UI.
flowToDisableCredential
) ID of the flow which is used for disabling a FIDO credential. The first interactive step of the corresponding flow must be an Enable FIDO Credential Initiation Step.
If not configured, the user will not be able to disable a credential via the management UI.
flowToEnableCredential
) ID of the flow which is used for enabling a FIDO credential. The first interactive step of the corresponding flow must be a Disable FIDO Credential Initiation Step.
If not configured, the user will not be able to enable a credential via the management UI.
pageExitTarget
) If configured, an additional button is displayed on the FIDO credential management to exit the page. On click, this button redirects the user to the configured target.
To redirect to a target application, redirect to the corresponding "Authentication Flow". If the flow can be skipped due to the obtained tags, the user is directly forwarded to the target application.
type: com.airlock.iam.selfservice.application.configuration.ui.tokens.FidoCredentialManagementUiConfig
id: FidoCredentialManagementUiConfig-xxxxxx
displayName:
comment:
properties:
flowToChangeDisplayName:
flowToDeleteCredential:
flowToDisableCredential:
flowToEnableCredential:
flowToRegisterCredential:
pageExitTarget:
FIDO Credential Management UI Redirect
type: com.airlock.iam.selfservice.application.configuration.ui.tokens.FidoCredentialManagementFlowRedirectTargetConfig
id: FidoCredentialManagementFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
FIDO Credential Registered
type: com.airlock.iam.login.application.configuration.event.FidoCredentialRegisteredSubscribedEventConfig
id: FidoCredentialRegisteredSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
FIDO Credential Removal Possible
fidoSettings
) allowDeletingLastCredential
)
type: com.airlock.iam.selfservice.application.configuration.selection.condition.FidoCredentialDeletionPossibleConditionConfig
id: FidoCredentialDeletionPossibleConditionConfig-xxxxxx
displayName:
comment:
properties:
allowDeletingLastCredential: false
fidoSettings:
FIDO Credential Selection Step
fidoSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.FidoCredentialSelectionStepConfig
id: FidoCredentialSelectionStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fidoSettings:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
FIDO Custom AAGUID Mapping
aaguid
) Note that not all authenticators have an AAGUID. In particular, no U2F authenticators do.
description
)
type: com.airlock.iam.fido.application.configuration.authenticator.FidoCustomAaguidMappingConfig
id: FidoCustomAaguidMappingConfig-xxxxxx
displayName:
comment:
properties:
aaguid:
description:
FIDO Database Repository
sqlDataSource
) logQueries
) tenantId
) If no value is configured, then 'no_tenant' is used as value on the database.
persistTransports
) When enabled, the transports which were used for registering a credential will be persisted with the credential. During authentication this can be used to already select the correct transports, which can strongly improve the user experience.
When disabled, users have to select from all allowed transports, even if some of them are not supported by their credential.
To use this feature, the DB migration for release 8.4 must have been carried out.
type: com.airlock.iam.fido.application.configuration.FidoRepositoryConfig
id: FidoRepositoryConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
persistTransports: true
sqlDataSource:
tenantId:
FIDO Default AAGUID Mappings
type: com.airlock.iam.fido.application.configuration.authenticator.FidoDefaultAaguidMappingsConfig
id: FidoDefaultAaguidMappingsConfig-xxxxxx
displayName:
comment:
properties:
FIDO Passwordless Authentication Step
Step to identify and authenticate a user with a FIDO authenticator. This step is passwordless meaning that the user is not required to input a username nor a password in a previous step.
Passwordless authentication requires the use of resident key, where the key material is stored on the FIDO authenticator. This needs to be enforced at registration by ensuring that "Require Resident Key" in "FIDO Settings" is enabled. Please refer to the documentation for more details about the requirements of FIDO passwordless authentication. Furthermore, transports cannot be restricted in passwordless mode.
fidoSettings
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
This step can return the following error codes:
FIDO_AUTHENTICATION_FAILED
: The FIDO authentication failed for unspecified reasons (either in the browser/client or during server-side verification).FIDO_AUTHENTICATION_TIMEOUT
: The response from the browser/client has timed out.FIDO_AUTHENTICATION_ABORTED
: The authentication has been aborted in the browser/client.FIDO_AUTHENTICATION_NOT_ALLOWED
: The browser/client did not allow authentication with the given credentials.FIDO_WEB_AUTHN_NOT_AVAILABLE
: The client/browser is not capable of performing WebAuthn/FIDO authentication.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.fido.login.application.configuration.FidoPasswordlessAuthenticationStepConfig
id: FidoPasswordlessAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fidoSettings:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
FIDO Public Self-Service Approval Step
Step to approve an operation with FIDO.
Unlike identity verification steps, approval steps require an existing user and cannot prevent username enumeration (no stealth mode). Therefore, approval steps can only be used after an identity verification step.
FIDO approval does not allow verification of the data via a separate channel. If this additional level of security is required, use Airlock 2FA, Cronto or mTAN approval.
onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
This step can return the following error codes:
FIDO_APPROVAL_FAILED
: The FIDO approval failed for unspecified reasons (either in the browser/client or during server-side verification).FIDO_APPROVAL_TIMEOUT
: The response from the browser/client has timed out.FIDO_APPROVAL_ABORTED
: The approval has been aborted in the browser/client.FIDO_APPROVAL_NOT_ALLOWED
: The browser/client did not allow approval with the given credentials.FIDO_WEB_AUTHN_NOT_AVAILABLE
: The browser/client is not capable of performing WebAuthn/FIDO approval.NO_VALID_TOKEN
: The user has no eligible FIDO credential registered.
fidoSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.PublicSelfServiceFidoApprovalStepConfig
id: PublicSelfServiceFidoApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fidoSettings:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
FIDO Registration Step
Step to register a new credential on a FIDO authenticator.
fidoSettings
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
This step can return the following error codes:
FIDO_REGISTRATION_FAILED
: The FIDO registration failed for unspecified reasons (either in the browser/client or during server-side verification).FIDO_REGISTRATION_TIMEOUT
: The response from the browser/client has timed out.FIDO_REGISTRATION_ABORTED
: The registration has been aborted in the browser/client.FIDO_REGISTRATION_NOT_ALLOWED
: The browser/client did not allow registration with the given parameters.FIDO_REGISTRATION_NOT_POSSIBLE
: The selected credential could not be registered.FIDO_WEB_AUTHN_NOT_AVAILABLE
: The client/browser is not capable of performing WebAuthn/FIDO registration.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.fido.login.application.configuration.FidoRegistrationStepConfig
id: FidoRegistrationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fidoSettings:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
FIDO Self-Service Approval Step
Step to approve an operation with FIDO.
FIDO approval does not allow verification of the data via a separate channel. If this additional level of security is required, use Airlock 2FA, Cronto or mTAN approval.
onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
This step can return the following error codes:
FIDO_APPROVAL_FAILED
: The FIDO approval failed for unspecified reasons (either in the browser/client or during server-side verification).FIDO_APPROVAL_TIMEOUT
: The response from the browser/client has timed out.FIDO_APPROVAL_ABORTED
: The approval has been aborted in the browser/client.FIDO_APPROVAL_NOT_ALLOWED
: The browser/client did not allow approval with the given credentials.FIDO_WEB_AUTHN_NOT_AVAILABLE
: The browser/client is not capable of performing WebAuthn/FIDO approval.NO_VALID_TOKEN
: The user has no eligible FIDO credential registered.
fidoSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.FidoSelfServiceApprovalStepConfig
id: FidoSelfServiceApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fidoSettings:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
FIDO Settings
Note that FIDO can behave differently on different operating systems or browsers. Some browsers offer only limited support for FIDO. This might lead to some FIDO features not working on all browsers.
repository
) relyingPartyId
) The relying party ID (RPID) defines the scope of registered FIDO credentials. It determines the set of origins on which registered FIDO credentials may be used.
The RPID must either be the origin's domain or a registerable domain suffix. It is determined based on the fully-qualified domain name of the Airlock IAM (as seen by the browser or REST client).
Example:
- The browser communicates with IAM using the URLs of the form https://www.virtinc.com/auth/...
- The RPID can then be either "virtinc.com" or "www.virtinc.com".
- The RPID cannot be either of: "abc.virtinc.com", "com".
Caution: FIDO credentials are registered for a specific RPID and can only be used for this very RPID. The web domain can therefore not be changed without having to re-register the FIDO credentials!
If acceptable with your security requirements, we recommend to use only the domain suffix (e.g. "virtinc.com") as RPID. This gives you the freedom to use registered FIDO credentials on any subdomain (e.g. "login.virtinc.com" or "auth.viritinc.com").
relyingPartyName
) Name of the relying party. The name may be displayed by the web browser (or REST client).
If not defined, the relying party ID is used.
aaguidMappings
) The order is important since in case multiple FIDO authenticators are defined with the same AAGUID, only the last entry in the list will be considered. This allows to override default information provided by the plugin' FIDO Default AAGUID Mappings' when configured in the list.
userInformationProvider
) Specifies what user attribute (e.g. username, email address, etc.) is sent to the web browser (or REST client) during FIDO credential registration.
The user attribute is stored on the FIDO authenticator and may be displayed when using the registered FIDO credential. The stored user attribute cannot be changed on the FIDO authenticator, i.e. even if the attribute value changes in IAM (e.g. new email address), the value on the FIDO authenticator remains as it was during credential registration.
We strongly encourage to configure a User Information Provider if resident keys are required. This allows a user to easily identify and manage the credentials stored on the FIDO authenticator.
If no provider is configured or the configured provider provides no value, the string '-' is used.
Privacy warning: The user attribute is stored on the FIDO authenticator. IAM cannot influence how secure the information is stored.
requireResidentKey
) Requires that key material is stored on the FIDO authenticator ("residential key").
Important: Enabling or disabling this setting can have significant disadvantages depending on your use-case:
- when enabled: not all FIDO authenticators support this requirement (in particular no FIDO U2F authenticator). Users with such authenticators will not be able to register FIDO credentials. However, enabling this setting is mandatory for passwordless authentication with FIDO. If possible, it is therefore recommended to require residential keys, even if you have currently no plans to use passwordless authentication.
- when disabled: all FIDO authenticators can a priori be used (including older FIDO U2F authenticators). As mentioned above, the FIDO credentials registered with this setting cannot be used for passwordless authentication. If you later decide to use FIDO passwordless authentication, users will have to register new FIDO credentials after having enabled this setting.
allowedAuthenticatorType
) Restricts the FIDO authenticator types that can be used during FIDO credential registration.
Roaming authenticators are FIDO authenticators that can be used with different devices (e.g. USB sticks, devices using NFC or Bluetooth).
Bound authenticators are "built-in" FIDO authenticators that cannot be used with different devices (e.g. fingerprint-based in laptop or smartphone).
registrationUserVerificationPreference
) Tells the FIDO client (browser, REST client) whether user verification is required, preferred, or discouraged during FIDO credential registration.
"User verification" denotes the process by which a FIDO authenticator "locally" checks whether the key material may be accessed. Examples: fingerprint, PIN code, touching the authenticator.
- Required: User verification is required for a successful registration.
- Preferred: User verification is preferred but is not required for a successful registration. Whether or not user verification is actually performed depends on the FIDO authenticator.
- Discouraged: User verification should be avoided, but carrying it out will not fail registration. Whether or not user verification is actually performed depends on the FIDO authenticator.
Note that user verification can be configured separately for authentication.
attestationType
) Tells the FIDO client (browser, REST client), what kind of attestation is expected by Airlock IAM.
- Direct: The FIDO client (browser, REST client) must pass the attestation unaltered from the authenticator to Airlock IAM.
- Indirect: The FIDO client (browser, REST client) may replace the attestation from the FIDO authenticator (e.g. for privacy reasons).
- None: Indicates that Airlock IAM is not interested in attestation data and the FIDO client (browser, REST client) may replace the attestation from the FIDO authenticator with a fixed string as defined in the Web Authentication specification.
Security warning: to enforce the type of an attestation, an "Attestation Verifier" other than the "None (FIDO Attestation Verification)" plugin must be configured. Otherwise, there is no guarantee that the provided attestation is of the desired type.
attestationVerifier
) Defines how attestations and attestation certificates in particular are used to verify whether a FIDO authenticator is acceptable for registration or not.
This can be used, e.g. to restrict the set of allowed FIDO authenticators (i.e. only certain models and/or manufacturers).
The verification may be disabled by choosing the "None (FIDO Attestation Verification)" plugin.
registrationTimeout
) Maximum time in seconds a registration process may last.
The value is both passed to the FIDO client (web browser or REST client) as a hint and used for server-side verification.
Responses to FIDO registration challenges after the defined timeout are rejected by Airlock IAM.
autoGenerateDisplayName
) If enabled, the description of the AAGUID mapping is used as the display name during the registration flow. If no mapping matches, the display name is set to '-'.
The auto generated display name can be edited after the Fido Registration Step through a subsequent Fido Credential Display Name Change Step.
If disabled, the display name must be set explicitly during the registration flow.
authenticationUserVerificationPreference
) Tells the FIDO client (browser, REST client) whether user verification is required, preferred, or discouraged during an authentication with a FIDO credential .
"User verification" denotes the process by which a FIDO authenticator "locally" checks whether the key material may be accessed. Examples: fingerprint, PIN code, touching the authenticator.
- Required: User verification is required for a successful authentication.
- Preferred: User verification is preferred but is not required for a successful authentication. Whether or not user verification is actually performed depends on the FIDO authenticator.
- Discouraged: User verification should be avoided, but carrying it out will not fail registration. Whether or not user verification is actually performed depends on the FIDO authenticator.
Note that user verification can be configured separately for registration.
authenticationTimeout
) Maximum time in seconds an authentication or approval process may last.
The value is both passed to the FIDO client (web browser or REST client) as a hint and used for server-side verification.
Responses to FIDO verification challenges after the defined timeout are rejected by Airlock IAM.
allowedAuthenticationTransports
) Tells the FIDO client (browser, REST client) which transports should be displayed to the user to choose from. A successful FIDO authentication is also possible with an empty list of transports.
This configuration is ignored in FIDO passwordless mode.
Possible transports:
- ble - External Bluetooth Low Energy (BLE) device
- nfc - External NFC device
- usb - External USB device
- internal - e.g. fingerprint sensor
- hybrid - combination of transports (e.g. scan QR code and use the fingerprint reader on your phone)
- smart-card - ISO/IEC 7816 smart card
allowedAlgorithms
) Specifies the list of cryptographic algorithms to be used by FIDO authenticators to generate public and private key pairs during registration.
The order of the algorithms in the list defines the preference (first algorithm is most preferred by Airlock IAM).
Security warning: Usage of RS256 is not recommended for security reasons (see https://tools.ietf.org/html/rfc8812#section-2) and should only be configured for compatibility reasons if required. This is in particular the case if Windows Hello with bound authenticators needs to be supported.
- ES256: ECDSA with SHA-256
- EDDSA: Edwards-curve Digital Signature Algorithm (EdDSA)
- RS256: RSASSA-PKCS1-v1_5 using SHA-256
maximumAttestationObjectSizeInBytes
) Security warning: It is recommended to keep this value as low as possible, especially if the attestation provided during registration is not verified (the plugin "None (FIDO Attestation Verification)" is configured), in order to prevent persisting unnecessary data, which could result in a denial of service.
type: com.airlock.iam.fido.application.configuration.FidoSettingsConfig
id: FidoSettingsConfig-xxxxxx
displayName:
comment:
properties:
aaguidMappings:
allowedAlgorithms: [ES256, EDDSA]
allowedAuthenticationTransports:
allowedAuthenticatorType: ALL
attestationType: DIRECT
attestationVerifier:
authenticationTimeout: 60
authenticationUserVerificationPreference: PREFERRED
autoGenerateDisplayName: false
maximumAttestationObjectSizeInBytes: 6000
registrationTimeout: 300
registrationUserVerificationPreference: PREFERRED
relyingPartyId:
relyingPartyName:
repository:
requireResidentKey: true
userInformationProvider:
FIDO Token Controller
repository
) selectableAsActiveAuthMethod
) selectableAsNextAuthMethod
) aaguidMappings
) The order is important since in case multiple FIDO authenticators are defined with the same AAGUID, only the last entry in the list will be considered. This allows to override default information provided by the plugin' FIDO Default AAGUID Mappings' when configured in the list.
type: com.airlock.iam.admin.application.configuration.fido.FidoTokenControllerConfig
id: FidoTokenControllerConfig-xxxxxx
displayName:
comment:
properties:
aaguidMappings:
repository:
selectableAsActiveAuthMethod: true
selectableAsNextAuthMethod: true
Field Matching
firstField
) secondField
) translationKey
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.validation.MatchingFieldsValidationConfig
id: MatchingFieldsValidationConfig-xxxxxx
displayName:
comment:
properties:
firstField:
secondField:
translationKey:
File CRL Fetcher
crlFile
)
type: com.airlock.iam.core.misc.impl.cert.crl.FileCrlFetcher
id: FileCrlFetcher-xxxxxx
displayName:
comment:
properties:
crlFile:
File Crl Persister
cacheDir
)
type: com.airlock.iam.core.misc.impl.cert.crl.FileCrlPersister
id: FileCrlPersister-xxxxxx
displayName:
comment:
properties:
cacheDir:
Filter Pattern
nameTranslationKey
) regexpPatternString
)
type: com.airlock.iam.admin.application.configuration.logviewer.FilterPattern
id: FilterPattern-xxxxxx
displayName:
comment:
properties:
nameTranslationKey:
regexpPatternString:
Filtered Flow Event
Filters flow events based on the below defined properties.
If several of these properties are configured, all conditions must be met.
Note that the filter properties are only applicable to events that are emitted inside a flow. A subscriber will not be notified of an event that was emitted by a session-less REST call (i.e. end-points under /protected/my/ or the end-point /protected/secret-questions).
Use Case 1: You want to subscribe to all events (of the specified type) occurring in a protected self-service flow. Precondition: You have assigned each self-registration flow a flow ID starting with "prot-self-service-". E.g.: prot-self-service-address-change Required Pattern for Flow ID: prot-self-service-.*
Use Case 2: You want to subscribe to all events (of the specified type) NOT occurring in a self-registration flow. Precondition: You have assigned each self-registration flow a flow ID starting with "self-registration-". E.g.: self-registration-business-customers Required Pattern for Flow ID: ((?!self-registration-).)*
event
) stepIdPattern
) flowIdPattern
) requiredFlowType
)
type: com.airlock.iam.login.application.configuration.event.LoginappFilteredFlowEventConfig
id: LoginappFilteredFlowEventConfig-xxxxxx
displayName:
comment:
properties:
event:
flowIdPattern:
requiredFlowType:
stepIdPattern:
First Usage of Device
- No repository is configured
- No device could be determined (was not used in current flow)
- The device has been used before
tokenType
)
type: com.airlock.iam.flow.shared.application.configuration.device.usage.FirstDeviceUsageConditionConfig
id: FirstDeviceUsageConditionConfig-xxxxxx
displayName:
comment:
properties:
tokenType: AIRLOCK_2FA
Fixed TAN Generator Task
The following characteristics describe the task in detail:
- The current token list is replaced (not the next token list)
- No checks on the current token list are made (e.g. how many free tokens still exist)
- No checks on the user are made (e.g. if the user is valid, has matrix card as authentication method, etc.)
- The 'order new tokenlist' flag is disregarded
- Old token lists in the file system are deleted.
- An existing new token list is deleted. This list would have been created via the admin GUI or the TAN batch task.
- The token list is never rendered, but only inserted into the persistency layer.
Many properties are equal to the ones in TanBatchTask.
tokenListPersister
) tokensPerList
) hashFunctionPlugin
) The hash function used to hash the generated tokens. It must be the same (or hash value compatible) as used when generating the token lists.
targetUsername
) targetTokenValue
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.FixedTanGeneratorTask
id: FixedTanGeneratorTask-xxxxxx
displayName:
comment:
properties:
hashFunctionPlugin:
targetTokenValue:
targetUsername:
tokenListPersister:
tokensPerList:
Flash Parameter
parameterName
) parameterValue
)
type: com.airlock.iam.core.misc.impl.sms.FlashParameter
id: FlashParameter-xxxxxx
displayName:
comment:
properties:
parameterName:
parameterValue:
Flow Condition To Authentication Context Mapping
flowCondition
) authnContextUri
) The Authentication Context URI to be used if the configured flow condition is satisfied.
The available context classes are configured in the IDP extended metadata under the attribute "idpAuthncontextClassrefMapping". Only URIs in that list are valid to be set here.
type: com.airlock.iam.saml2.application.configuration.Saml2FlowConditionToAuthnContextMapping
id: Saml2FlowConditionToAuthnContextMapping-xxxxxx
displayName:
comment:
properties:
authnContextUri:
flowCondition:
Flow Condition-based OAuth 2.0 Scope Condition
Configures a OAuth 2.0 scope condition.
The scope is matched against the "Scope Matcher" pattern. A scope is allowed if it matches the regex and the condition is fulfilled.
scopeMatcher
) condition
)
type: com.airlock.iam.oauth2.application.configuration.scope.FlowConditionBasedOAuth2ScopeConditionConfig
id: FlowConditionBasedOAuth2ScopeConditionConfig-xxxxxx
displayName:
comment:
properties:
condition:
scopeMatcher:
Flow Condition-based OIDC ID Token ACR Value
acr
" (Authentication Context Class Reference) claim in the ID Token, if the flow authentication was used for the OpenID Connect handshake. Note that requesting ACR values is only supported using the "acr_values
" claim, but not using the "claims
" request parameter. mappings
) - If
acr_values
have been requested, they are matched in the requested order against these mappings. The first acr value for which a flow condition matches is used. - If no
acr_values
have been requested or none could be satisfied, this list is processed in order and the first acr value for which a flow condition matches is used. - If no acr value could be determined so far, the "Default ACR" value below is used (if any).
defaultAcr
)
type: com.airlock.iam.oauth2.application.configuration.OpenIdConnectAcrMappingClaimConfig
id: OpenIdConnectAcrMappingClaimConfig-xxxxxx
displayName:
comment:
properties:
defaultAcr:
mappings:
Flow Continuation Database Repository
sqlDataSource
) logQueries
) tenantId
) If no value is configured, then 'no_tenant' is used as value on the database.
type: com.airlock.iam.common.application.configuration.continuation.FlowContinuationRepositoryConfig
id: FlowContinuationRepositoryConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sqlDataSource:
tenantId:
Flow Continuation Step
X-Flow-Continuation-Token
. Based on the token, this step initializes the flow with the same data, e.g. user identity, as the flow that issued the token.Such a token is for example provided by a "Send Email Link Step".
repository
) consumesToken
) If enabled, the token will be immediately consumed when the flow step is executed.
If disabled, the token will be preserved until additional steps have been completed. A red flag is raised to ensure that the token will be consumed at a later step in the flow before termination.
In this case a "Flow Continuation Token Consumption Step" needs to be executed before the flow terminates.skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.FlowContinuationStepConfig
id: FlowContinuationStepConfig-xxxxxx
displayName:
comment:
properties:
consumesToken: true
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
repository:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Flow Continuation Token Clean-up Task
In order to minimize database locks, the task doesn't delete all expired tokens in one transaction but deletes the tokens in configurable batches.
repository
) keepExpiredTokens
) batchSize
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.continuation.FlowContinuationTokenCleanupTaskConfig
id: FlowContinuationTokenCleanupTaskConfig-xxxxxx
displayName:
comment:
properties:
batchSize: 1000
keepExpiredTokens: 7d
repository:
Flow Continuation Token Consumption Step
Non-interactive flow step that consumes the flow continuation token that was preserved in a previous "Flow Continuation Step" by disabling the "Immediate Token Consumption". This step also removes the corresponding red flag.
If no flow continuation token is available, this step will be skipped.
repository
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.FlowContinuationTokenConsumptionStepConfig
id: FlowContinuationTokenConsumptionStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
repository:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Flow ID
flowId
)
type: com.airlock.iam.flow.application.configuration.flow.FlowIdConfig
id: FlowIdConfig-xxxxxx
displayName:
comment:
properties:
flowId:
Flow Selection-based OIDC ID Token ACR Value
acr
" (Authentication Context Class Reference) claim in the ID Token. The flow selection is configured in "ACR to Flow Application ID Mapping" plugin. If no flow could be determined by the requested ACRs, the ID Token will not have a ACR claim. Note that requesting ACR values is only supported using the "acr_values
" claim, but not using the "claims
" request parameter.
type: com.airlock.iam.oauth2.application.configuration.OpenIdConnectDefaultAcrClaimConfig
id: OpenIdConnectDefaultAcrClaimConfig-xxxxxx
displayName:
comment:
properties:
Flow Step Sequence
steps
)
type: com.airlock.iam.flow.api.application.configuration.sequence.FlowStepSequence
id: FlowStepSequence-xxxxxx
displayName:
comment:
properties:
steps:
Flow-based Password Reset
targetFlowId
) passwordResetUrl
) ${token}
- the random continuation token${flowId}
- the ID of the target flow to continue${language}
- the correspondence language of the user (optional)
recipientAddress
) emailService
) subjectResourceKey
) bodyResourceKey
) repository
) tokenValidity
) The duration must be specified in the format "2d 4h 10m 5s" (any part can be omitted).
sendAsHtml
) If enabled, the password reset email will be sent as an HTML mail. Otherwise it will be sent as plain text.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
escapeHtmlValues
) HTML-escape all provided values if property Send As HTML is enabled.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
stringResourcesFile
) strings
, the language dependent files must be strings_de.properties
, strings_en.properties
, etc.
type: com.airlock.iam.admin.application.configuration.password.AdminappFlowPasswordResetConfig
id: AdminappFlowPasswordResetConfig-xxxxxx
displayName:
comment:
properties:
bodyResourceKey: flow-password-reset.email.body
emailService:
escapeHtmlValues: true
passwordResetUrl:
recipientAddress:
repository:
sendAsHtml: false
stringResourcesFile: strings
subjectResourceKey: flow-password-reset.email.subject
targetFlowId:
tokenValidity: 24h
Forbidden Characters Password Policy
forbiddenCharsPattern
) The defined pattern is used to match any occurrences in the password.
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyForbiddenCharsCheck
id: PwdPolicyForbiddenCharsCheck-xxxxxx
displayName:
comment:
properties:
forbiddenCharsPattern:
Form UI Element
autocomplete
) uiElements
) onSubmit
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableUiFormConfig
id: ConfigurableUiFormConfig-xxxxxx
displayName:
comment:
properties:
autocomplete: false
onSubmit:
uiElements:
Formatted Date And Time Context Data Custom Claim
contextDataName
) pattern
) timezone
) The timezone that should be used when formatting the date value. If nothing is configured the timezone of the server is taken.
claimName
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.claims.CustomContextDataDateAsStringClaimConfig
id: CustomContextDataDateAsStringClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
contextDataName:
pattern: yyyy-MM-dd
timezone:
Formatted LocalDate Context Data Custom Claim
contextDataName
) pattern
) claimName
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.claims.CustomContextDataLocalDateAsStringClaimConfig
id: CustomContextDataLocalDateAsStringClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
contextDataName:
pattern: yyyy-MM-dd
Fortinet Roles Configuration
returnGrantedUserRoles
) staticRoles
)
type: com.airlock.iam.servicecontainer.app.application.configuration.radius.FortinetRolesConfiguration
id: FortinetRolesConfiguration-xxxxxx
displayName:
comment:
properties:
returnGrantedUserRoles: true
staticRoles:
Forward Location Parameter Adder
Appends the ticket string as a query parameter to the URL to which the Loginapp UI redirects the user upon successful completion of an authentication flow.
Multiple 'Forward Location Parameter Adder' can be configured, all will be evaluated by the Loginapp UI.
This plugin only works in combination with the IAM Loginapp UI.
ticketParameterName
)
type: com.airlock.iam.login.application.configuration.idpropagation.ForwardLocationParameterAdderConfig
id: ForwardLocationParameterAdderConfig-xxxxxx
displayName:
comment:
properties:
ticketParameterName: sso
Futurae Server
serviceId
) The value is of the form 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.
authApiKey
) adminApiKey
) The Admin API key is different than the Auth API key, which is used to access the Auth API.
backEndUrl
) This URL is used by the back-end of IAM to connect to the Futurae API.
Note: When using a custom URL and a CSP, add exceptions for img-src and connect-src directives with the configured URL to it.
frontEndUrl
) This URL is used by the browser of the end user to access the Futurae API via the internet.
Note: When using a custom URL and a CSP, add exceptions for img-src and connect-src directives with the configured URL to it.
callTimeoutMs
) connectionPoolMaxSize
) trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
In any case, IAM will only establish an HTTPS connection to the Futurae server or its proxy if the server certificate issuer is trusted or the certificate itself is trusted according to the aforementioned definition of trust.
trustStorePassword
) keyStorePath
) keyStorePassword
) proxyUri
) proxyLoginUser
) proxyLoginPassword
)
type: com.airlock.iam.airlock2fa.application.configuration.FuturaeServerConfig
id: FuturaeServerConfig-xxxxxx
displayName:
comment:
properties:
adminApiKey:
authApiKey:
backEndUrl: https://api.futurae.com
callTimeoutMs: 10000
connectionPoolMaxSize: 50
frontEndUrl: https://api.futurae.com
keyStorePassword:
keyStorePath:
proxyLoginPassword:
proxyLoginUser:
proxyUri:
serviceId:
trustStorePassword:
trustStorePath:
Generated Username
usernameGenerator
)
type: com.airlock.iam.oauth2.application.configuration.accountregistration.GeneratedUsernameConfig
id: GeneratedUsernameConfig-xxxxxx
displayName:
comment:
properties:
usernameGenerator:
Generic ID Propagator
Generic Identity Propagator that allows creating a ticket string and adding it to the response.
ticketStringProvider
) Provides the string containing the information to be propagated.
Ensure that this provider never returns null
. The "Condition" property can be used to skip this identity propagation if there is nothing to propagate.
encoders
) ticketAdder
) condition
)
type: com.airlock.iam.login.application.configuration.idpropagation.GenericIdentityPropagationConfig
id: GenericIdentityPropagationConfig-xxxxxx
displayName:
comment:
properties:
condition:
encoders:
ticketAdder:
ticketStringProvider:
Generic LDAP Authentication Failure Mapper
- data 525 - user not found
- data 52e - invalid credentials
- data 530 - not permitted to logon at this time
- data 531 - not permitted to logon at this workstation
- data 532 - password expired
- data 533 - account disabled
- data 701 - account expired
- data 773 - user must reset password
- data 775 - user account locked
passwordChangeEnforced
) For the Microsoft Active Directory, the value "data 773" has proven to be a good value.
userLocked
) userInvalid
) For the Microsoft Active Directory, the value "data 701" has proven to be a good value.
credentialInactive
) For the Microsoft Active Directory, the value "data 530" has proven to be a good value.
type: com.airlock.iam.core.misc.impl.authen.ldap.GenericLdapAuthenticationFailureMapper
id: GenericLdapAuthenticationFailureMapper-xxxxxx
displayName:
comment:
properties:
credentialInactive:
passwordChangeEnforced:
userInvalid:
userLocked:
Generic Session Attribute String Provider Config
Those attributes are a generic way to store custom string values in the session. They are empty unless populated by custom code or by configuring a "SAML 2.0 Assertion String Attribute Importer" on the SAML 2.0 service provider.
key
) defaultValue
) failIfNull
)
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.GenericSessionAttributeStringProviderConfig
id: GenericSessionAttributeStringProviderConfig-xxxxxx
displayName:
comment:
properties:
defaultValue:
failIfNull: false
key:
Generic Session Attribute Value Map Provider Config
Those attributes are a generic way to store custom string values in the session. They are empty unless populated by custom code or by configuring a "SAML 2.0 Assertion String Attribute Importer" on the SAML 2.0 service provider.
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.GenericSessionAttributeValueMapProviderConfig
id: GenericSessionAttributeValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
Generic SSI Proof Predicate
The threshold value is compared to the value of the attribute using the specified relation.
name
) type
) thresholdValue
) providerKey
)
type: com.airlock.iam.ssi.application.configuration.GenericPredicateConfig
id: GenericPredicateConfig-xxxxxx
displayName:
comment:
properties:
name:
providerKey:
thresholdValue:
type:
Generic Step Result
Event that is published with every step result during flows.
All configured filters must apply ("AND" logic). To achieve "OR" logic, multiple subscribers can be configured.
This event can also be published while no user ID is known, thus make sure to either filter for flows/steps where a user ID is guaranteed to be known, or only use recipient address and value providers that don't require a known user ID.
stepIdFilter
) flowIdFilter
) flowTypeFilter
) resultTypeFilter
) nextActionFilter
) errorCodeFilter
)
type: com.airlock.iam.login.application.configuration.event.GenericStepResultSubscribedEventConfig
id: GenericStepResultSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
errorCodeFilter:
flowIdFilter:
flowTypeFilter:
nextActionFilter:
resultTypeFilter:
stepIdFilter:
Generic String SAML 2.0 Attribute
samlAttributeName
) valueProvider
) Provides the string value for the attribute.
The configured provider must be able to provide a string value. If null is provided, the attribute will be silently ignored.
nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.GenericStringAttributeConfig
id: GenericStringAttributeConfig-xxxxxx
displayName:
comment:
properties:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
samlAttributeName:
valueProvider:
Generic Token Controller
id
) Unique identifier for the token controller. Serves as token type ID in the REST interface.
This is also the "auth method" that is set on the user as active/next authentication method, i.e. it must match the "Authentication Method ID" of corresponding authentication flow steps.
Finally, this ID also determines the name (label) of this token controller in the Adminapp UI, as defined by the resource key 'user.auth-methods.type.generic.<id>', as well as the label for "auth method" specific lock reasons defined by the resource key 'user.account-state.LockReason.TooManyAuthAtts.<id>'.
Please note that the length of this ID must not be longer than 22 characters in order to comply with the default DB schema restrictions for column lock_reason.ui
) tokenEndpoint
) tokenEventType
) - NONE: no events are published (default)
- EMAIL: Events of type "Email Address Changed", "Email Address Added" and "Email Address Deleted" are published
- DEVICE_TOKEN: Events of type "Device Token Deleted" are published
allowedAsActiveAuthMethod
) allowedAsNewAuthMethod
) allowedForAuthMethodMigration
) autoOrderOnAuthMethodAdd
) autoOrderOnUserCreate
)
type: com.airlock.iam.admin.application.configuration.generic.GenericTokenControllerConfig
id: GenericTokenControllerConfig-xxxxxx
displayName:
comment:
properties:
allowedAsActiveAuthMethod: true
allowedAsNewAuthMethod: true
allowedForAuthMethodMigration: true
autoOrderOnAuthMethodAdd: false
autoOrderOnUserCreate: false
id:
tokenEndpoint:
tokenEventType: NONE
ui:
Generic Token Controller UI
uiElements
) showAddButton
) The visibility of the button depends on the configured access control and if the administrator has permission for this action.
showSaveButton
) The visibility of the button depends on the configured access control and if the administrator has permission for this action.
showDeleteButton
) The visibility of the button depends on the configured access control and if the administrator has permission for this action.
showEnableDisableButton
) The visibility of the button depends on the configured access control and if the administrator has permission for this action.
showActivationOrder
) showOrderCancelButton
) The visibility of the button depends on the configured access control and if the administrator has permission for this action.
type: com.airlock.iam.admin.application.configuration.generic.ui.GenericTokenControllerUiConfig
id: GenericTokenControllerUiConfig-xxxxxx
displayName:
comment:
properties:
showActivationOrder: true
showAddButton: true
showDeleteButton: true
showEnableDisableButton: true
showOrderCancelButton: true
showSaveButton: true
uiElements:
Generic Token Endpoint
tokenRepository
)
type: com.airlock.iam.admin.application.configuration.generic.TokenEndpointConfig
id: TokenEndpointConfig-xxxxxx
displayName:
comment:
properties:
tokenRepository:
Generic Token Service
tokenDataProvider
) typesToHandle
) containsMultiAssignmentTokens
) Enable if any of the tokens managed by this service can be assigned to more than one user simultaneously. This results in less efficient database queries but is necessary for those tokens.
All tokens currently managed by IAM are assigned to only a single user, with the exception of Vasco OTP tokens.
type: com.airlock.iam.core.misc.tokenservice.GenericTokenService
id: GenericTokenService-xxxxxx
displayName:
comment:
properties:
containsMultiAssignmentTokens: false
tokenDataProvider:
typesToHandle: [MTAN, SECRETQUESTION, CERTIFICATE, OAUTH2]
Goto Button UI Element
The Goto button is only shown if the 'Show Goto Buttons' flag on the flow UI config is enabled.
Notice: Goto buttons do not come with pre-defined labels. It is required to add i18n keys and values for each button manually.
targetStepId
) label
) alignment
) htmlId
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableUiGotoButtonConfig
id: ConfigurableUiGotoButtonConfig-xxxxxx
displayName:
comment:
properties:
alignment: RIGHT
htmlId:
label:
targetStepId:
Gzip Base64 Ticket Encoder
The keys/values in the ticket are encoded as described in
Example:
"medusaID=1234;uname=smith;roles=customer,employee;name1=value1;name2=value2;"
The ticket string (as above) is interpreted as byte array (ASCII encoding) from here on. The expiry date is appended to the ticket string: The milliseconds since midnight 01.01.1970 appended as 64 bit signed integer (MSB first).
type: com.airlock.iam.core.misc.util.ticket.codec.GzipBase64TicketEncoder
id: GzipBase64TicketEncoder-xxxxxx
displayName:
comment:
properties:
Has Cronto Account
crontoHandler
)
type: com.airlock.iam.authentication.application.configuration.selection.condition.CrontoAccountConditionConfig
id: CrontoAccountConditionConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
Has Cronto Device
crontoHandler
) requirePushDevice
) If this flag is set and there is no push-enabled device for the user, authentication is not possible.
This feature may be used for mobile application logins, where showing a cryptogram on the same device is not appropriate.
type: com.airlock.iam.authentication.application.configuration.selection.condition.HasCrontoDeviceConditionConfig
id: HasCrontoDeviceConditionConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
requirePushDevice: false
Has Device Token
deviceTokenSettings
)
type: com.airlock.iam.authentication.application.configuration.selection.condition.DeviceTokenConditionConfig
id: DeviceTokenConditionConfig-xxxxxx
displayName:
comment:
properties:
deviceTokenSettings:
Has Email Address
credentialPersister
)
type: com.airlock.iam.authentication.application.configuration.selection.condition.EmailOtpCredentialConditionConfig
id: EmailOtpCredentialConditionConfig-xxxxxx
displayName:
comment:
properties:
credentialPersister:
Has FIDO Credential
fidoSettings
)
type: com.airlock.iam.fido.login.application.configuration.FidoCredentialConditionConfig
id: FidoCredentialConditionConfig-xxxxxx
displayName:
comment:
properties:
fidoSettings:
Has Matching Role
roleProviders
) rolePattern
)
type: com.airlock.iam.flow.shared.application.configuration.condition.RoleMatchingConditionConfig
id: RoleMatchingConditionConfig-xxxxxx
displayName:
comment:
properties:
rolePattern:
roleProviders:
Has Matrix Card
tanService
)
type: com.airlock.iam.authentication.application.configuration.selection.condition.MatrixCredentialConditionConfig
id: MatrixCredentialConditionConfig-xxxxxx
displayName:
comment:
properties:
tanService:
Has mTAN Activation Letter
mtanHandler
)
type: com.airlock.iam.authentication.application.configuration.selection.condition.MtanHasActivationLetterConditionConfig
id: MtanHasActivationLetterConditionConfig-xxxxxx
displayName:
comment:
properties:
mtanHandler:
Has mTAN Token
mtanHandler
)
type: com.airlock.iam.authentication.application.configuration.selection.condition.MtanCredentialConditionConfig
id: MtanCredentialConditionConfig-xxxxxx
displayName:
comment:
properties:
mtanHandler:
Has OATH OTP Token
oathOtpSettings
)
type: com.airlock.iam.authentication.application.configuration.selection.condition.OathOtpCredentialConditionConfig
id: OathOtpCredentialConditionConfig-xxxxxx
displayName:
comment:
properties:
oathOtpSettings:
Has Password
type: com.airlock.iam.authentication.application.configuration.selection.condition.PasswordConditionConfig
id: PasswordConditionConfig-xxxxxx
displayName:
comment:
properties:
Has Suitable Airlock 2FA Device
Condition that is fulfilled if the user has at least one Airlock 2FA device that is active and capable of at least one of the allowed factors.
The allowed authentication factors are determined as the common factors between:
- The factors configured here. These factors are the same for all users.
- The factors that are enabled for the user in the Futurae administration service.
If bypass mode is not enabled in the Airlock 2FA settings, this condition will not be satisfied for users for which the Futurae bypass mode is enabled. If bypass mode is enabled in the Airlock 2FA settings, this condition will be satisfied for all users for which the Futurae bypass mode is enabled.
factors
) List of all enabled factors. The condition is fulfilled, if the user has at least one device that is capable of at least one of the factors listed here.
Available factors:
- One-Touch: a push message is sent to the user's mobile app, where it must be approved. This is an online factor.
- Online QR Code: a QR code is displayed in the browser, which has to be scanned by a mobile app and approved there. This is an online factor.
- Passcode: the device (mobile app or hardware token) generates a time-dependent code (OTP) that has to be entered manually. This is an offline factor.
- Offline QR Code: a QR code is displayed which has to be scanned by a mobile app or hardware token. The device displays a code (OTP) that must be entered manually. This is an offline factor.
airlock2faSettings
) Settings of Airlock 2FA.
It is recommended to use the same settings everywhere. Otherwise, behaviour of the condition could seem inconsistent.
respectCooldown
) Whether to ignore Cooldown information.
If disabled, the step ignores the "Cooldown Period" for new devices configured in the "Airlock 2FA Settings". This is typically used for authentication steps that protect low-risk applications, such as a portal page, which can also be accessed using devices in cooldown.
If no "Cooldown Period" is defined, enabling this property has no effect.
type: com.airlock.iam.airlock2fa.application.configuration.condition.Airlock2FAHasDeviceConditionConfig
id: Airlock2FAHasDeviceConditionConfig-xxxxxx
displayName:
comment:
properties:
airlock2faSettings:
factors: [One-Touch, Online QR Code, Passcode, Offline QR Code]
respectCooldown: true
Has Tag
tag
)
type: com.airlock.iam.flow.application.configuration.selection.condition.TagConditionConfig
id: TagConditionConfig-xxxxxx
displayName:
comment:
properties:
tag:
Has Vasco OTP Token
tokenDataProvider
)
type: com.airlock.iam.authentication.application.configuration.selection.condition.VascoOtpCredentialConditionConfig
id: VascoOtpCredentialConditionConfig-xxxxxx
displayName:
comment:
properties:
tokenDataProvider:
hCAPTCHA
- script-src https://hcaptcha.com https://*.hcaptcha.com
- frame-src https://hcaptcha.com https://*.hcaptcha.com
- style-src https://hcaptcha.com https://*.hcaptcha.com
- connect-src https://hcaptcha.com https://*.hcaptcha.com
siteKey
) The site key can be assumed to be public knowledge and identifies the associated hCAPTCHA account.
The site key can be found on the hCAPTCHA profile page.
secretKey
) The secret key is used to validate the CAPTCHA challenge response on the hCAPTCHA server. While a leaked secret key doesn't impact the security or validity of this CAPTCHA method, its misuse can infer costs as it is used for quota calculations at the CAPTCHA provider (similar to an API key).
The secret key can be found on the hCAPTCHA profile page.
proxyUri
) proxyLoginUser
) proxyLoginPassword
)
type: com.airlock.iam.flow.shared.application.configuration.captcha.HCaptchaConfig
id: HCaptchaConfig-xxxxxx
displayName:
comment:
properties:
proxyLoginPassword:
proxyLoginUser:
proxyUri:
secretKey:
siteKey:
Header URI Propagation Config
headerName
)
type: com.airlock.iam.login.application.configuration.location.propagate.HeaderURIPropagationConfig
id: HeaderURIPropagationConfig-xxxxxx
displayName:
comment:
properties:
headerName:
Hex Password Hash Encoder
type: com.airlock.iam.core.misc.util.password.hash.HexPasswordHashEncoder
id: HexPasswordHashEncoder-xxxxxx
displayName:
comment:
properties:
Hidden UI Element
value
) property
) htmlId
) submitToServer
) initialValueQuery
) See the JSONPath documentation for the full documentation: https://github.com/dchester/jsonpath
Examples:Assume the initial REST call returns the following JSON response:
{ "meta": { "type": "jsonapi.metadata.document", "timestamp": "2023-03-10T13:06:01.294+02:00" }, "data": [ { "type": "user", "id": "user1", "attributes": { "contextData": { "givenname": "User1", "surname": "FSMTest", "roles": "customerA" } } }, { "type": "user", "id": "user2", "attributes": { "contextData": { "givenname": "User2", "surname": "FSMTest", "roles": "customerB" } } } ] }
The following table shows the results of various JSONPath queries given the JSON above:
Description JSONPath Query Extracted Initial Value Static path from the root $.meta.type jsonapi.metadata.document The role of the user whose id equals "user1" $.data[?(@.id == 'user1')].attributes.contextData.roles customer The number of users $.data.length 2 All "givenname" attributesNote:
This query yields multiple results.
The first one is set to the initial value, the rest is discarded. $..givenname User1
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableHiddenFieldConfig
id: ConfigurableHiddenFieldConfig-xxxxxx
displayName:
comment:
properties:
htmlId:
initialValueQuery:
property:
submitToServer: true
value:
History Password Hash
It encodes password history information in a list of password hashes.
The plugin can be configured to base64-encode the resulting hash value.
Note that this plugin does also implement the extension point PasswordHash, i.e. it can be used to verify passwords. Further, the plugin can operate on both plain hash values without history and on hash values produced by itself containing history information. Thus, the plugin can be used when introducing the password history on existing data (without password history) without having to migrate the data.
The code verifying passwords must not know of the new concept "password history". The changing a password (or setting one), however, must use the corresponding methods of extension point "PasswordHashWithHistory".
passwordHash
) Since the hash value of the configured password hash plugin is considered binary data in any case and base64-encoding is added later (optional, see other configuration property), it does not make much sense to use a password hash function that returns a base64-encoded hash value. It will work but it will make the resulting hash value longer.
encodeBase64
) maxHistoryLength
) Defines the maximum number of passwords stored in the history for a single user.
A value of 5, for example, means that the five most recently set passwords are stored, excluding the currently hashed password.
Note that the maximum size of the password history is also limited by the capacity of the "pwd_hash" column in the table "medusa_user". To ensure that users do not run into errors when trying to change their password, you should set the history length low enough to avoid exceeding the character limit of the "pwd_hash" database column. By default, this is a limit of 4000 characters.
Some password hash algorithms (for example, encrypted hashes) produce much longer entries for the password history than others.
caseInsensitiveStorage
) This feature is implemented by simply converting the passwords to uppercase before hashing them.
alsoTryUpperCase
) If enabled, user-supplied passwords will not only be checked exactly as entered but also in uppercase to allow case-insensitive matching.
Leave this setting enabled when disabling case insensitive storage later on to still recognize the previously stored passwords.
type: com.airlock.iam.core.misc.util.password.hash.PasswordHistoryHash
id: PasswordHistoryHash-xxxxxx
displayName:
comment:
properties:
alsoTryUpperCase: false
caseInsensitiveStorage: false
encodeBase64: true
maxHistoryLength: 5
passwordHash:
History Password Policy
The number of "forbidden" used passwords (= the password history length) is defined by the password hash plugin passed to this plugin when performing the check.
IMPORTANT: If using this policy check, the used password hash function must support password histories. Use the "History Password Hash" plugin.
Performance considerations: For every entry in the password history a hash will be calculated. With growing password history length (the maximum of which is configured in "History Password Hash") the performance of this check degrades linearly.
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyHistoryCheck
id: PwdPolicyHistoryCheck-xxxxxx
displayName:
comment:
properties:
HSM Keystore
securityProviderName
) keystoreType
) keystoreFile
) This property only has to be set if the keystore is file-based. In any other case it should be left empty.
keystorePassword
)
type: com.airlock.iam.core.misc.util.crypto.keystore.HsmKeystoreConfig
id: HsmKeystoreConfig-xxxxxx
displayName:
comment:
properties:
keystoreFile:
keystorePassword:
keystoreType:
securityProviderName:
HTML String Escaper
Escapes a string to be safely used inside an HTML string.
type: com.airlock.iam.common.application.configuration.encoder.HtmlStringEscaperConfig
id: HtmlStringEscaperConfig-xxxxxx
displayName:
comment:
properties:
HTTP Basic Auth Identity Propagator
This propagator only works together with Airlock Gateway (WAF). It uses the control API to propagate username and password.
controlCookieName
) usernameProperty
) The username to be used for identity propagation.
Possible values are:- The special keyword "
@username
" to use the effective username of the authenticated user. - The prefix "
STATIC:...
" to use a fixed value every time. The part after the prefix "STATIC:" is used for all users.
For example: "STATIC:techaccount
" means that the username "techaccount
" is used for all users. - The name of a context data field read from persistency (for example "
context_data
"). Make sure to also configure the same value in the persister.
passwordProperty
) The name of the context key holding the password to be used for identity propagation. It only works if the password is stored in the session ticket (must be activated in the Security Settings).
Possible values are:- The special keyword "
@password
" to use the password the user entered during authentication.
Note that depending on the authentication scheme, there is no such password (e.g. when using client certificates). - The special keyword "
@roles
" to use the user's roles as the password. The roles are represented as comma-separated list (e.g. "admin,empoloyee,user").
Notice: If there are users with no roles and basic-auth headers with no passwords are accepted by the backend, the property "Allow Empty Passwords" must be enabled. - The prefix "
STATIC:...
" to use a fixed value every time. The part after the prefix "STATIC:" is used for all users.
For example: "STATIC:techpwd
" means that the password "techpwd
" is used for all users. - The name of a context data field read from persistency (for example "
context_data
"). Make sure to also configure the same value in the persister.
allowEmptyPasswords
) encoding
) targetMappingName
)
type: com.airlock.iam.core.misc.impl.sso.HttpBasicAuthIdentityPropagator
id: HttpBasicAuthIdentityPropagator-xxxxxx
displayName:
comment:
properties:
allowEmptyPasswords: false
controlCookieName: AL_CONTROL
encoding: UTF-8
passwordProperty: @password
targetMappingName:
usernameProperty: @username
HTTP Basic Authentication Step
An authentication flow step that verifies a username/password combination using HTTP Basic Authentication.
If there are no preceding interactive steps in the flow, a request to one of the .../access endpoints with the HTTP Basic Authentication credentials header will automatically be handled by this step. This allows for completely non-interactive flows that are started with an "access" request and are immediately completed successfully, provided the HTTP Basic Authentication credentials are valid.
passwordRepository
) realm
) charsetName
) policyToCheckOnLogin
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
passwordAttributeKey
) The optional key under which this password will be available in the identity propagation.
The value can also be retrieved from the session using the "User Passwords Map" value map provider.
If no key is configured, the password cannot be used by identity propagators.
Important: Multiple Password Authentication steps or Mandatory Password Change steps which have the same value for this property might override each others passwords.
If you have configured a Mandatory Password Change step, you might consider using the same key.
Note: This feature will not work together with end-to-end encryption.
passwordChangeRedFlag
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.password.HttpBasicAuthenticationStepConfig
id: HttpBasicAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: PASSWORD
charsetName: ISO-8859-1
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
passwordAttributeKey:
passwordChangeRedFlag:
passwordRepository:
policyToCheckOnLogin:
preCondition:
realm: default
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
HTTP Client Config
connectTimeout
) basicAuthCredentials
) verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) The password must be provided if a trust store is specified.
proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) userAgent
) correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
type: com.airlock.iam.core.misc.util.httpclient.HttpClientConfig
id: HttpClientConfig-xxxxxx
displayName:
comment:
properties:
allowOnlyTrustedCerts: true
basicAuthCredentials:
connectTimeout: 30
correlationIdHeaderName:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
userAgent:
verifyServerHostname: true
HTTP Client With Client Certificate
keyStorePath
) keyStoreType
) keyStorePassword
) The password must be provided if a key store is specified.
privateKeyPassword
) connectTimeout
) basicAuthCredentials
) verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) The password must be provided if a trust store is specified.
proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) userAgent
) correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
type: com.airlock.iam.core.misc.util.httpclient.HttpClientWithClientAuthConfig
id: HttpClientWithClientAuthConfig-xxxxxx
displayName:
comment:
properties:
basicAuthCredentials:
connectTimeout: 30
correlationIdHeaderName:
keyStorePassword:
keyStorePath:
keyStoreType: JKS
privateKeyPassword:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
userAgent:
verifyServerHostname: true
HTTP GET Step
targetApplicationLoginPageUrl
) queryParameters
) If the query parameter is already defined in the target URL, the value defined through this configuration will be added to the existing values.
If the same parameter name is configured multiple times, the values will be added to the existing values in order of the configured list.
onBehalfLoginStepValidator
) additionalHeaders
)
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.HttpGetOnBehalfLoginStep
id: HttpGetOnBehalfLoginStep-xxxxxx
displayName:
comment:
properties:
additionalHeaders:
onBehalfLoginStepValidator:
queryParameters:
targetApplicationLoginPageUrl:
HTTP Header
name
) value
)
type: com.airlock.iam.login.app.misc.configuration.oneshot.HTTPHeader
id: HTTPHeader-xxxxxx
displayName:
comment:
properties:
name:
value:
HTTP Header Identity Propagator
This propagator only works together with the Airlock Gateway. Using the control API (control cookie), this identity propagator plugin stores one or more HTTP headers with information selected from the authentee (username, roles, context-data) or statically configured values in the Airlock header. Each header can be stored on one or more specific Gateway mappings or on all mappings. Airlock then appends HTTP header(s) to back-end requests of the corresponding mapping(s) so the back-end(s) can use it/them.
controlCookieName
) headers
)
type: com.airlock.iam.core.misc.impl.sso.HttpHeaderIdentityPropagator
id: HttpHeaderIdentityPropagator-xxxxxx
displayName:
comment:
properties:
controlCookieName: AL_CONTROL
headers:
HTTP Header Token Extractor (as SSO Credential)
Extracts a token from an HTTP header, decodes it using the specified ticket decoder (e.g. JWT) and provides a "Single-Sign-On-Credential" to the authenticator.
This extractor can be used to verify JWTs in "Authorization" headers (to remove the "Bearer "-Prefix from the header value use "Header Value Conversion Pattern" and "Header Value Conversion Replacement").
This extractor can only be used with authenticators that are able to process Single-Sign-On-Credentials (e.g. the "SSO Credential Authenticator").
headerName
) urlEncodingScheme
) decoder
) usernameKey
) rolesKey
) contextProperties
) headerValueConversionPattern
) Regular expression pattern containing a group (a section in parentheses) that can be used in conjunction with property "Header Value Conversion Replacement" in order to transform the header value before it is decoded. If the header value does not match the pattern at all, no transformation is performed.
Example: The pattern "^Bearer (.*)$" and the replacement pattern "$1" will transform the header value "Bearer ABCD1234" to "ABCD1234" before it is decoded.
headerValueConversionReplacement
)
type: com.airlock.iam.login.app.misc.configuration.oneshot.HttpHeaderTokenExtractorConfig
id: HttpHeaderTokenExtractorConfig-xxxxxx
displayName:
comment:
properties:
contextProperties:
decoder:
headerName:
headerValueConversionPattern:
headerValueConversionReplacement:
rolesKey: roles
urlEncodingScheme: UTF-8
usernameKey: username
HTTP Header Token Extractor (as Token Credential)
Extracts a value from a specified HTTP header and provides it to the authenticator as "Token Credential".
This extractor is suitable for authenticators that are able to process token credentials, such as the "Token Authenticator" or the "OAuth 2.0 Access Token Authenticator".
headerName
)
type: com.airlock.iam.login.app.misc.oneshot.impl.HeaderTokenCredentialExtractorFactory
id: HeaderTokenCredentialExtractorFactory-xxxxxx
displayName:
comment:
properties:
headerName:
HTTP Instance Digest Verification
allowedAlgorithms
) auditLogger
) Security Warning: Request bodies often contain sensitive information and should therefore not be logged. If this feature is enabled, it is highly recommended that these logs are redirected to a special destination using the Logger Name.
type: com.airlock.iam.login.app.misc.oneshot.impl.HttpInstanceDigestVerificationConfig
id: HttpInstanceDigestVerificationConfig-xxxxxx
displayName:
comment:
properties:
allowedAlgorithms:
auditLogger:
HTTP Parameter
name
) value
)
type: com.airlock.iam.core.misc.util.httpclient.HttpParameter
id: HttpParameter-xxxxxx
displayName:
comment:
properties:
name:
value:
HTTP Parameter Context Extractor Pattern
pattern
) configurationContext
) Use "[DEFAULT]" to explicitly return the default context.
type: com.airlock.iam.core.misc.util.context.ContextPatternForHttpParameterContextExtractor
id: ContextPatternForHttpParameterContextExtractor-xxxxxx
displayName:
comment:
properties:
configurationContext:
pattern:
HTTP Password Service
passwordChangeUrl
) See note in plug-in description when using SSL (HTTPS instead of HTTP).
httpParamUsername
) userPersister
) userDataParams
) staticParams
) In many cases, the submit button value must be sent to an application to make it think that the button has been pressed.
httpParamOldPassword
) httpParamNewPassword
) expectedResponseStatusCode
) The response status code is always being checked on password changes. A password change is successful if the response status code equals the expected status code. Additionally a pattern can be searched in the response body using the "expected response body pattern" configuration property.
expectedResponseBodyPattern
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
connectTimeout
) correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
)
type: com.airlock.iam.core.misc.impl.authen.HttpPasswordService
id: HttpPasswordService-xxxxxx
displayName:
comment:
properties:
allowOnlyTrustedCerts: true
connectTimeout: 10
correlationIdHeaderName:
expectedResponseBodyPattern:
expectedResponseStatusCode: 200
httpParamNewPassword:
httpParamOldPassword:
httpParamUsername:
passwordChangeUrl:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
staticParams:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
userDataParams:
userPersister:
verifyServerHostname: true
HTTP POST Step
targetUrl
) postParameters
) httpParameterEncoding
) queryParameters
) If the query parameter is already defined in the target URL, the value defined through this configuration will be added to the existing values.
If the same parameter name is configured multiple times, the values will be added to the existing values in order of the configured list.
onBehalfLoginStepValidator
) additionalHeaders
)
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.HttpPostOnBehalfLoginStep
id: HttpPostOnBehalfLoginStep-xxxxxx
displayName:
comment:
properties:
additionalHeaders:
httpParameterEncoding: UTF-8
onBehalfLoginStepValidator:
postParameters:
queryParameters:
targetUrl:
HTTP Query Parameter Context Extractor
Notices:
- This extractor matches on any request to the UI application (/ui/app/*) but not other (usually static) /ui resources
- Most REST requests are POST requests and usually do not contain any query parameters. This context extractor can not analyze the contents of the POST requests
- Only for legacy servlets (e.g. Cronto Servlets), this extractor also matches on form POST parameters
httpParameterName
) fallbackContext
) Leave empty to implicitly use the default context. If this plugin is used within a "Combining Context Extractor", use "[DEFAULT]" to explicitly return the default context if necessary.
parameters
)
type: com.airlock.iam.core.misc.util.context.HttpParameterContextExtractor
id: HttpParameterContextExtractor-xxxxxx
displayName:
comment:
properties:
fallbackContext:
httpParameterName:
parameters:
HTTP Request Body Is Present
type: com.airlock.iam.login.app.misc.oneshot.impl.HttpRequestBodyPresentConditionConfig
id: HttpRequestBodyPresentConditionConfig-xxxxxx
displayName:
comment:
properties:
HTTP Request Client IP Extractor
httpHeaderName
) The HTTP header name must be identical to the configured HTTP header name on the proxy in front of IAM. HTTP header names are case-insensitive. The first header matching this configuration is processed. If the header value has multiple coma-separated IP addresses the first value is considered. If no matching header or no valid IP address is found, the IP address of the request source is used.
The HTTP header name consists of any visible ASCII characters except: "(),/:;<=>?@[\]{}".
ignorePrivateIpAddresses
) The X-Forwarded-For header may contain multiple comma-separated IP addresses of proxies before IAM. Public and private IP addresses are allowed in this header. When this option is:
- checked: the first public IP address is used. Potential private IP addresses before the public IP address are ignored.
- unchecked: the first public or private IP address is used.
type: com.airlock.iam.common.application.configuration.gateway.extractor.ClientIpExtractorConfig
id: ClientIpExtractorConfig-xxxxxx
displayName:
comment:
properties:
httpHeaderName: X-Forwarded-For
ignorePrivateIpAddresses: false
HTTP Request Header Is Present
httpSignatureHeader
)
type: com.airlock.iam.login.app.misc.oneshot.impl.HttpRequestHeaderPresentConditionConfig
id: HttpRequestHeaderPresentConditionConfig-xxxxxx
displayName:
comment:
properties:
httpSignatureHeader:
HTTP Request Header Value Provider
Only the current request is considered. In case the same header was set in a previous request, but not the current one, the value provider will provide no value.
headerName
) allowedHeaderValuePattern
)
type: com.airlock.iam.common.application.configuration.valueprovider.HttpRequestHeaderStringValueProviderConfig
id: HttpRequestHeaderStringValueProviderConfig-xxxxxx
displayName:
comment:
properties:
allowedHeaderValuePattern: [a-zA-Z0-9 ._-]+
headerName:
HTTP Request ID Extractor
httpHeaderName
) The HTTP header name must be identical to the configured HTTP header name on the proxy in front of IAM. HTTP header names are case-insensitive. If multiple identical HTTP header names are present, only the first one is considered. The HTTP header value is expected to be a single-value string.
The HTTP header name consists of any visible ASCII characters except delimiters "(),/:;<=>?@[\]{}".
type: com.airlock.iam.common.application.configuration.gateway.extractor.RequestIdExtractorConfig
id: RequestIdExtractorConfig-xxxxxx
displayName:
comment:
properties:
httpHeaderName: X-Request-ID
HTTP Request Information Map
Provides information about the current HTTP request.
Currently, the following values are provided:
- client-ip: IP address of the client which issued the HTTP request (if available). Can be either IPv4 or IPv6.
- client-ip-v4: IPv4 address of the client which issued the HTTP request (if IPv4 address information is available).
- client-ip-v6: IPv6 address of the client which issued the HTTP request (if IPv6 address information is available).
- session-id: ID of the session on the Gateway. Not available if no Gateway is used.
- request-id: ID of the request on the Gateway. Not available if no Gateway is used.
- correlation-id: Correlation ID of the request (if any).
- request-url: URL of the HTTP request.
The following additional values can be provided, if a geolocation provider is configured in the Loginapp:
- client-latitude: Geographical latitude coordinate (WGS84) of the client based on its IP.
- client-longitude: Geographical longitude coordinate (WGS84) of the client based on its IP.
- client-continent: Continent of the client based on its IP. Two-character code:
- Asia: AS
- South America: SA
- North America: NA
- Africa: AF
- Europe: EU
- Antarctica: AN
- Oceania: OC
- client-country: Country of the client based on its IP. Two-character ISO 3166-1 ALPHA-2 code.
- client-subdivision: Geographical subdivision of the client based on its IP. Up to three characters describing the subdivision part of the ISO 3166-2 code (state/district/canton, ...).
- client-city: City of the client based on its IP.
- client-zip: Postal code (ZIP) of the client based on its IP.
- client-timezone: Time Zone of the client based on its IP.
MaxMind geolocation example values (in the order listed above): 37.386, -122.0838, NA, US, CA, Mountain View, 94040, America/Los_Angeles
.
With custom geolocation providers, the format of these values might differ, and even with a geolocation provider configured, all values are optional.
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.HttpRequestInformationValueMapProviderConfig
id: HttpRequestInformationValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
HTTP Request mTLS Client Certificate Extractor
The plugin allows certificates to be extracted from various request headers.
httpHeaderName
) The HTTP header name must be identical to the configured HTTP header name on the proxy in front of IAM. HTTP header names are case-insensitive. The first value of the first header received is considered. The received header value is extracted using the configured extraction format.
The HTTP header name consists of any visible ASCII characters except delimiters "(),/:;<=>?@[\]{}".
extractionFormat
)
type: com.airlock.iam.common.application.configuration.gateway.extractor.RequestMtlsClientCertificateExtractorConfig
id: RequestMtlsClientCertificateExtractorConfig-xxxxxx
displayName:
comment:
properties:
extractionFormat:
httpHeaderName: X-Forwarded-mTLS-Client-Cert
HTTP Request URL Extractor
httpHeaderName
) The HTTP header name must be identical to the configured HTTP header name on the proxy in front of IAM. HTTP header names are case-insensitive. If multiple identical HTTP header names are present, only the first one is considered. The expected HTTP header value is a valid request URL which complies to RFC 2396.
The HTTP header name consists of any visible ASCII characters except delimiters "(),/:;<=>?@[\]{}".
type: com.airlock.iam.common.application.configuration.gateway.extractor.RequestUrlExtractorConfig
id: RequestUrlExtractorConfig-xxxxxx
displayName:
comment:
properties:
httpHeaderName: X-URL
HTTP Response Header Identity Propagator
headers
)
type: com.airlock.iam.core.misc.impl.sso.ResponseHeaderIdentityPropagator
id: ResponseHeaderIdentityPropagator-xxxxxx
displayName:
comment:
properties:
headers:
HTTP Signature Algorithm Whitelist
allowedSignatureAlgorithms
)
type: com.airlock.iam.login.app.misc.oneshot.impl.HttpSignatureAlgorithmWhitelistConfig
id: HttpSignatureAlgorithmWhitelistConfig-xxxxxx
displayName:
comment:
properties:
allowedSignatureAlgorithms:
HTTP Signature Audit Logger
loggerName
) This property can be used to redirect the logs to a specific Log4J Logger. In the Log4J configuration this name can be used as follows:
<Logger name="ConfiguredLoggerName" level="INFO" additivity="false">
<AppenderRef ref="SECURED-LOG-DESTINATION"/>
</Logger>
additivity="false"
is used to filter messages from going to other appenders via the <Root>
logger.
Please refer to the customer documentation for details on logging configuration.
type: com.airlock.iam.login.app.misc.oneshot.impl.HttpSignatureAuditLoggerConfig
id: HttpSignatureAuditLoggerConfig-xxxxxx
displayName:
comment:
properties:
loggerName:
HTTP Signature Static X.509 Certificate Loader
pemCertificate
)
type: com.airlock.iam.login.app.misc.oneshot.impl.HttpSignatureStaticX509CertificateLoaderConfig
id: HttpSignatureStaticX509CertificateLoaderConfig-xxxxxx
displayName:
comment:
properties:
pemCertificate:
HTTP Signature Verification Credential Extractor
digest
) signatureHeadersVerifications
) This allows to enforce certain data to be included/excluded in the signature.
requestLineHeader
) RequestHeader set AL_ENV_REQUEST_LINE expr=%{THE_REQUEST}
httpSignatureCertificateLoader
) trustStorePath
) - JKS
- PKCS12
trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
certificateStatusCheckers
) Security warning: The revocation status is only checked for the leaf certificate. Issuer certificates are not checked for revocation. If revocation checks for issuer certificates are required, these must be performed by the administrative process that manages the IAM truststore, see property 'Trust Store Path'.
credentialExtractor
) httpSignatureAlgorithmVerifier
) credentialVerifier
) auditLogger
) Security Warning: Signing strings contain request headers which often contain sensitive information and should therefore not be logged. If this feature is enabled, it is highly recommended that these logs are redirected to a special destination using the Logger Name.
type: com.airlock.iam.login.app.misc.oneshot.impl.HttpSignatureVerificationCredentialExtractorConfig
id: HttpSignatureVerificationCredentialExtractorConfig-xxxxxx
displayName:
comment:
properties:
auditLogger:
certificateStatusCheckers:
credentialExtractor:
credentialVerifier:
digest:
httpSignatureAlgorithmVerifier:
httpSignatureCertificateLoader:
requestLineHeader: AL_ENV_REQUEST_LINE
signatureHeadersVerifications:
trustStorePassword:
trustStorePath:
HTTP Signature X.509 Certificate Header Loader
headerName
)
type: com.airlock.iam.login.app.misc.oneshot.impl.HttpSignatureX509CertificateHeaderLoaderConfig
id: HttpSignatureX509CertificateHeaderLoaderConfig-xxxxxx
displayName:
comment:
properties:
headerName:
HTTP Signature X.509 Certificate URL Loader
httpClientConfig
) maximumCacheSize
) A maximum cache size of 0 disables the cache.
type: com.airlock.iam.login.app.misc.oneshot.impl.HttpSignatureX509CertificateHttpUrlLoaderConfig
id: HttpSignatureX509CertificateHttpUrlLoaderConfig-xxxxxx
displayName:
comment:
properties:
httpClientConfig:
maximumCacheSize: 1000
HTTP SMS Gateway
httpMethod
) serviceUri
) messageParameter
) recipientParameter
) originatorParameter
) flashParameter
) httpParameters
) successfulResponsePattern
) truncatePlusSign
) basicAuthUsername
) basicAuthPassword
) urlEncoding
) proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
connectTimeout
) Therefore, a connection may take a maximum of twice this time until it is aborted.
correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
visiblePhoneNumberDigitsInLog
) Defines the number of phone number digits visible in log statements.
Thus, if the value is zero, all digits are masked, if it is large enough, all digits are visible. If set to 3, for example, the logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.core.misc.impl.sms.GenericHttpSmsGateway
id: GenericHttpSmsGateway-xxxxxx
displayName:
comment:
properties:
allowOnlyTrustedCerts: true
basicAuthPassword:
basicAuthUsername:
connectTimeout: 10
correlationIdHeaderName:
flashParameter:
httpMethod: GET
httpParameters:
messageParameter:
originatorParameter:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
recipientParameter:
serviceUri:
successfulResponsePattern:
truncatePlusSign: false
trustStorePassword:
trustStorePath:
trustStoreType: JKS
urlEncoding: UTF-8
verifyServerHostname: true
visiblePhoneNumberDigitsInLog: 100
IAM Username (Airlock 2FA Account Display Name)
type: com.airlock.iam.airlock2fa.application.configuration.enrollment.Airlock2FAIamUsernameDisplayNameProviderConfig
id: Airlock2FAIamUsernameDisplayNameProviderConfig-xxxxxx
displayName:
comment:
properties:
ID Token Claim
Note that the authorization server may not support requesting the configured claim (or requesting claims at all).
claim
) values
) If multiple values are configured, the request indicates that the claim should be returned with one of the given values. The values in the request appear in order of preference.
If not configured, the claim is requested without a restriction on its value.requirement
) - Essential: the claim is necessary to ensure a smooth authorization experience for the specific task requested by the end-user.
- Voluntary: the claim is useful but not essential for the specific task requested by the end-user
type: com.airlock.iam.oauth2.application.configuration.IdTokenClaimConfig
id: IdTokenClaimConfig-xxxxxx
displayName:
comment:
properties:
claim:
requirement: ESSENTIAL
values:
Identity Attribute Mapping
This plugin forwards all entries unchanged and works with all token repositories.
type: com.airlock.iam.admin.application.configuration.generic.IdentityAttributeMapping
id: IdentityAttributeMapping-xxxxxx
displayName:
comment:
properties:
Identity Password Hash
charset
)
type: com.airlock.iam.core.misc.util.password.hash.IdentityPasswordHash
id: IdentityPasswordHash-xxxxxx
displayName:
comment:
properties:
charset: UTF-8
Identity Username Transformer
type: com.airlock.iam.core.misc.impl.authen.IdentityUsernameTransformer
id: IdentityUsernameTransformer-xxxxxx
displayName:
comment:
properties:
Identity Value Provider Config
identityGenerator
)
type: com.airlock.iam.common.application.configuration.valueprovider.IdentityValueProviderConfig
id: IdentityValueProviderConfig-xxxxxx
displayName:
comment:
properties:
identityGenerator:
IdP-Initiated SSO Flow On SP
This can be used to distinguish between a local login attempt and an IdP-initiated attempt within the same authentication flow. The IdP can select a specific authentication flow by sending a Relay State whose contents are matched against the flow's Application Selector.
type: com.airlock.iam.saml2.application.configuration.sp.Saml2IdpInitiatedSsoConditionConfig
id: Saml2IdpInitiatedSsoConditionConfig-xxxxxx
displayName:
comment:
properties:
Ignore Existing User Sessions Config
type: com.airlock.iam.login.application.configuration.existingsessionbehavior.IgnoreExistingUserSessionsConfig
id: IgnoreExistingUserSessionsConfig-xxxxxx
displayName:
comment:
properties:
Impossible Journey Risk Extractor
- This risk extractor depends on the user identity. Make sure to place the corresponding Risk Assessment Step after the user-identifying step (e.g. the Password Authentication Step) in the authentication flow.
- This plugin requires that a Login History Repository is configured in the Authentication Flows configuration.
- This plugin requires a geolocation provider supplying longitude and latitude to be configured in Loginapp's REST settings.
maximumTravelSpeed
) minimalTravelDistance
) tagsOnImpossibleJourney
) tagsOnPlausibleJourney
)
type: com.airlock.iam.authentication.application.configuration.risk.extractor.journey.ImpossibleJourneyRiskExtractorConfig
id: ImpossibleJourneyRiskExtractorConfig-xxxxxx
displayName:
comment:
properties:
maximumTravelSpeed: 1000
minimalTravelDistance: 1
tagsOnImpossibleJourney:
tagsOnPlausibleJourney:
In-Memory Accepted SSO Tickets Repository
Repository that stores accepted SSO tickets in memory.
The tickets are stored to prevent replay attacks.
This repository should not be used if multiple instances of IAM are deployed in parallel (failover, horizontal scaling) Furthermore, the cache is not preserved across IAM restarts.
tenantId
) Identity stored with the accepted SSO Tickets to distinguish between different tenants.
If left empty, 'no_tenant' is used as the effective value for tenant ID.
type: com.airlock.iam.common.application.configuration.sso.InMemoryAcceptedSsoTicketRepositoryConfig
id: InMemoryAcceptedSsoTicketRepositoryConfig-xxxxxx
displayName:
comment:
properties:
tenantId:
In-Memory Sequence Generator
Sequence generator without persistency. The sequence number is held only in memory and will therefore be reset upon server restart.
Note: All instances of this plugin share the same sequence number.
type: com.airlock.iam.core.misc.util.report.barcode.InMemorySequenceGenerator
id: InMemorySequenceGenerator-xxxxxx
displayName:
comment:
properties:
In-Memory State Repository
State repository that stores all values in memory.
This repository cannot be used if multiple instances of IAM are deployed in parallel (failover, horizontal scaling). Furthermore, state is not preserved across IAM restarts.
type: com.airlock.iam.core.application.configuration.state.InMemoryStateRepositoryConfig
id: InMemoryStateRepositoryConfig-xxxxxx
displayName:
comment:
properties:
Initial REST API Invocation
url
) method
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.InitialRestApiInvocationConfig
id: InitialRestApiInvocationConfig-xxxxxx
displayName:
comment:
properties:
method: GET
url:
Input UI Element
label
) property
) placeholder
) maskInput
) validations
) submitToServer
) htmlId
) initialValueQuery
) See the JSONPath documentation for the full documentation: https://github.com/dchester/jsonpath
Examples:Assume the initial REST call returns the following JSON response:
{ "meta": { "type": "jsonapi.metadata.document", "timestamp": "2023-03-10T13:06:01.294+02:00" }, "data": [ { "type": "user", "id": "user1", "attributes": { "contextData": { "givenname": "User1", "surname": "FSMTest", "roles": "customerA" } } }, { "type": "user", "id": "user2", "attributes": { "contextData": { "givenname": "User2", "surname": "FSMTest", "roles": "customerB" } } } ] }
The following table shows the results of various JSONPath queries given the JSON above:
Description JSONPath Query Extracted Initial Value Static path from the root $.meta.type jsonapi.metadata.document The role of the user whose id equals "user1" $.data[?(@.id == 'user1')].attributes.contextData.roles customer The number of users $.data.length 2 All "givenname" attributesNote:
This query yields multiple results.
The first one is set to the initial value, the rest is discarded. $..givenname User1
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableUiInputFieldConfig
id: ConfigurableUiInputFieldConfig-xxxxxx
displayName:
comment:
properties:
htmlId:
initialValueQuery:
label:
maskInput: false
placeholder:
property:
submitToServer: true
validations:
Integer Context Data
contextDataField
) valueProvider
)
type: com.airlock.iam.userselfreg.application.configuration.definition.IntegerNonInteractiveUserDataItemDefinitionConfig
id: IntegerNonInteractiveUserDataItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
contextDataField:
valueProvider:
Integer Context Data Item Config
The database column must be of an integer type (e.g. INTEGER) and the values in the context data container are guaranteed to be of type java.lang.Integer. NULL values on the persistency are interpreted as 0.
contextDataName
) databaseColumnName
) readonlyOnUpdate
)
type: com.airlock.iam.core.application.configuration.contextdata.IntegerContextDataItemConfig
id: IntegerContextDataItemConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
databaseColumnName:
readonlyOnUpdate: false
Integer Context Data Item Name
contextDataName
)
type: com.airlock.iam.core.application.configuration.contextdata.IntegerContextDataItemNameConfig
id: IntegerContextDataItemNameConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
Integer Context Data Value Provider
Provides the integer value contained in the specified context data item of the user.
Make sure the configured context data item is also configured on the user persister.
contextDataField
) mandatory
) If enabled, the value provided by this context data item is not allowed to be null.
If this option is enabled and the context data item is null (e.g. if the configured context data is not configured on the user persister), an exception will be thrown at runtime.
type: com.airlock.iam.common.application.configuration.valueprovider.contextdata.ContextDataIntegerValueProviderConfig
id: ContextDataIntegerValueProviderConfig-xxxxxx
displayName:
comment:
properties:
contextDataField:
mandatory: false
Interactive Goto Target Config
targetStepId
) treatedAsFailure
)
type: com.airlock.iam.flow.api.application.configuration.step.InteractiveGotoTargetConfig
id: InteractiveGotoTargetConfig-xxxxxx
displayName:
comment:
properties:
targetStepId:
treatedAsFailure: false
Internal Goto Target Config
targetStepId
)
type: com.airlock.iam.flow.api.application.configuration.step.InternalGotoTargetConfig
id: InternalGotoTargetConfig-xxxxxx
displayName:
comment:
properties:
targetStepId:
International Phone Number User Profile Item Config
Phone numbers must be entered in international format. Phone numbers in international format start with a plus sign (+) and the country code. When parsing the phone number, punctuation and white-space as well as any text before the number is ignored (for example, a leading "Tel: "). To persist the phone number, it is formatted according to the ITU-T phone number format E.164.
This profile item will be represented as a text input field and its value is added to the user's context data, provided that the property name matches the property name in the configured user data.validationLevel
) - Default: Full validation of a phone number in international format using length and prefix information. Verifies whether the parsed, canonicalised number is valid. It is not verified, whether a particular series of digits entered by the user can actually be dialled from the region provided. For example, the number +41 (0) 78 927 2696 can be parsed into a number with country code '41' and national significant number '789272696'. This is valid, while the original string cannot be dialled.
- Lenient: Quickly guesses whether a number is a possible phone number by using only the length information. So, validation is performed more lenient. In particular, phone numbers that have the correct lenght but may otherwise be invalid (for example, because the carrier code is invalid) are considered valid. Phone numbers must still be in international format with valid country codes.
- Minimal: This is the most lenient form of validation. All inputs that can be parsed to a phone number are accepted. For example, phone numbers that are otherwise considered too short or too long up (but only to a certain extent) are accepted. Phone numbers must still be in international format with valid country codes.
stringResourceKey
) propertyName
) optional
) modifiable
) validateOnlyChangedValues
) sortable
)
type: com.airlock.iam.common.application.configuration.userprofile.InternationalPhoneNumberUserProfileItemConfig
id: InternationalPhoneNumberUserProfileItemConfig-xxxxxx
displayName:
comment:
properties:
modifiable: true
optional: true
propertyName:
sortable: true
stringResourceKey:
validateOnlyChangedValues: true
validationLevel: DEFAULT
Invalid User Restriction
enableFeedback
) If enabled, the User Identification Step always returns a specific error code in case this restriction is violated.
If no restrictions are configured to provide feedback, a flow can also be started for users violating one or more restrictions and the flow will advance to the user identity verification step in stealth mode. In this mode, the initial behavior of the step is the same as for unrestricted users (e.g. an mTAN OTP is required), but all responses are rejected as if they were incorrect. This behavior prevents restricted users from ever proceeding further in the flow and thus offers protection against user enumeration. Please refer to the documentation for more details.
Irrespective of this settings, once the identity verification step is passed, restriction are always checked before and after each method call and violations are always reported.
Security notice: Enabling this feature might allow a client to determine whether certain users exist in the system.
type: com.airlock.iam.publicselfservice.application.configuration.restrictions.InvalidUserRestrictionConfig
id: InvalidUserRestrictionConfig-xxxxxx
displayName:
comment:
properties:
enableFeedback: false
Invalidate All Tokens Of The Grant
I.e., if the initial token response was used to obtain additional tokens, all of these tokens will be invalidated.
type: com.airlock.iam.oauth2.application.configuration.token.revocation.AuthorizationInvalidationStrategyConfig
id: AuthorizationInvalidationStrategyConfig-xxxxxx
displayName:
comment:
properties:
Invalidate Single Token
type: com.airlock.iam.oauth2.application.configuration.token.revocation.SingleTokenInvalidationStrategyConfig
id: SingleTokenInvalidationStrategyConfig-xxxxxx
displayName:
comment:
properties:
IP Address Context Extractor
Configures client IP address to context mappings. If the IP of the client does not match, the fallback context is used.
To determine the client IP address behind a gateway, Airlock IAM requires one of these gateway settings:- Airlock Gateway (WAF): Verify that "Environment Cookies" are activated on all Loginapp mappings and that the environment cookie prefix in Airlock Gateway and Airlock IAM is the same. The client IP is sent by the WAF in the REMOTE_ADDR cookie (with respect to the configured prefix)
- Airlock Microgateway: Make sure to extract the client's IP address in Airlock Microgateway Settings.
mappings
) fallbackContext
) Leave empty to implicitly use the default context. If this plugin is used within a "Combining Context Extractor", use "[DEFAULT]" to explicitly return the default context if necessary.
gateway
) The client IP address is extracted differently from the request based on this configuration:
- Airlock Gateway (WAF): client IP is extracted from the environment cookie
- Airlock Microgateway: client IP is extracted from the configured header
- When no gateway is configured, the request's remote address is used as client IP
type: com.airlock.iam.common.application.configuration.context.IpAddressContextExtractor
id: IpAddressContextExtractor-xxxxxx
displayName:
comment:
properties:
fallbackContext:
gateway:
mappings:
IP Address Range Risk Extractor
ipRanges
) tagsOnMatch
) tagsOnMismatch
)
type: com.airlock.iam.authentication.application.configuration.risk.extractor.ip.IPAddressRangeRiskExtractorFlowConfig
id: IPAddressRangeRiskExtractorFlowConfig-xxxxxx
displayName:
comment:
properties:
ipRanges:
tagsOnMatch:
tagsOnMismatch:
IP Range Context
ipRanges
) A list of IP ranges resulting in the specified context if they match the client IP. The following notations of IPs and IP ranges are supported:
Single IPv4: xxx.xxx.xxx.xxx IPv4-Range (CIDR notation): xxx.xxx.xxx.xxx/n IPv4-Range (subnet mask): xxx.xxx.xxx.xxx/mmm.mmm.mmm.mmmconfigurationContext
) Use "[DEFAULT]" to explicitly return the default context.
type: com.airlock.iam.common.application.configuration.context.IpRangeContext
id: IpRangeContext-xxxxxx
displayName:
comment:
properties:
configurationContext:
ipRanges:
IP-based Target Service
The target service is meant to be used if the IP of the RADIUS client matches the one in the configuration.
clientIp
) requiredRoles
) The user needs one of the roles in order to get access to the target service.
If no roles are configured, all authenticated users may access the target service.
The roles may be transformed before being compared to this list using the role transformers (see separate property).
roleTransformationRules
)
type: com.airlock.iam.servicecontainer.app.application.configuration.radius.IPBasedTargetServiceConfig
id: IPBasedTargetServiceConfig-xxxxxx
displayName:
comment:
properties:
clientIp:
requiredRoles:
roleTransformationRules:
Is App Device Condition
type: com.airlock.iam.airlock2fa.application.configuration.provider.predicate.Airlock2FAAppDevicePredicateConfig
id: Airlock2FAAppDevicePredicateConfig-xxxxxx
displayName:
comment:
properties:
Is Hardware Device Condition
type: com.airlock.iam.airlock2fa.application.configuration.provider.predicate.Airlock2FAHardwareDevicePredicateConfig
id: Airlock2FAHardwareDevicePredicateConfig-xxxxxx
displayName:
comment:
properties:
Is In Cooldown Device Condition
airlock2FASettings
)
type: com.airlock.iam.airlock2fa.application.configuration.provider.predicate.Airlock2FACooldownPredicateConfig
id: Airlock2FACooldownPredicateConfig-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
Is Single Device Condition
An example use case where this predicate can be used is when trying to delete the device used for login unless it is the last device.
type: com.airlock.iam.airlock2fa.application.configuration.provider.predicate.Airlock2FASingleDevicePredicateConfig
id: Airlock2FASingleDevicePredicateConfig-xxxxxx
displayName:
comment:
properties:
Java Keystore
keystoreType
) keystoreFile
) keystorePassword
)
type: com.airlock.iam.core.misc.util.crypto.keystore.JavaKeystoreConfig
id: JavaKeystoreConfig-xxxxxx
displayName:
comment:
properties:
keystoreFile:
keystorePassword:
keystoreType: JKS
JDBC Connection Pool
maximumPoolSize
) The maximum pool size is the maximum number of both idle and in-use connections that will be maintained by the pool, thus determining the maximum number of connections to the database backend (per web application). A reasonable value for this is best determined by your database environment. A rule of thumb is to set this roughly to (number of db processor cores * 2) + number of harddisks of db
.
When the pool reaches this size, and no idle connections are available, getting a connection will block for up to Connection Timeout [milliseconds] milliseconds before timing out.
minimumIdleConnections
) Note that IAM creates at least one connection pool per deployed module (e.g. Loginapp, Adminapp, Service-Container). Multiple connection pools are created within a module, if differently configured connection pools are present in the configuration. Keep in mind that in multi-instance setups (active-active or horizontally scaling cloud setups) with n instances, the number of connection pools is multiplied by n.
connectionTimeoutInMs
) Sets the maximum time in milliseconds to wait to acquire a live connection. This includes connecting and authenticating to the database and verifying the connection.
This value is also used as "login timeout" on the underlying SQL driver (if possible).
idleTimeoutInMinutes
) Sets the maximum time in minutes a connection is allowed to be idle before it is closed. This setting is useful when a firewall drops idle connections after a while, to proactively close idle connections beforehand.
This setting only applies when "Minimum Idle Connections" is defined to be less than "Maximum Pool Size". Whether a connection is retired as idle or not is subject to a maximum variation of +30 seconds (to avoid retiring many connections at the same time). A connection will never be retired as idle before this timeout. Once the pool reaches "Minimum Idle Connections", connections will no longer be retired, even if idle.
maxLifetimeInMinutes
) leakDetectionThresholdInSeconds
) transactionIsolationLevel
) enableJmx
) connectionInitSql
) driverClass
) The class name of the JDBC driver to use. The driver must be on the class path. This property is required for preloading the correct driver class and for detecting the SQL dialect.
Legacy drivers:
- For Oracle before 9i use oracle.jdbc.driver.OracleDriver.
- For MySQL 5.x use com.mysql.jdbc.Driver.
url
) user
) password
) connectionTestStatement
) SQL statement to test the database connection. Only use this property if your connections aren't correctly tested for validity. A JDBC 4.0 driver is usually able to test the connection validity with an internal mechanism, without an explicit test statement.
For H2 databases, a statement involving a table name should be used.
This is database specific and should be set to a query that consumes the minimal amount of load on the server.
sqlDialect
) The SQL dialect to use. SQL dialects have minor – but important – differences: For example, Oracle does not support auto-increment, or MSSQL requires extra information for an insert statement with default values.
With the default setting (AUTOMATIC), the dialect is automatically determined based on the "Driver Class" of the JDBC driver. When using a non-standard "Driver Class", the SQL dialect of the underlying database cannot be determined automatically and must be set to the correct value here.
driverProperties
)
type: com.airlock.iam.core.misc.impl.persistency.db.JdbcConnectionPool
id: JdbcConnectionPool-xxxxxx
displayName:
comment:
properties:
connectionInitSql:
connectionTestStatement:
connectionTimeoutInMs: 5000
driverClass:
driverProperties:
enableJmx: false
idleTimeoutInMinutes: 10
leakDetectionThresholdInSeconds: 60
maxLifetimeInMinutes: 30
maximumPoolSize: 20
minimumIdleConnections: 5
password:
sqlDialect: AUTOMATIC
transactionIsolationLevel:
url:
user:
Jdbc Driver Property
property
) value
)
type: com.airlock.iam.core.misc.impl.persistency.db.JdbcDriverProperty
id: JdbcDriverProperty-xxxxxx
displayName:
comment:
properties:
property:
value:
JSON String Escaper
Escapes a string to be safely used inside a JSON string.
Note: This plugin can only handle JSON strings, not numbers or other value types. The quotes around the values must be part of the template (e.g. {"message":"Hello, ${name}!"}
).
type: com.airlock.iam.common.application.configuration.encoder.JsonStringEscaperConfig
id: JsonStringEscaperConfig-xxxxxx
displayName:
comment:
properties:
Jsoup HTML Element Attribute Extractor
jsoupCssContentSelector
) A description of the selector syntax can be found in the Jsoup online documentation.
attributeName
)
type: com.airlock.iam.core.misc.util.html.JsoupHtmlElementAttributeExtractor
id: JsoupHtmlElementAttributeExtractor-xxxxxx
displayName:
comment:
properties:
attributeName: value
jsoupCssContentSelector:
JSP Remember-Me Settings
Configuration for the legacy implementation for Remember-Me using the JSP Loginapp.
This plugin is only needed for:
- Migrating legacy cookies during an authentication flow.
- Displaying and deleting legacy cookies in the Adminapp user management.
cookieLifetime
) Duration must be specified like "2d 4h 10m 5s" or any part thereof.
cookieIdleTimeout
) Duration must be specified like "2d 4h 10m 5s" or any part thereof.
credentialPersister
) cookieName
) If this name is changed, the Airlock Gateway has to be reconfigured to pass-through and encrypt this cookie.
cookieDomain
) cookiePath
) Use the variable "%ENTRYPATH%" to automatically set the correct path even if used behind an Airlock Gateway.
type: com.airlock.iam.common.application.configuration.rememberme.JspRememberMeConfig
id: JspRememberMeConfig-xxxxxx
displayName:
comment:
properties:
cookieDomain:
cookieIdleTimeout:
cookieLifetime: 7d
cookieName: RememberMe
cookiePath: %ENTRYPATH%
credentialPersister:
JWE Password Decryption
Decryption service accepting encrypted passwords in JWE format (as specified in https://tools.ietf.org/html/rfc7516).
The encryption information contained in the step responses (additional data "e2eEncryptionInformation") consists of a type (always "type"="JWE"), a nonce (element "nonce") and the public key of the configured key pair in JWK format (element "publicKey").
The password sent by the client for verification must be encrypted in JWE format and include the nonce in the header. The JWE payload must include the password as a JSON string. The location of the password in the payload JSON structure can be configured. By default the JWE payload is expected to be in the following format:
{ "header": { "nonce":"si04fHDORRELOO0T4nJad8mz9DgPPE9GhArD2reQ2Dk=", "alg":"RSA-OAEP-256", "enc":"A128GCM" }, "password":"userPasswordInPlaintext" }
For decryption, the private key of the configured "Key Pair" is used.
passwordJsonPath
) If for example the payload of the JWE looks as follows:
{ "user": { "id": "8331-1212-1233", "password": "userPasswordInPlaintext" } }Then the following JSON Pointer should be configured in order to use "userPasswordInPlaintext" for the password check: /user/password
keyPair
)
type: com.airlock.iam.common.application.configuration.e2ee.JwePasswordDecryptionConfig
id: JwePasswordDecryptionConfig-xxxxxx
displayName:
comment:
properties:
keyPair:
passwordJsonPath: /password
JWKS Ticket Verifier Settings
JWT Signature verification based on fetching key information from a URL providing a JWKS (see RFC7517).
url
) The URL providing the JWKS. Must be an absolute URL with "https" scheme.
httpClient
) The HTTP Client used to fetch the JWKS data
cacheRefreshTimeInMinutes
) If the data cannot be refreshed because of an error, the previous data will be used.
The JWKS Cache is reloaded as needed. In particular:
- if the Cache Refresh Time is exceeded
- if a key is not yet known
- if the verification of a signature with a previously known key fails
type: com.airlock.iam.common.application.configuration.jwt.signature.JwksSignatureVerifierSettings
id: JwksSignatureVerifierSettings-xxxxxx
displayName:
comment:
properties:
cacheRefreshTimeInMinutes: 10
httpClient:
url:
JWT Access Token Format
- iat - Issue Time
- nbf - Not Valid Before
- exp - Expiration Time (claim is not included if token has infinite validity)
- jti - JWT ID (random value)
- random - A random value defined through "OAuth 2.0 Token Generator Settings" for the token entropy
- scope - A JSON array defining the scope of the access token
includeSubjectClaim
) sub
). issuer
) iss
). If left empty the claim will not be included. audience
) The audience claim (aud
) to include. If left empty the claim will not be included.
If there is one audience, the claim is written as a string, for multiple values as an array.
notValidBeforeSkew
) nbf
). scopesAsSpaceSeparatedString
) scope
claim will be issued as a string array, even if it only contains a single value. customClaims
) Custom claims to include in the JWT.
Multiple claims with the same name can be configured if each has a claim condition which ensures that only one of them will be included at runtime.
The following claims are automatically set by Airlock IAM and therefore will be ignored if defined as custom claim.iss
aud
exp
nbf
iat
jti
random
scope
Note: When "Persist Claims" is disabled, custom claims are collected when the Access Token is requested by an OAuth 2.0 client and not when the Access Token is issued. Therefore the values of the custom claims may change between issue and request time.
distributedClaims
) Distributed Claims to add to the JWT.
These claims allow providing a URL to a 3rd party claims provider in the response where additional claims may be obtained.
signature
) Security Warning: The signature must be verified by the consumer of the JWT before the content is interpreted. When using "JWT Access Token No Signature", the consumer must not trust the content of the JWT and therefore not use it as authenticated data.
Security Warning: Verifying the signature and validity of the self-contained JWT is not sufficient to validate the access token. The access token might have been revoked and thus consumers must verify the validity of the access token (e.g. using Token Introspection) before being used for access control.
type: com.airlock.iam.oauth2.application.configuration.token.JwtAccessTokenFormatConfig
id: JwtAccessTokenFormatConfig-xxxxxx
displayName:
comment:
properties:
audience:
customClaims:
distributedClaims:
includeSubjectClaim: false
issuer:
notValidBeforeSkew: 5
scopesAsSpaceSeparatedString: true
signature:
JWT Access Token No Signature
Security Warning: The consumer must not trust the content of the JWT and therefore not use it as authenticated data.
type: com.airlock.iam.oauth2.application.configuration.token.JwtAccessTokenNoSignature
id: JwtAccessTokenNoSignature-xxxxxx
displayName:
comment:
properties:
JWT Access Token Private Key Signature
algorithm
) keystoreFile
) keystorePassword
) signingKeyAlias
) signingKeyPassword
)
type: com.airlock.iam.oauth2.application.configuration.signature.JwtAccessTokenPrivateKeySignature
id: JwtAccessTokenPrivateKeySignature-xxxxxx
displayName:
comment:
properties:
algorithm: RS256
keystoreFile:
keystorePassword:
signingKeyAlias:
signingKeyPassword:
JWT Scope Handling
Defines the "scope" token exchange response parameter and issued JWT claim.
Note: The order of the scope tokens that define the scope is not defined and thus may vary for every exchange. The meaning of a scope is independent of the order of the scope tokens (see RFC6749). Furthermore, adding a scope token more than once has no effect on the scope value.
scopeProcessors
) List of scope processors that define the issued scopes.
The issued scopes are determined by successively applying each scope processor to the scopes issued by the previous one. The first scope processor in the list is applied to an empty set.
scopePolicy
) The scope policy defines how the scopes produced by the scope processors are processed.
Depending on the selected policy, the following rules apply:
- Scopes Mandatory: It is mandatory for the scope processors to return at least one scope, otherwise the request is denied.
- For static clients for which 'Filter Requested Scopes' is enabled: the returned scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the scope processors had not returned any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the returned scopes are not filtered (i.e. all scopes are allowed).
- For persisted clients, the allowed scopes to return are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
- Empty Scopes Allowed: It is optional for scope processors to return scopes.
If scopes are returned:
- For static clients for which 'Filter Requested Scopes' is enabled: the returned scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the scope processors had not returned any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the returned scopes are not filtered (i.e. all scopes are allowed).
- For persisted clients, the allowed scopes to return are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
- Always Overwrite Scopes: The scopes returned by the scope processors are ignored and replaced by the default scopes of the client. If the client has no default scopes, this is treated as if the client has not requested any scopes at all.
With this policy, the 'Filter Requested Scopes' flag of static clients is ignored. - Empty Scopes Overwritten: When the scope processors do not return any scopes, the request is treated as if the default scopes of this client were returned.
If scopes are returned:
- For static clients for which 'Filter Requested Scopes' is enabled: the returned scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the scope processors had not returned any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the returned scopes are not filtered (i.e. all scopes are allowed).
- For persisted clients, the allowed scopes to return are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
emptyScopeAllowed
) Defines whether issuing tokens with an empty scope is allowed or not.
If this option is disabled, token exchange requests resulting in a token with an empty scope will result in an invalid request error.
scopesAsSpaceSeparatedString
) When enabled, scopes in the issued token are written as space-separated string claim (as required by RFC 9086). Otherwise, the "scope" claim will be issued as a string array, even if it only contains a single value.
Note that the scopes are also directly returned in the token exchange response. Those scopes are always returned as space-separated string (irrespective of this setting) as required by the token exchange specification.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtScopeHandlingConfig
id: OAuth2TokenExchangeJwtScopeHandlingConfig-xxxxxx
displayName:
comment:
properties:
emptyScopeAllowed: false
scopePolicy: SCOPES_MANDATORY
scopeProcessors:
scopesAsSpaceSeparatedString: true
JWT Ticket Decoder
Configures the JWT (JSON Web Token) ticket decoder.
The decoder verifies a ticket's MAC or signature and decrypts it in case encryption is enabled. A ticket is required to contain at least a subject ('sub' claim) and an expiration date ('exp' claim). Additionally an issuer ('iss' claim) and audience ('aud' claim) might be required, if configured. A 'not before' ('nbf' claim) is validated if present but only mandatory if configured to be.
If the ticket starts with a "Bearer " prefix (e.g. from a HTTP Authorization header), the prefix is removed before decoding the JWT.
usernameTicketKey
) The ticket key for the username. The username in the 'sub' claim of the JWT will be written to the IAM ticket using this ticket key.
If using this ticket decoder for the loginapp's "SSO Ticket Feature", the value of this attribute must be "username".
notBeforeIsMandatory
) validNotBeforeSkew
) notBeforeTicketKey
) issuedAtIsMandatory
) issuedAtTicketKey
) issuerIsMandatory
) allowedIssuers
) issuerTicketKey
) audienceIsMandatory
) allowedAudiences
) audienceTicketKey
) jwtIdIsMandatory
) claimsStoredAsJson
) Note: It is not allowed to specify registered claims here. Registered claims are always propagated as specified in RFC 7519.
jwtIdTicketKey
) additionalClaimValidators
) signatureVerifier
) decrypter
)
type: com.airlock.iam.common.application.configuration.jwt.JwtTicketDecoderSettings
id: JwtTicketDecoderSettings-xxxxxx
displayName:
comment:
properties:
additionalClaimValidators:
allowedAudiences:
allowedIssuers:
audienceIsMandatory: false
audienceTicketKey:
claimsStoredAsJson:
decrypter:
issuedAtIsMandatory: true
issuedAtTicketKey:
issuerIsMandatory: true
issuerTicketKey:
jwtIdIsMandatory: false
jwtIdTicketKey:
notBeforeIsMandatory: true
notBeforeTicketKey:
signatureVerifier:
usernameTicketKey:
validNotBeforeSkew: 5
JWT Ticket Direct AES Encryption Settings
Configures symmetric direct encryption for JWTs.
This plugin can be used for JWT encryption and decryption. To decrypt a JWT the same algorithm and key must be used as for encryption.
directEncryptionMethod
) encryptionKey
) The key for the selected direct encryption method, encoded in base64. The minimal required length depends on the configured encryption method and must be chosen as follows:
- A128GCM: 128 bits / 16 bytes
- A192GCM: 192 bits / 24 bytes
- A256GCM: 256 bits / 32 bytes
- A128CBC_HS256: 256 bits / 32 bytes
- A192CBC_HS384: 384 bits / 48 bytes
- A256CBC_HS512: 512 bits / 64 bytes
One can, for example, generate a random base64 string with 256 bits (32 bytes) using OpenSSL as follows: openssl rand -base64 32
type: com.airlock.iam.common.application.configuration.jwt.encryption.JwtTicketDirectAesEncryptionSettings
id: JwtTicketDirectAesEncryptionSettings-xxxxxx
displayName:
comment:
properties:
directEncryptionMethod: A256GCM
encryptionKey:
JWT Ticket EC Signer Settings
Configures EC based JWT signatures.
This plugin can be used for JWT signature creation. An EC based signature is created with a private key and must be validated with the corresponding public key.
ecSignatureAlgorithm
) According to the selected algorithm, the private key must be derived from a specific curve:
- ES512: NIST Curve P521
- ES384: NIST Curve P384
- ES256: NIST Curve P256
keystorePath
) keystorePassword
) privateKeyAlias
) privateKeyPassword
) includeKid
) addX5tS256HeaderParameter
) The 'Private Key Alias' is used to find the X.509 certificate in the keystore to compute the thumbprint for. I.e., it is assumed that the alias identifies a private key with the corresponding certificate. If no 'Private Key Alias' is configured, the keystore is assumed to contain exactly one certificate.
addX5tHeaderParameter
) The 'Private Key Alias' is used to find the X.509 certificate in the keystore to compute the thumbprint for. I.e., it is assumed that the alias identifies a private key with the corresponding certificate. If no 'Private Key Alias' is configured, the keystore is assumed to contain exactly one certificate.
Security warning: SHA-1 fingerprints should no longer be used as SHA-1 is considered broken. We recommend the x5t#S256 thumbprint instead.
type: com.airlock.iam.common.application.configuration.jwt.signature.JwtTicketEcSignerSettings
id: JwtTicketEcSignerSettings-xxxxxx
displayName:
comment:
properties:
addX5tHeaderParameter: false
addX5tS256HeaderParameter: false
ecSignatureAlgorithm: ES512
includeKid: true
keystorePassword:
keystorePath:
privateKeyAlias:
privateKeyPassword:
JWT Ticket EC Verifier Settings
Configures the EC based JWT signature verifier.
This plugin can be used for JWT signature verification. An EC based signature is created with a private key and must be validated with the corresponding public key.
ecSignatureAlgorithm
) According to the selected algorithm, the private key must be derived from a specific curve:
- ES512: NIST Curve P521
- ES384: NIST Curve P384
- ES256: NIST Curve P256
keystorePath
) keystorePassword
) x509CertificateAlias
)
type: com.airlock.iam.common.application.configuration.jwt.signature.JwtTicketEcVerifierSettings
id: JwtTicketEcVerifierSettings-xxxxxx
displayName:
comment:
properties:
ecSignatureAlgorithm: ES512
keystorePassword:
keystorePath:
x509CertificateAlias:
JWT Ticket Encoder
Configures the JWT (JSON Web Token) ticket encoder.
The encoder protects the integrity of the ticket by a MAC or signature according to the configured signer settings. It also has the ability to (optionally) encrypt the ticket if encrypter settings are configured.
usernameTicketKey
) issuer
) iss
) in the JWT. If this value is set, the ticket must not contain a value for the key iss
. audience
) aud
) in the JWT. If a value is set, the ticket must not contain a value for the key aud
. Note: If a single value is configured, it will be sent as string. If multiple values are configured an array is sent. This behaviour cannot be changed by specifying the aud
claim in claimsStoredAsArray. expirationTime
) Expiration time in seconds after which the JWT must not be accepted. If configured, a potentially defined expiration time in the ticket is overwritten. When left empty, the ticket's expiration date - if present - is unchanged.
Note: For security reasons, a short expiration time is preferable.
validNotBeforeSkew
) enforceJwtId
) claimsStoredAsArray
) aud
claim will be sent as string if it is a single value and as array otherwise. claimsStoredAsJson
) Note: It is not allowed to specify registered claims here. Registered claims are always propagated as specified in RFC 7519. The
aud
claim will be sent as string if it is a single value and as array otherwise. signer
) encrypter
)
type: com.airlock.iam.common.application.configuration.jwt.JwtTicketEncoderSettings
id: JwtTicketEncoderSettings-xxxxxx
displayName:
comment:
properties:
audience:
claimsStoredAsArray:
claimsStoredAsJson:
encrypter:
enforceJwtId: true
expirationTime:
issuer:
signer:
usernameTicketKey:
validNotBeforeSkew: 5
JWT Ticket HMAC Settings
Configures an HMAC for JWTs.
This plugin can be used for JWT signature creation and verification. An HMAC is valid if the same HMAC algorithm and HMAC key are used for creation and validation.
hmacAlgorithm
) hmacKey
) The key for the HMAC function, encoded in base64.
The minimal required length depends on the configured algorithm and must be at least 256 bits. Configuration validation will fail if the secret is too short.
One can, for example, generate a random base64 string with 512 bits (64 bytes) using OpenSSL as follows: openssl rand -base64 64
type: com.airlock.iam.common.application.configuration.jwt.signature.JwtTicketHmacSettings
id: JwtTicketHmacSettings-xxxxxx
displayName:
comment:
properties:
hmacAlgorithm: HS512
hmacKey:
JWT Ticket RSA Signer Settings
Configures RSA based JWT signatures.
This plugin can be used for JWT signature creation. An RSA based signature is created with a private key and must be validated with the corresponding public key.
rsaSignatureAlgorithm
) keystorePath
) keystorePassword
) privateKeyAlias
) privateKeyPassword
) includeKid
) addX5tS256HeaderParameter
) The 'Private Key Alias' is used to find the X.509 certificate in the keystore to compute the thumbprint for. I.e., it is assumed that the alias identifies a private key with the corresponding certificate. If no 'Private Key Alias' is configured, the keystore is assumed to contain exactly one certificate.
addX5tHeaderParameter
) The 'Private Key Alias' is used to find the X.509 certificate in the keystore to compute the thumbprint for. I.e., it is assumed that the alias identifies a private key with the corresponding certificate. If no 'Private Key Alias' is configured, the keystore is assumed to contain exactly one certificate.
Security warning: SHA-1 fingerprints should no longer be used as SHA-1 is considered broken. We recommend the x5t#S256 thumbprint instead.
type: com.airlock.iam.common.application.configuration.jwt.signature.JwtTicketRsaSignerSettings
id: JwtTicketRsaSignerSettings-xxxxxx
displayName:
comment:
properties:
addX5tHeaderParameter: false
addX5tS256HeaderParameter: false
includeKid: true
keystorePassword:
keystorePath:
privateKeyAlias:
privateKeyPassword:
rsaSignatureAlgorithm: RS512
JWT Ticket RSA Verifier Settings
Configures the RSA based JWT signature verifier.
This plugin can be used for JWT signature verification. An RSA based signature is created with a private key and must be validated with the corresponding public key.
rsaSignatureAlgorithm
) keystorePath
) keystorePassword
) x509CertificateAlias
)
type: com.airlock.iam.common.application.configuration.jwt.signature.JwtTicketRsaVerifierSettings
id: JwtTicketRsaVerifierSettings-xxxxxx
displayName:
comment:
properties:
keystorePassword:
keystorePath:
rsaSignatureAlgorithm: RS512
x509CertificateAlias:
JWT Token Exchange Rule
Defines a JWT token that is being issued.
The various claims of the issued token can be configured along with the issued token type and signature.
Note that the iss claim cannot be configured explicitly and will instead automatically be set to the value of the issuer ID of the AS where the token exchange grant is configured. If no issuer ID is configured, the issued token will not contain an iss claim.
condition
) actorTokenValidation
) Defines the validation of the actor token. If left empty, actor tokens are ignored.
If the validation fails, this rule does not issue a token and is skipped.
issuedTokenType
) validityLifetime
) Lifetime of the issued token.
Security warning: This should be chosen as short as possible.
audienceClaim
) Defines the "aud" claim of the issued token.
If the claim is configured but the resulting value is empty, the token exchange will fail.
subjectClaim
) Defines the "sub" claim of the issued token.
If the evaluated value is not of type String, empty or blank, the token exchange will fail.
actorClaim
) Defines the "act" claim of the issued token.
If not defined, no "act" claim is added.
clientIdClaim
) Defines the "client_id" claim of the issued token.
If not defined, no "client_id" claim is added.
scopeClaim
) Defines the "scope" claim and token exchange "scope" response parameter.
If no plugin is configured, the scope of the issued token will be empty.
customClaims
) signature
) The signature of the issued token.
The signature verification data can be obtained from the JWKs Endpoint.
Security Warning: The signature must be verified by the consumer of the JWT before the content is interpreted.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtRuleConfig
id: OAuth2TokenExchangeJwtRuleConfig-xxxxxx
displayName:
comment:
properties:
actorClaim:
actorTokenValidation:
audienceClaim:
clientIdClaim:
condition:
customClaims:
issuedTokenType: JWT
scopeClaim:
signature:
subjectClaim:
validityLifetime: 180
Kannel SMS Gateway
username
) password
) username
. serviceUri
) See note in plugin description when using SSL.
proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
connectTimeout
) Therefore, a connection may take a maximum of twice this time until it is aborted.
correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
visiblePhoneNumberDigitsInLog
) Defines the number of phone number digits visible in log statements.
Thus, if the value is zero, all digits are masked, if it is large enough, all digits are visible. If set to 3, for example, the logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.core.misc.impl.sms.KannelSmsGateway
id: KannelSmsGateway-xxxxxx
displayName:
comment:
properties:
allowOnlyTrustedCerts: true
connectTimeout: 10
correlationIdHeaderName:
password:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
serviceUri:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
username:
verifyServerHostname: true
visiblePhoneNumberDigitsInLog: 100
Keep Roles
patterns
)
type: com.airlock.iam.common.application.configuration.role.KeepRoleTransformationConfig
id: KeepRoleTransformationConfig-xxxxxx
displayName:
comment:
properties:
patterns:
Kerberos Authentication Step
Performs a Kerberos SPNEGO authentication handshake.
If the client does not support Kerberos, the step fails with error code KERBEROS_AUTHENTICATION_NOT_POSSIBLE. Use On Failure Gotos on this error code (and possibly also on KERBEROS_TICKET_VERIFICATION_FAILED) to switch to an alternative authentication method.
keytabFile
) servicePrincipal
) Optionally, the realm can be specified if there's no default realm in the Kerberos configuration file or if the SPN is associated with a different realm/domain.
stripDomainFromUsername
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.kerberos.KerberosAuthStepConfig
id: KerberosAuthStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: KERBEROS
customFailureResponseAttributes:
customResponseAttributes:
keytabFile:
onFailureGotos:
preCondition:
requiresActivation: false
servicePrincipal:
skipCondition:
stepId:
stripDomainFromUsername: true
tagsOnSuccess:
Kerberos Identity Propagator (requires Airlock Gateway)
This propagator only works together with Airlock Gateway (WAF) 6.0 or later. It uses the Gateway's control API to propagate username and domain.
kerberosUsers
) Defines the Kerberos user, that contains the username, the Windows Domain and the Airlock Gateway (WAF) mapping name. Multiple Kerberos user definitions can be sent to the Airlock Gateway if a mapping is specified for each user definition.
For each entry, the Kerberos username can be determined based on context data and it can be transformed using various transformation plugins.
The mapping and the domain can be specified in the configuration. The mapping is mandatory if multiple user definitions are configured.
controlCookieName
)
type: com.airlock.iam.core.misc.impl.sso.KerberosIdentityPropagator
id: KerberosIdentityPropagator-xxxxxx
displayName:
comment:
properties:
controlCookieName: AL_CONTROL
kerberosUsers:
Kerberos SPNEGO Error Mapper
ErrorMapper that initiates Kerberos SPNEGO authentication when the client does not send a credential or the credential is not valid.
This plugin is designed to be used with "Kerberos SPNEGO Extractor".
type: com.airlock.iam.login.app.misc.oneshot.impl.KerberosSpnegoErrorMapperFactory
id: KerberosSpnegoErrorMapperFactory-xxxxxx
displayName:
comment:
properties:
Kerberos SPNEGO Extractor
kerberosConfig
) usernameTransformers
) For further details please refer to the documentation of the username transformer plugins.
type: com.airlock.iam.login.app.misc.oneshot.impl.KerberosSpnegoCredentialExtractorFactory
id: KerberosSpnegoCredentialExtractorFactory-xxxxxx
displayName:
comment:
properties:
kerberosConfig:
usernameTransformers:
Kerberos User Definition
usernameAttribute
) Defines the username to be propagated as Kerberos user.
By default the username from the login form is used ("@username"). Keep in mind that username transformation configured in the target application may have taken place.
Use the prefix "STATIC:" to indicate that what follows is the statically configured username to be used for all users.
Any other value from the context data container may be referred to using its key (for example: "userPrincipalName" or "sAMAccountname"). Make sure that the referenced context data attribute is read by the used user store or user persister plugin.windowsDomain
) The domain name must not contain the backslash ("\") character.
mappingName
) Valid characters are letters, digits and the special characters '.', ':', '-' and '_'.
usernameTransformation
) Note: The target application configuration allows to perform user transformation, too.
type: com.airlock.iam.core.misc.impl.sso.KerberosUserSpec
id: KerberosUserSpec-xxxxxx
displayName:
comment:
properties:
mappingName:
usernameAttribute: @username
usernameTransformation:
windowsDomain:
Kerberos/SPNEGO Config For One-Shot
keytabFile
) servicePrincipal
) Optionally, the realm can be specified if there's no default realm in the kerberos configuration file or if the SPN is associated with a different realm/domain (see example values).
enableDebugging
)
type: com.airlock.iam.login.app.misc.configuration.KerberosConfig
id: KerberosConfig-xxxxxx
displayName:
comment:
properties:
enableDebugging: false
keytabFile:
servicePrincipal:
Key Entry
ticketKey
) contextDataKey
) storeFirstValueOnly
) List
of String
objects.
type: com.airlock.iam.core.misc.sso.KeyEntry
id: KeyEntry-xxxxxx
displayName:
comment:
properties:
contextDataKey:
storeFirstValueOnly: true
ticketKey:
Key Value Pair
key
) value
)
type: com.airlock.iam.core.misc.util.KeyValuePair
id: KeyValuePair-xxxxxx
displayName:
comment:
properties:
key:
value:
Language Query Parameter Appender
parameterName
) appendCountry
) Whether to specify the country in the language query parameter.
If this option is enabled, the two-letter country tag will be appended to the language query parameter when available (e.g. "en_US", "fr_CA", "de_CH"). If this option is enabled but no country is defined, the language parameter will only include the language code (e.g. "en", "fr", "de").
type: com.airlock.iam.login.application.configuration.location.transform.LanguageQueryParameterAppenderConfig
id: LanguageQueryParameterAppenderConfig-xxxxxx
displayName:
comment:
properties:
appendCountry: false
parameterName: lang
Language Settings
validLanguages
) defaultLanguage
) resourcesFilePrefix
) Language dependent text resources used server-side, e.g., for email, SMS, or push messages, are loaded from property files.
This property configures the prefix of these property files.
Example: If the value of this property is "strings", the language dependent files must be "strings_de.properties", "strings_en.properties" and so on and the default file must be "strings.properties".
Note that text elements used in the Loginapp's web frontend are adapted using the Loginapp Design Kit. Please consult the Loginapp Design Kit documentation for further information.
type: com.airlock.iam.common.application.configuration.language.LanguageSettings
id: LanguageSettings-xxxxxx
displayName:
comment:
properties:
defaultLanguage: en
resourcesFilePrefix: strings
validLanguages: [de, fr, it, en]
Language Specific Template
language
) template
)
type: com.airlock.iam.core.misc.renderer.LanguageSpecificTemplate
id: LanguageSpecificTemplate-xxxxxx
displayName:
comment:
properties:
language:
template:
Language Specific Text
language
) text
)
type: com.airlock.iam.core.misc.renderer.LanguageSpecificText
id: LanguageSpecificText-xxxxxx
displayName:
comment:
properties:
language:
text:
Last Selection Consistency User Change Listener
- on user deletion: delete all associated last selections.
- on user name change: updates the user reference for all last selections.
lastSelectionRepository
)
type: com.airlock.iam.login.misc.infrastructure.LastSelectionConsistencyUserChangeListener
id: LastSelectionConsistencyUserChangeListener-xxxxxx
displayName:
comment:
properties:
lastSelectionRepository:
Last Selection Repository Config
sqlDataSource
) logQueries
) If enabled, all SQL queries executed on this repository will be written to the module's corresponding log file. This is only effective if the log level is set to at least INFO.
Warning: query values (including potentially sensitive data) will be logged as well.
tenantId
) If no value is configured, then 'no_tenant' is used as value on the database.
type: com.airlock.iam.flow.shared.application.configuration.selection.LastSelectionRepositoryConfig
id: LastSelectionRepositoryConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sqlDataSource:
tenantId:
Latest Authentication Feedback Processor
type: com.airlock.iam.authentication.application.configuration.processor.LatestAuthenticationFeedbackProcessorConfig
id: LatestAuthenticationFeedbackProcessorConfig-xxxxxx
displayName:
comment:
properties:
Latest Login Attempt Date Range Filter
type: com.airlock.iam.admin.application.configuration.usersearch.filter.LatestLoginAttemptDateRangeFilter
id: LatestLoginAttemptDateRangeFilter-xxxxxx
displayName:
comment:
properties:
Latest Successful Login Date Range Filter
type: com.airlock.iam.admin.application.configuration.usersearch.filter.LatestSuccessfulLoginDateRangeFilter
id: LatestSuccessfulLoginDateRangeFilter-xxxxxx
displayName:
comment:
properties:
LDAP Connection Pool
The plugin makes use of the UnboundID LDAP SDK.
Note: If several plugins share the same main connection settings (server addresses with ports, bind DN, SSL settings) they also share one single connection pool.
Connection Pooling
This plugin manages a pool of open connections to the LDAP server. To perform an operation a connection is checked out of the pool, then used for the operation and afterward checked into the pool of available connections again.
There are several configuration properties that influence how these connections are managed and how connection errors are handled.
To debug the LDAP connections set the following Java system properties:
- com.unboundid.ldap.sdk.debug.enabled=true - If set to true, LDAP debugging is enabled.
- com.unboundid.ldap.sdk.debug.type=asn1,connect,exception,ldap,ldif,monitor,coding-error,other - If set, only the given categories will be logged.
- com.unboundid.ldap.sdk.debug.includeStackTrace=true - If set to true, a stack trace will be included with every log message.
- com.unboundid.ldap.sdk.debug.level=ALL - If set, only messages with a level higher than specified (like ALL, FINE, INFO, WARNING, ...) will be written.
- javax.net.debug=all - Set this property to diagnose SSL related issues.
serversWithPorts
) server-name:port
. If no port number is specified, the default port 389 (or 636 if using SSL) is assumed. serverSelectionPolicy
) - FAILOVER: Always try to get a connection from the first server, if that fails from the second, etc...
- ROUND_ROBIN: Cycle through the configured servers to get connections.
bindDn
) password
) anonymousBind
) connectionSecurity
) The type of connection security, one of NONE, START_TLS or SSL.
Notice: Most directories will refuse to perform a password change operation if the connection is not secured using SSL/TLS.
Notice: Microsoft disabled support for Server certificates using MD5 with KB2862973 (mandatory update in early 2014). Using any server certificate with an MD5 signature in its entire chain will result in a connection error. The same error will be raised when using a certificate using SHA-512 without having KB2973337 installed.
keystoreFile
) Note: If the keystore file name is relative, it is loaded relative to the current directory of the JVM process.
keystorePassword
) keyAlias
) truststoreFile
) Note: If the file name is relative, it is loaded relative to the current directory of the JVM process.
truststorePassword
) checkCertificateServerName
) checkCertificateValidity
) trustAllServerCertificates
) useSynchronousMode
) followReferrals
) connectTimeoutInMs
) responseTimeoutInMs
) This timeout may be reached if the connection has been dropped by a firewall without actively terminating the connection or when a query requires a lot of time on the server.
initialConnections
) maximumConnections
) createNewConnectionsIfNecessary
) maxWaitTimeInMs
) maxConnectionAgeInMs
) trySynchronousReadDuringHealthCheck
) healthCheckResponseTimeoutInMs
) retryUponInvalidConnectionError
) enableHealthCheckOnCheckout
) enableHealthCheckInBackground
) enableHealthCheckOnException
) enableHealthCheckOnCreate
) enableHealthCheckOnRelease
) backgroundHealthCheckIntervalInMs
) healthCheckQueryDn
) useSchema
)
type: com.airlock.iam.core.misc.util.ldap.LdapConnectionPool
id: LdapConnectionPool-xxxxxx
displayName:
comment:
properties:
anonymousBind: false
backgroundHealthCheckIntervalInMs: 60000
bindDn:
checkCertificateServerName: true
checkCertificateValidity: true
connectTimeoutInMs: 2000
connectionSecurity: NONE
createNewConnectionsIfNecessary: false
enableHealthCheckInBackground: true
enableHealthCheckOnCheckout: true
enableHealthCheckOnCreate: false
enableHealthCheckOnException: false
enableHealthCheckOnRelease: false
followReferrals: false
healthCheckQueryDn:
healthCheckResponseTimeoutInMs: 30000
initialConnections: 10
keyAlias:
keystoreFile:
keystorePassword:
maxConnectionAgeInMs: 3600000
maxWaitTimeInMs: 5000
maximumConnections: 100
password:
responseTimeoutInMs: 20000
retryUponInvalidConnectionError: true
serverSelectionPolicy: FAILOVER
serversWithPorts:
trustAllServerCertificates: false
truststoreFile:
truststorePassword:
trySynchronousReadDuringHealthCheck: false
useSchema: false
useSynchronousMode: true
LDAP Connector
Provides the following services by connecting to an LDAP directory (for MS Active Directory, please use the Active Directory Connector plugin):
Main Features
- LDAP directory as user data repository (User Persister, User Iterator, Extended User Persister)
- LDAP directory as password service (check password, reset password, change password)
- LDAP directory as token storage for one user-related token (e.g. for mobile number)
Requirements on Directory Schema
- For using the basic features, users should have object class
inetOrgPerson
. More limited usage is possible withorganizationalPerson
and evenPerson
. - All attribute names are configurable. Therefore custom schemas are supported as long as all user data is stored as attributes in one directory entry (except for roles/groups).
- To use all features of this plugin, custom attributes are required. Please refer to the Airlock IAM documentation page "What LDAP Directory Attributes does Airlock Login/IAM require?" (then go to "LDAP Attributes for User Data").
For details about the meaning of an attribute, please refer to the corresponding attribute setting's help in this plugin.
Depending on the configured attributes, more or fewer features can be used. - User roles/groups can be read from the following:
- From a user attribute with one or more values (see "Roles Attribute"). RDNs can be extracted from DNs stored in this attribute. This set of roles can also be written.
- Roles can be looked up in other directory trees (e.g. groups subtree) by configuring the corresponding query, search depth and filters.
- Nested/hierarchical roles are supported.
How Users are found
For all operations (load, store user, check password, change password, etc.), this plugin first looks up the user entry in the directory using the service account specified in the connection pool settings.
Multiple search trees can be specified in order to limit the search space (and therefore improve performance) when users are stored in multiple subtrees.
Reading / Writing Token/Credential Information
This plugin only provides very limited features for reading / writing token information: It only reads and writes a single attribute stored as user attribute (see "Credential Data Attribute").
It can be used for example to use the mobile phone number authentication token (for 2-factor authentication).
The plugin does not support token order flags, serial numbers, delivery dates, and alike. Please use an "Ldap Credential Persister" plugin for more features.
This plugin offers most features of the "LDAP Password Authenticator". Whereas the "LDAP Password Authenticator" only checks or sets the password this plugin also considers user information such as:
- Locked flag
- User validity attributes
- Failed logins counter
- Password change enforced flag
- Password expiry date
- etc.
Read-only Attributes and Operational Attributes
In property "Read-only Attributes" attributes can be defined that are only read and never written by this plugin. This works not only for context data attributes but for all attributes potentially written by this plugin.
This enables the plugin to read operational attributes and use them in authentication or password management: some directories provide automatically updated operational attributes (e.g. latest password change) that may be read but not be written by LDAP clients. They can be configured in the corresponding attribute settings and put in the list of read-only attributes.
NOTE: Some directories do not provide operational attributes to LDAP clients and always return empty values when read using LDAP.
Limitation of Usage
Unlike the "LDAP User Persister", this plugin is not able to read the password hash from the directory. It can therefore not be used with a custom schema where the password hash is computed in Airlock IAM and only stored (and read) by this plugin.
Note on using this plugin only for password checks
When only using this plugin to check the user's password, additional features like role lookup or context data retrieval may not work as expected.
Related Plugins
The following plugins are highly related to this one and offer slightly more and different functions. In certain situations it may make sense to use a combination of them instead of using this plugin:
- LDAP User Persister
- LDAP Credential Persister
- LDAP Password Authenticator
connectionPool
) usernameAttribute
) credentialDataAttribute
) userContainerNodes
) userSearchScope
) userSearchFilter
) The format and interpretation of filter follows RFC 2254.
usernameConversionPattern
) Regular expression pattern containing a group (a region embraced by parentheses) that can be used in conjunction with property "Username Conversion Replacement" in order to transform the username before it is used for searching the user in the directory. If the username does not match the pattern at all, no transformation is performed.
Example: The pattern "(.*)" and the replacement pattern "user.$1" will transform the username "jdoe" to "user.jdoe" before it is used in the directory.
Example: The pattern "user\.(.*)" and the replacement pattern "$1" will transform the username "user.jdoe" to "jdoe" before it is used in the directory.
usernameConversionReplacement
) insertDnTemplate
) The resulting string must be a correct DN for a newly inserted user.
If no value is specified, the user id attribute (see separate property) together with the user insert tree and the username is used to form a DN for new entries.(resulting in =${userId},).
userInsertTree
) Distinguished name (DN) of the container node (subtree) to insert new users to. If not specified, the first user container node (see separate property) is used. Use ${xxx} to include the context data value with name xxx in the DN (may result in errors if the data does not form a valid subtree).
This property is only used if no "Insert DN Template" is specified and cannot be combined with it.
insertObjectClasses
) Note: When inserting a new entry into an LDAP, the object class defines a number of mandatory attributes. You must make sure that the corresponding attributes are inserted by adding the corresponding values to the new user's context data container and/or mapping other user values to the required attributes (e.g. map the user name to the cn attribute).
This property is only used if users are inserted using this plugin.
defaultAuthMethod
) defaultNextAuthMethod
) additionalInsertData
) passwordAttribute
) Note that this attribute is ignored if a 'Password Modify Extended Operation' is used.
passwordValidityDays
) If a password is changed, this plugin sets the latest-password-change-timestamp and (if the corresponding property is defined) also updates the next-enforced-password-change-timestamp.
If this property is not defined, the "Next Enforced Password Change Timestamp" is not updated.
maximumWrongOldPasswords
) Warning: Make sure that number of logins is not increased by the calling application, too.
forcePasswordChangeAttribute
) orderPasswordAttribute
) passwordOrderUserAttribute
) passwordOrderDateAttribute
) latestPasswordChangeDateAttribute
) nextEnforcedPasswordChangeDateAttribute
) passwordGenerationDateAttribute
) passwordDeliveryDateAttribute
) failedPasswordResetsAttribute
) The name of the LDAP attribute holding the number of failed password reset attempts for flow-based password reset.
Security note: If this column is not specified, failed password reset attempts are not counted, which enables brute-force attacks.
otherCredentialsDeliveryTimestampAttributes
) The type of every referenced column is either a
DATE
or TIMESTAMP
.This information can be used by components that care about not delivering more than one user credential at the same time.
If this column is not specified, no delivery dates are provided to callers.
authMethodAttribute
) nextAuthMethodAttribute
) authMigrationDateAttribute
) validAttribute
) notValidBeforeAttribute
) notValidAfterAttribute
) failedLoginsAttribute
) failedTokenCountsAttribute
) failedLoginsBeforeLatestSuccessfulLoginAttribute
) totalLoginsAttribute
) latestLoginAttemptAttribute
) latestSuccessfulLoginAttribute
) secondLatestSuccessfulLoginAttribute
) firstLoginAttribute
) unlockAttemptsAttribute
) latestUnlockAttemptAttribute
) selfRegisteredAttribute
) selfRegistrationDateAttribute
) channelVerificationResendsAttribute
) lastGSIDValueAttribute
) lastGSIDDateAttribute
) secretQuestionsEnabledAttribute
) contextDataAttributes
) Note: Context data attributes are string based. Values will be read as strings and are converted to string when written.Note: When referring operational attributes, also configure them in the "Attributes to Request" in "Advanced Settings" below.
readOnlyAttributes
) binaryAttributes
) Those attributes are Base64 encoded before they are loaded into the context data container of the user.
Note: To be able to use a an attribute configured here, it must additionally be added to the property "Context Data Attributes".
userDNContextDataAttribute
) This DN is in the format "uid=user,ou=People,dc=company,dc=ch".
maxFailedLogins
) This is only relevant if the property "Update Login Statistics" is on (the default).
Note: User locking only works if the number of failed logins and the locked state can be written/read to/from the directory (see attribute settings).
Important: This feature is disabled in case the Ldap Connector is used as authenticator in a Main Authenticator. In that case, the Main Authenticator is responsible for counting failed logins.
lockedAttribute
) lockReasonAttribute
) This can be the hole description of the reason or a key to the string resource.
lockDateAttribute
) .
staticRoles
) Note that there are other ways to retrieve a user's roles from the directory. See configuration properties "Role Search ..." and "Roles Attribute".
rolesAttribute
) The attribute can have multiple values (= multiple occurrences of the attribute in the directory; not a comma-separated list of values).
Note that there are other ways to write and retrieve a user's roles from the directory. See configuration properties "Role Update: User Attribute In Roles", "Role Search ..." and "Static Roles".
rolesEditable
) If enabled, the way roles are determined (see other role-related properties) is limited.
rolesAttributeRdn
) rolesNestedResolutionDepth
) superusers
, which again has a role users
then both roles are returned. A value of 0 turns off nested role resolution and looks for roles only on the current user object. rolesNestedResolutionTopOnly
) superusers
, which has a role users
, which again has a role basicusers
. If this property is enabled and the resolution depth is at least 2 then only the role basicusers
is returned. If this property is enabled and the resolution depth is set to 1 the role users
is returned. If this property is disabled all visited roles are returned (all three if the resolution depth is at least 2). rolesSearchBase
) This attribute specifies the search context (subtree) where roles are searched. It must identify a subtree in the directory.
Note that there are other ways to retrieve a user's roles from the directory. See configuration properties "Roles Search ..." and "Roles Attribute".
rolesSearchLevel
) This attribute specifies whether the user search scope is the node selected by the configuration property "Roles Search Base" only or whether the serach scope is the whole subtree.
Note that there are other ways to retrieve a user's roles from the directory. See configuration properties "Roles Search ..." and "Roles Attribute".
rolesSearchFilter
) This attribute specifies an arbitrary filter applied when searching the roles. In the filter, you can refer to the user's DN by
${DN}
, the username by ${userId}
and you can use any attribute value listed of the context data container (values of attributes listed in configuration property "Context Data Attributes") by referring to it in the following way: ${attribute-name}
.
Note that there are other ways to retrieve a user's roles from the directory. See configuration properties "Roles Search ..." and "Roles Attribute".
rolesSearchAttribute
) This attribute specifies the name of the attribute with the role name in the result of the search. The attribute must select a string type attribute.
Note that there are other ways to retrieve a user's roles from the directory. See configuration properties "Roles Search ..." and "Roles Attribute".
userAttributeInRolesForRoleUpdate
) Defines the attribute on a role entry containing the users of this role. This attribute will be updated when roles managed in separate LDAP groups are being changed.
If your directory does not automatically update the user entry when writing a user DN to a role entry, configure the property "Role Update: Roles Attribute In User" as well.rolesAttributeInUserForRoleUpdate
) Defines the attribute on a user entry containing the roles of this user. If set, this attribute will be updated when roles are being changed. Configure this property if your directory does not automatically update the user entry when its DN is added to a role entry.
roleFilters
) matchRolesCaseSensitive
) attributesToRequest
) If left empty, all attributes are requested (default).
Operational attributes are attributes which the directory organizes for internal use. Normally, such attributes are not returned to an LDAP client in a standard request for object data. Therefore, they have to be configured explicitly here. In order to return all available operational attributes, the value '+' can be used for certain directories like OpenLDAP.
Some directories return only the operational attributes with the value '+', thus the normal attributes need to be requested in addition by also requesting '*' for all normal attributes.
Alternatively (and if supported by the directory), when only one specific operational attributes is required, configure "*" and the operational attribute (for example "creatorsName") to specifically request this operational attribute in addition to the normal attributes.
updateLoginStatistics
) Disabling this flag makes the plugin suitable as step in a multi-step authentication process (e.g. using the Meta Authenticator or the Main Authenticator).
Note: Login statistic data can only be updated, if the corresponding attributes are configured to be read/written from/to the directory.
searchResultPageSize
) If the property undefined (the default) or if the server does not announce to support the SimplePaging control, paging is disabled.
specialDateTimePattern
) The used timezone is UTC or the local one if the flag "Special Date Time Pattern Use Local Timezone" ist set to true.
If this property is not defined, the LDAP-standard pattern yyyyMMddHHmmss.SSS'Z'
is used.
specialDateTimePatternUseLocalTimezone
) suppressSubstringSearch
) This may greatly improve search performance in large directories.
userCountSearchFilter
) Note: The user count is relevant for the product license. This filter should therefore describe the set of users who should be able to authenticate by Airlock IAM.
userChangeEventListeners
) ldapFailureMappers
) constraintViolationResultCode
) passwordModifyExtendedOperation
)
type: com.airlock.iam.core.misc.impl.persistency.ldap.LdapConnector
id: LdapConnector-xxxxxx
displayName:
comment:
properties:
additionalInsertData:
attributesToRequest:
authMethodAttribute:
authMigrationDateAttribute:
binaryAttributes:
channelVerificationResendsAttribute:
connectionPool:
constraintViolationResultCode: -1
contextDataAttributes:
credentialDataAttribute:
defaultAuthMethod:
defaultNextAuthMethod:
failedLoginsAttribute:
failedLoginsBeforeLatestSuccessfulLoginAttribute:
failedPasswordResetsAttribute:
failedTokenCountsAttribute:
firstLoginAttribute:
forcePasswordChangeAttribute:
insertDnTemplate:
insertObjectClasses: [inetOrgPerson]
lastGSIDDateAttribute:
lastGSIDValueAttribute:
latestLoginAttemptAttribute:
latestPasswordChangeDateAttribute:
latestSuccessfulLoginAttribute:
latestUnlockAttemptAttribute:
ldapFailureMappers:
lockDateAttribute:
lockReasonAttribute:
lockedAttribute:
matchRolesCaseSensitive: true
maxFailedLogins:
maximumWrongOldPasswords: 5
nextAuthMethodAttribute:
nextEnforcedPasswordChangeDateAttribute:
notValidAfterAttribute:
notValidBeforeAttribute:
orderPasswordAttribute:
otherCredentialsDeliveryTimestampAttributes:
passwordAttribute: userPassword
passwordDeliveryDateAttribute:
passwordGenerationDateAttribute:
passwordModifyExtendedOperation: false
passwordOrderDateAttribute:
passwordOrderUserAttribute:
passwordValidityDays:
readOnlyAttributes:
roleFilters:
rolesAttribute:
rolesAttributeInUserForRoleUpdate:
rolesAttributeRdn:
rolesEditable: true
rolesNestedResolutionDepth: 0
rolesNestedResolutionTopOnly: false
rolesSearchAttribute:
rolesSearchBase:
rolesSearchFilter:
rolesSearchLevel: onelevel
searchResultPageSize:
secondLatestSuccessfulLoginAttribute:
secretQuestionsEnabledAttribute:
selfRegisteredAttribute:
selfRegistrationDateAttribute:
specialDateTimePattern:
specialDateTimePatternUseLocalTimezone: false
staticRoles:
suppressSubstringSearch: false
totalLoginsAttribute:
unlockAttemptsAttribute:
updateLoginStatistics: true
userAttributeInRolesForRoleUpdate:
userChangeEventListeners:
userContainerNodes:
userCountSearchFilter:
userDNContextDataAttribute:
userInsertTree:
userSearchFilter: (objectClass=inetOrgPerson)
userSearchScope: subtree
usernameAttribute:
usernameConversionPattern:
usernameConversionReplacement:
validAttribute:
LDAP Credential Persister
Access to the directory is done using the UnboudID library.
This plug-in binds to the LDAP server using a technical user. With this technical user, credentials are searched, read and updated. Make sure the technical user has enough access rights to perform these actions.
connectionPool
) searchContexts
) searchFilter
) ${userId}
to specify the user id in the search filter. The format and interpretation of filter follows RFC 2254. iteratorSearchFilter
) CredentialIterator
). If no filter is given, all entries in the specified search tree are returned from the directory. The format and interpretation of filter follows RFC 2254. useridAttribute
) updateDnTemplate
) Note: Usually it is not necessary (and not recommended) using an update template because it requires that the resulting DN is unique which is often not possible when searching with scope "subtree". This setting, however, can be very useful if the user directory service has no notion of "full names" and can therefore not determine the DN of search result by it-self.
binaryCredentialDataAttribute
) The presence of this property indicates that the credential data is stored in binary form and not in string form. If this property is set, this class returns (and expects) instances of CredentialBean returning false in method "CredentialBean.isCredentialDataStringType()".
You cannot specify both this property and property "col-string-credential-type".
nextBinaryCredentialDataAttribute
) The presence of this property indicates that the credential data is stored in binary form and not in string form. If this property is set, this class returns (and expects) instances of CredentialBean returning false in method "CredentialBean.isCredentialDataStringType()".
You cannot specify both this property and property "col-string-credential-type".
stringCredentialDataAttribute
) The presence of this property indicates that the credential data is stored as string and not in binary form. If this property is set, this class returns (and expects) instances of CredentialBean returning true in method "CredentialBean.isCredentialDataStringType()".
You cannot specify both this property and property "col-binary-credential-type".
nextStringCredentialDataAttribute
) The presence of this property indicates that the credential data is stored as string and not in binary form. If this property is set, this class returns (and expects) instances of CredentialBean returning true in method "CredentialBean.isCredentialDataStringType()".
You cannot specify both this property and property "col-binary-credential-type".
serialAttribute
) nextSerialAttribute
) activeAttribute
) If the column is not specified, all credentials are considered to be active.
deliveryDateAttribute
) nextDeliveryDateAttribute
) otherCredentialsDeliveryDatesAttributes
) generationDateAttribute
) nextGenerationDateAttribute
) orderedAttribute
) orderedUserAttribute
) orderedDateAttribute
) contextDataAttributes
) readOnlyAttributes
) searchResultPageSize
) If the property is set to zero (the default), paging is disabled.
specialDateTimePattern
) The used timezone is UTC or the local one if the flag
special-date-time-pattern-use-local-timezone ist set to true.If this property is not defined, the LDAP-standard pattern yyyyMMddHHmmss.SSS'Z'
is used.
specialDateTimePatternUseLocalTimezone
)
type: com.airlock.iam.core.misc.impl.persistency.ldap.LdapCredentialPersister
id: LdapCredentialPersister-xxxxxx
displayName:
comment:
properties:
activeAttribute:
binaryCredentialDataAttribute:
connectionPool:
contextDataAttributes:
deliveryDateAttribute:
generationDateAttribute:
iteratorSearchFilter:
nextBinaryCredentialDataAttribute:
nextDeliveryDateAttribute:
nextGenerationDateAttribute:
nextSerialAttribute:
nextStringCredentialDataAttribute:
orderedAttribute:
orderedDateAttribute:
orderedUserAttribute:
otherCredentialsDeliveryDatesAttributes:
readOnlyAttributes:
searchContexts:
searchFilter:
searchResultPageSize: 0
serialAttribute:
specialDateTimePattern:
specialDateTimePatternUseLocalTimezone: false
stringCredentialDataAttribute:
updateDnTemplate:
useridAttribute:
LDAP CRL Fetcher
ldapHost
) ldapPort
) issuerName
)
type: com.airlock.iam.core.misc.impl.cert.crl.LdapCrlFetcher
id: LdapCrlFetcher-xxxxxx
displayName:
comment:
properties:
issuerName:
ldapHost:
ldapPort: 389
LDAP Password Authenticator
The plug-in uses a "technical" LDAP user to bind to the directory and search the user to check the password for. If the user can be found, a bind operation using the user's distinguished name (DN) and password is performed. If the bind operation succeeds, the password is considered to be correct.
The plugin may distinguish different types of authentication failures (e.g. "password wrong", "password change enforced") by looking at the error message returned by the LDAP directory. To use this feature, specify the corresponding configuration properties defining error message patterns (see list of LdapFailureMappers config property...). The default authentication failure (i.e. if no pattern is defined or none matches) is PASSWORD_WRONG.
This plug-in does only check the password and does not consider other user attributes, such as locked-flags or forced password change flags. To do this, use the
Because each password check is independent, this plug-in does not need authentication sessions.
This plugin also implements the PasswordService extension point, i.e. it can be used to reset or change a password in an LDAP directory.
If doing so, you must specify the password attribute name (property password-attribute).
Note that most LDAP directories require to connect using SSL (LDAPS) if setting passwords. If using a Microsoft Active Airectory as LDAP server, set the following properties:
- Set
Password Attribute
toUnicodePwd
. - Set
Active Directory Password Encoding
toTRUE
. This will tell this plug-in that it has to deal with an MSAD and therefore set the password slightly different. (It encodes the new password specially for MSAD.)
The plugin writes the canonical class name description of this plugin to the context data container. The class name is stored under the key authPluginClassName
. A short description of this authentication method is stored under the key authMethodShortDesc
. This information may be used by callers.
connectionPool
) searchContexts
) bindDnTemplate
) ${userId}
for the username variable. Binding to the LDAP using this DN is done for both password checking and changing. If this property is empty, the user is first searched. searchFilter
) The format and interpretation of filter follows RFC 2254.
searchAttrName
) usernameConversionPattern
) Regular expression pattern containing a group (a region embraced by parentheses) that can be used in conjunction with property "Username Conversion Replacement" in order to transform the username before it is used for searching the user in the directory. If the username does not match the pattern at all, no transformation is performed.
Example: The pattern "(.*)" and the replacement pattern "user.$1" will transform the username "jdoe" to "user.jdoe" before it is used in the directory.
Example: The pattern "user\.(.*)" and the replacement pattern "$1" will transform the username "user.jdoe" to "jdoe" before it is used in the directory.
usernameConversionReplacement
) ldapFailureMappers
) staticRoles
) passwordAttribute
) Note: This is required if the plugin is used for setting or changing passwords.
activeDirectoryPasswordEncoding
) TRUE
when using an active directory.
Note: This is only used if the plugin is used for setting or changing passwords.
activeDirectoryUnlockUserOnReset
) activeDirectoryAccountControlOnReset
) activeDirectoryCheckPasswordPoliciesForUserInitiatedModification
) activeDirectoryResetPwdLastSetForUserInitiatedModification
) constraintViolationResultCode
) passwordModifyExtendedOperation
)
type: com.airlock.iam.core.misc.impl.authen.ldap.LdapPasswordAuthenticator
id: LdapPasswordAuthenticator-xxxxxx
displayName:
comment:
properties:
activeDirectoryAccountControlOnReset: -1
activeDirectoryCheckPasswordPoliciesForUserInitiatedModification: true
activeDirectoryPasswordEncoding: false
activeDirectoryResetPwdLastSetForUserInitiatedModification: false
activeDirectoryUnlockUserOnReset: false
bindDnTemplate:
connectionPool:
constraintViolationResultCode: -1
ldapFailureMappers:
passwordAttribute:
passwordModifyExtendedOperation: false
searchAttrName:
searchContexts:
searchFilter:
staticRoles:
usernameConversionPattern:
usernameConversionReplacement:
LDAP Password Hash
Password hash plugin supporting password hashes commonly used by LDAP servers. The syntax is {hash-func}hash-value
, where hash-func
is the hash function identifier and hash-value
is the base64-encoded hash value and salt.
This plugin has been tested with OpenLDAP and 389 Directory Server LDAP implementations.
Currently supported hash functions are:
- SSHA: Salted SHA-1
- SSHA256: Salted SHA-256
- SSHA384: Salted SHA-384
- SSHA512: Salted SHA-512
The use of this plugin is discouraged due to security reasons. We recommend using this hash for migration purposes or compatibility with an existing LDAP only. Please use scrypt Password Hash instead (within a PasswordHashConfiguration for Encoded Hash Values).
generationHashFunction
) saltLength
)
type: com.airlock.iam.core.misc.util.password.hash.LdapPasswordHash
id: LdapPasswordHash-xxxxxx
displayName:
comment:
properties:
generationHashFunction:
saltLength: 32
LDAP Password Repository
connector
)
type: com.airlock.iam.common.application.configuration.password.repository.LdapPasswordRepositoryConfig
id: LdapPasswordRepositoryConfig-xxxxxx
displayName:
comment:
properties:
connector:
LDAP Search Context
searchTree
) searchLevel
) Valid values are onelevel
and subtree
. The default is onelevel
.
type: com.airlock.iam.core.misc.util.ldap.LdapSearchContext
id: LdapSearchContext-xxxxxx
displayName:
comment:
properties:
searchLevel: onelevel
searchTree:
LDAP Search Filter
filterExpression
)
type: com.airlock.iam.core.misc.util.ldap.LdapSearchFilter
id: LdapSearchFilter-xxxxxx
displayName:
comment:
properties:
filterExpression:
Ldap String Attribute
name
) value
)
type: com.airlock.iam.core.misc.impl.persistency.ldap.LdapStringAttribute
id: LdapStringAttribute-xxxxxx
displayName:
comment:
properties:
name:
value:
LDAP Token List Persister
Access to the directory is done using UnboundID LDAP SDK.
This plug-in binds to the LDAP server using a technical user. With this technical user, users are searched, read and updated. Make sure the technical user has enough access rights to perform these actions.
Note that setting passwords is done in an LDAP specific way such that it only works in conjunction with the password hash plug-in IdentityPasswordHash
.
Make sure that users of this implementation (e.g. Loginapp and password change applications) use the IdentityPasswordHash
plug-in as password hash function.
The method changeUsername(String oldUsername, String newUsername)
is not implemented and will throw a NotImplementedException
.
Working with Microsoft Active Directory (MSAD)
When setting passwords using this plug-in and an MSAD, the following settings must be used:- Set
password-attribute
toUnicodePwd
. - Set
password-attribute-is-string
toFALSE
. - Set
ad-like-password-set
toTRUE
. This will tell this plug-in that it has to deal with an MSAD and therefore set the password slightly different. (It encodes the new password specially for MSAD.)
connectionPool
) searchContexts
) searchFilter
) ${userId}
to specify the user id in the search filter. The format and interpretation of filter follows RFC 2254. iteratorSearchFilter
) UserIterator
). If no filter is given, all entries in the specified search tree are returned from the directory. The format and interpretation of filter follows RFC 2254. useridAttribute
) updateDnTemplate
) Note: Usually it is not necessary (and not recommended) using an update template because it requires that the resulting DN is unique which is often not possible when searching with scope "subtree". This setting, however, can be very useful if the user directory service has no notion of "full names" and can therefore not determine the DN of search result by it-self.
tokenListAttribute
) The corresponding attribute must be able to store binary data.
nextTokenListAttribute
) The corresponding attribute must be able to store binary data.
activeAttribute
) If the column is not specified, all tokenlists are considered to be active.
challengeOpenSinceAttribute
) unansweredChallengesAttribute
) deliveryDateAttribute
) otherCredentialsDeliveryDatesAttributes
) generationDateAttribute
) orderedAttribute
) orderedUserAttribute
) orderedDateAttribute
) contextDataAttributes
) readOnlyAttributes
) searchResultPageSize
) If the property is set to zero (the default), paging is disabled.
specialDateTimePattern
) The used timezone is UTC or the local one if the flag
special-date-time-pattern-use-local-timezone ist set to true.If this property is not defined, the LDAP-standard pattern yyyyMMddHHmmss.SSS'Z'
is used.
specialDateTimePatternUseLocalTimezone
)
type: com.airlock.iam.core.misc.impl.persistency.ldap.LdapTokenListPersister
id: LdapTokenListPersister-xxxxxx
displayName:
comment:
properties:
activeAttribute:
challengeOpenSinceAttribute:
connectionPool:
contextDataAttributes:
deliveryDateAttribute:
generationDateAttribute:
iteratorSearchFilter:
nextTokenListAttribute:
orderedAttribute:
orderedDateAttribute:
orderedUserAttribute:
otherCredentialsDeliveryDatesAttributes:
readOnlyAttributes:
searchContexts:
searchFilter:
searchResultPageSize: 0
specialDateTimePattern:
specialDateTimePatternUseLocalTimezone: false
tokenListAttribute:
unansweredChallengesAttribute:
updateDnTemplate:
useridAttribute:
LDAP User Persister
This plug-in binds to the LDAP server using a technical user. With this technical user, users are searched, read and updated. Make sure the technical user has enough access rights to perform these actions.
Note that setting passwords is done in an LDAP specific way such that it only works in conjunction with the password hash plug-in IdentityPasswordHash
.
The method changeUsername(String oldUsername, String newUsername)
is not implemented and will throw a NotImplementedException
.
Working with Microsoft Active Directory (MSAD)
When setting passwords using this plug-in and an MSAD, the following settings must be used:- Set
password-attribute
toUnicodePwd
. - Set
password-attribute-is-string
toFALSE
. - Set
ad-like-password-set
toTRUE
. This will tell this plug-in that it has to deal with an MSAD and therefore set the password slightly different. (It encodes the new password specially for MSAD.)
connectionPool
) searchContexts
) Note that new users (using "insertUser(...)") will be added to one tree only. See property "Insert DN Template".
searchFilter
) ${userId}
to specify the user id in the search filter. The format and interpretation of filter follows RFC 2254. iteratorSearchFilter
) UserIterator
). If no filter is given, all entries in the specified search tree are returned from the directory. The format and interpretation of filter follows RFC 2254. useridAttribute
) updateDnTemplate
) Note: Usually it is not necessary (and not recommended) using an update template because it requires that the resulting DN is unique which is often not possible when searching with scope "subtree". This setting, however, can be very useful if the user directory service has no notion of "full names" and can therefore not determine the DN of search result by it-self.
insertDnTemplate
) A DN-template is essential if users are inserted using this persister. If this plugin only reads and updates user data, this property is optional. If users have to be inserted, either this property or the property "update-dn-template" is mandatory. If both are defined, this property has precedence over the "update-dn-template" when inserting users.
insertObjectClasses
) Note: When inserting a new entry into an LDAP, the object class defines a number of mandatory attributes. You must make sure that the corresponding attributes are inserted by adding the corresponding values to the new user's context data container and/or mapping other user values to the required attributes (e.g. map the user name to the cn attribute).
This property is only used if users are inserted using this plugin.
defaultAuthMethod
) defaultNextAuthMethod
) additionalInsertData
) passwordAttribute
) passwordAttributeIsString
) adLikePasswordHandling
) TRUE
when using an active directory. forcePasswordChangeAttribute
) orderPasswordAttribute
) passwordOrderUserAttribute
) passwordOrderDateAttribute
) latestPasswordChangeDateAttribute
) nextEnforcedPasswordChangeDateAttribute
) passwordGenerationDateAttribute
) passwordDeliveryDateAttribute
) failedPasswordResetsAttribute
) The name of the LDAP attribute holding the number of failed password reset attempts for flow-based password reset.
Security note: If this column is not specified, failed password reset attempts are not counted, which enables brute-force attacks.
otherCredentialsDeliveryTimestampAttributes
) The type of every referenced column is either a
DATE
or TIMESTAMP
.This information can be used by components that care about not delivering more than one user credential at the same time.
If this column is not specified, no delivery dates are provided to callers.
authMethodAttribute
) nextAuthMethodAttribute
) authMigrationDateAttribute
) lockedAttribute
) lockReasonAttribute
) This can be the hole description of the reason or a key to the string resource.
lockDateAttribute
) .
validAttribute
) notValidBeforeAttribute
) notValidAfterAttribute
) failedLoginAttribute
) failedLoginBeforeLatestSuccessfulLoginAttribute
) failedTokenCountsAttribute
) totalLoginsAttribute
) latestLoginAttemptAttribute
) latestSuccessfulLoginAttribute
) secondLatestSuccessfulLoginAttribute
) firstLoginAttribute
) unlockAttemptsAttribute
) latestUnlockAttemptAttribute
) selfRegisteredAttribute
) selfRegistrationDateAttribute
) channelVerificationResendsAttribute
) lastGSIDValueAttribute
) lastGSIDDateAttribute
) secretQuestionsEnabledAttribute
) activeDirectoryLockedFlagSupported
) activeDirectoryDisabledFlagSupported
) activeDirectoryEnforcePasswordChangeFlagSupported
) addObjectGuidToContextData
) addImmutableIDToContextData
) userDNContextDataAttribute
) This DN is in the format "uid=user,ou=People,dc=company,dc=ch"
contextDataAttributes
) Note: Context data attributes are string based. Values will be read as strings and are converted to string when written.
Notice: When using Active Directory and needing the special attribute "objectGUID" or "ImmutableID", please enable it in the "MSAD-specific Settings" instead to ensure proper encoding.
readOnlyAttributes
) rolesAttribute
) The attribute can have multiple values (= multiple occurrences of the attribute in the directory; not a comma-separated list of values).
Note that there are other ways to retrieve a user's roles from the directory. See configuration properties roles-search-*
and static-roles
.
rolesAttributeRdn
) roles-attribute
and when the role value is given as a full DN, e.g. "cn=admin,dc=groups,dc=auth,o=acme", you can specify the RDN which identifies the role name. In the previous example if you specify "cn" as the RDN then the value "admin" will be extracted. rolesNestedResolutionDepth
) roles-attribute
you can specify the depth of nested role resolution.
That is, if the user has a role superusers
, which again has a role users
then both roles are returned. A value of 0 turns off nested role resolution and looks for roles only on the current user object. rolesNestedResolutionTopOnly
) rolesNestedResolutionDepth
with a value >0 you can specify whether all nested roles are selected or only the top-most roles.
For example, assume the user has a role superusers
, which has a role users
, which again has a role basicusers
. If this property is enabled and the resolution depth is at least 2 then only the role basicusers
is returned. If this property is enabled and the resolution depth is set to 1 the role users
is returned. If this property is disabled all visited roles are returned (all three if the resolution depth is at least 2). staticRoles
) Note that there are other ways to retrieve a user's roles from the directory. See configuration properties roles-search-*
and roles-attribute
.
rolesSearchBase
) roles-search-level
, roles-search-filter
, and roles-search-attribute
this forms a flexible way to retrieve a user's role from the LDAP directory. The selected roles are granted to the user after successful authentication.This attribute specifies the search context (subtree) where roles are searched. It must identify a subtree in the directory.
Note that there are other ways to retrieve a user's roles from the directory. See configuration properties roles-search-*
and roles-attribute
.
rolesSearchLevel
) roles-search-base
, roles-search-filter
, and roles-search-attribute
this forms a flexible way to retrieve a user's role from the LDAP directory. The selected roles are granted to the user after successful authentication.This attribute specifies whether the search scope is the node selected by the configuration property
roles-search-base
only or whether the serach scope is the whole subtree.
Note that there are other ways to retrieve a user's roles from the directory. See configuration properties roles-search-*
and roles-attribute
.
rolesSearchFilter
) roles-search-base
, roles-search-level
, and roles-search-attribute
this forms a flexible way to retrieve a user's role from the LDAP directory. The selected roles are granted to the user after successful authentication.This attribute specifies an arbitrary filter applied when searching the roles. In the filter, you can refer to the user's DN by
${DN}
, the username by ${userId}
and you can use any attribute value listed of the context data container (values of attributes listed in configuration property context-data-attribute
) by referring to it in the following way: ${attribute-name}
.
Note that there are other ways to retrieve a user's roles from the directory. See configuration properties roles-search-*
and roles-attribute
.
rolesSearchAttribute
) roles-search-base
, roles-search-level
, and roles-search-filter
this forms a flexible way to retrieve a user's role from the LDAP directory. The selected roles are granted to the user after successful authentication.This attribute specifies the name of the attribute with the role name in the result of the search. The attribute must select a string type attribute.
Note that there are other ways to retrieve a user's roles from the directory. See configuration properties roles-search-*
and roles-attribute
.
roleFilters
) matchRolesCaseSensitive
) searchResultPageSize
) This property defines the amount of entries to fetch per page. When loading a large number of entries, paging improves performance. This setting may also be useful if the LDAP directory server limits the amount of entries in a search result.
If the property is set to zero (the default) or if the server does not announce support of the SimplePaging control, paging is disabled and all results will be loaded at once.
specialDateTimePattern
) The used timezone is UTC or the local one if the flag
special-date-time-pattern-use-local-timezone ist set to true.If this property is not defined, the LDAP-standard pattern yyyyMMddHHmmss.SSS'Z'
is used.
specialDateTimePatternUseLocalTimezone
) suppressSubstringSearch
) This may greatly improve search performance in large directories.
userCountSearchFilter
) Note: The user count is relevant for the product license. This filter should therefore describe the set of users who should be able to authenticate by Airlock IAM.
userChangeEventListeners
)
type: com.airlock.iam.core.misc.impl.persistency.ldap.LdapUserPersister
id: LdapUserPersister-xxxxxx
displayName:
comment:
properties:
activeDirectoryDisabledFlagSupported: false
activeDirectoryEnforcePasswordChangeFlagSupported: false
activeDirectoryLockedFlagSupported: false
adLikePasswordHandling: false
addImmutableIDToContextData: false
addObjectGuidToContextData: false
additionalInsertData:
authMethodAttribute:
authMigrationDateAttribute:
channelVerificationResendsAttribute:
connectionPool:
contextDataAttributes:
defaultAuthMethod:
defaultNextAuthMethod:
failedLoginAttribute:
failedLoginBeforeLatestSuccessfulLoginAttribute:
failedPasswordResetsAttribute:
failedTokenCountsAttribute:
firstLoginAttribute:
forcePasswordChangeAttribute:
insertDnTemplate:
insertObjectClasses: [inetOrgPerson]
iteratorSearchFilter:
lastGSIDDateAttribute:
lastGSIDValueAttribute:
latestLoginAttemptAttribute:
latestPasswordChangeDateAttribute:
latestSuccessfulLoginAttribute:
latestUnlockAttemptAttribute:
lockDateAttribute:
lockReasonAttribute:
lockedAttribute:
matchRolesCaseSensitive: true
nextAuthMethodAttribute:
nextEnforcedPasswordChangeDateAttribute:
notValidAfterAttribute:
notValidBeforeAttribute:
orderPasswordAttribute:
otherCredentialsDeliveryTimestampAttributes:
passwordAttribute:
passwordAttributeIsString: false
passwordDeliveryDateAttribute:
passwordGenerationDateAttribute:
passwordOrderDateAttribute:
passwordOrderUserAttribute:
readOnlyAttributes:
roleFilters:
rolesAttribute:
rolesAttributeRdn:
rolesNestedResolutionDepth: 0
rolesNestedResolutionTopOnly: false
rolesSearchAttribute:
rolesSearchBase:
rolesSearchFilter:
rolesSearchLevel: onelevel
searchContexts:
searchFilter:
searchResultPageSize: 0
secondLatestSuccessfulLoginAttribute:
secretQuestionsEnabledAttribute:
selfRegisteredAttribute:
selfRegistrationDateAttribute:
specialDateTimePattern:
specialDateTimePatternUseLocalTimezone: false
staticRoles:
suppressSubstringSearch: false
totalLoginsAttribute:
unlockAttemptsAttribute:
updateDnTemplate:
userChangeEventListeners:
userCountSearchFilter:
userDNContextDataAttribute:
useridAttribute:
validAttribute:
Legacy Context Data Item
contextDataName
) databaseColumnName
) readonlyOnUpdate
)
type: com.airlock.iam.core.misc.impl.persistency.db.contextdata.LegacyContextDataItem
id: LegacyContextDataItem-xxxxxx
displayName:
comment:
properties:
contextDataName:
databaseColumnName:
readonlyOnUpdate: false
Legacy Email OTP Authentication Step
Configuration for an authentication flow step to check an OTP sent via email.
Note: Emails are neither confidential nor authentic (i.e. the user cannot be sure that the email is really from Airlock IAM and Airlock IAM cannot be sure that the email is delivered to the correct user). Therefore, this step must not be used for high-security applications.emailService
) messageTemplate
) The string $TOKEN$ in the message template is mandatory and is replaced by the generated OTP.
If the message text is in HTML code, enable the property "Message Template Is HTML".
In order to access our services, please provide the following security code: $TOKEN$
Your Airlock IAM Server
messageTemplateIsHtml
) emailSubject
) ignoreCase
) credentialPersister
) maskingSettings
) If left empty, the email address will not be masked.
otpGenerator
) otpValiditySeconds
) The value 0 (zero) disables this feature, i.e. OTPs never expire (this is the default).
maxRetries
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.emailotp.LegacyEmailOtpAuthenticationStepConfig
id: LegacyEmailOtpAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: EMAIL
credentialPersister:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
emailService:
emailSubject:
ignoreCase: false
interactiveGotoTargets:
maskingSettings:
maxRetries: 0
messageTemplate: $TOKEN$
messageTemplateIsHtml: true
onFailureGotos:
otpGenerator:
otpValiditySeconds: 0
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Legacy ID Propagation Adapter
Adapter for a legacy Identity Propagator plugin.
The set of identity propagators that can be configured is limited to those that don't redirect the response and don't require the HTTP request.
The roles made available to the identity propagator are those obtained by the Role Provider plugins configured here. Thus, if no Role Providers are configured, the identity propagator will not get any roles, not even the user's roles from the DB.
identityPropagator
) condition
) roleProviders
) usernameProviders
) Note that when possible these transformations should be configured in the target application instead. However, if username transformations are configured both here and in the target application, then the transformations defined in the target application will be ignored and the transformations defined here will be applied directly to the technical user ID.
contextDataProviders
) passwordAttributeKey
) The optional key by which the password should be retrieved from password steps.
If no key is configured or no password was entered for this key, no password is propagated.
type: com.airlock.iam.login.application.configuration.targetapp.LegacyIdPropagatorConfig
id: LegacyIdPropagatorConfig-xxxxxx
displayName:
comment:
properties:
condition:
contextDataProviders:
identityPropagator:
passwordAttributeKey:
roleProviders:
usernameProviders:
Legacy mTAN Registration Flow
Simple configuration for an mTAN registration self-service flow.
The following steps are automatically generated:
- A User Data Edit Step (step ID "register-mtan") with an mTAN number item and optionally an mTAN label item.
- An mTAN Verification Step
- An Apply Changes Step
If more advanced features are needed, a Custom Protected Self-Service Flow can be configured.
flowId
) accessCondition
) Precondition that must be fulfilled for a user to access this flow.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
mtanSettings
) numberKey
) labelKey
) messageProvider
)
type: com.airlock.iam.selfservice.application.configuration.flow.DefaultMtanRegistrationFlowConfig
id: DefaultMtanRegistrationFlowConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
flowId:
labelKey:
messageProvider:
mtanSettings:
numberKey: mtanNumber
Letter Order Interval Condition (Public Self-Service)
Condition that is true, if one of the following conditions is met:
- The user has an active password order, which was ordered within the configured timeframe and has not been processed yet (i.e. the order new password flag is "true")
- A password has been generated for the user within the configured timeframe (i.e. the "latest password generation date" is within the configured timeframe). The generation date corresponds to the time that either a password batch task has processed a password order, or an admin has manually generated a password for the user.
interval
)
type: com.airlock.iam.publicselfservice.application.configuration.selection.condition.PasswordLetterOrderIntervalConditionConfig
id: PasswordLetterOrderIntervalConditionConfig-xxxxxx
displayName:
comment:
properties:
interval:
License and Usage Analytics
This plugin securely transmits both License and Usage Analytics to an Airlock cloud service.
License Analytics is always enabled and must be transmitted regularly, as per our terms and conditions. It includes:
- License information from license.txt
- The current IAM version
- The number of users in the database
- Whether IAM is running in a docker container
- The status of the "Enable Usage Analytics" property
Usage Analytics are only sent if the "Enable Usage Analytics" property is enabled. Refer to that property’s documentation for details.
For review, the transferred data is also stored in plaintext in "iam/instances/{instance-name}/usage/usage-data.json"
Currently, IAM only sends License Analytics to an Airlock cloud service. No Usage Analytics are being transmitted at this time.
enableUsageAnalytics
) Enabling this property grants consent to transfer anonymized Usage Analytics to the Airlock cloud service in addition to License Analytics.
The following information is included:
- Anonymized plugin configuration from medusa-configuration.xml
- Anonymized instance configuration from instance.properties
- Database schema information
- IAM metrics
Currently, only License Analytics are sent to the Airlock cloud service. No Usage Analytics are transmitted at this time.
type: com.airlock.iam.admin.application.configuration.analytics.LicenseAnalyticsConfig
id: LicenseAnalyticsConfig-xxxxxx
displayName:
comment:
properties:
enableUsageAnalytics: true
Link Configuration Authentication UI
- Username Password Authentication Step
- User Identification Step
- Password-only Authentication Step
- FIDO Passwordless Authentication Step
- Airlock 2FA Usernameless Authentication Step
stepId
) userSelfRegistrationLink
) publicSelfServiceLink
) additionalAuthenticationButtons
)
type: com.airlock.iam.authentication.application.configuration.ui.LinkConfigurationAuthenticationStepUiConfig
id: LinkConfigurationAuthenticationStepUiConfig-xxxxxx
displayName:
comment:
properties:
additionalAuthenticationButtons:
publicSelfServiceLink:
stepId:
userSelfRegistrationLink:
List User Profile Item Config
itemList
) itemsAreResourceKeys
) resourceKeyPrefix
) The resulting resource key is composed from <resource key prefix>.<value>
sortItems
) stringResourceKey
) propertyName
) optional
) modifiable
) validateOnlyChangedValues
) sortable
)
type: com.airlock.iam.common.application.configuration.userprofile.ListUserProfileItemConfig
id: ListUserProfileItemConfig-xxxxxx
displayName:
comment:
properties:
itemList:
itemsAreResourceKeys: false
modifiable: true
optional: true
propertyName:
resourceKeyPrefix:
sortItems: false
sortable: true
stringResourceKey:
validateOnlyChangedValues: true
LocalDate Context Data Item Name
contextDataName
)
type: com.airlock.iam.core.application.configuration.contextdata.DateContextDataItemNameConfig
id: DateContextDataItemNameConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
Location
locationName
) The name of this location displayed in the maintenance message editor of the Adminapp.
Note: In order for the Loginapp to be able to retrieve the messages for the different locations, the same 'Location Name' also has to be configured in the Loginapp's maintenance message settings.
type: com.airlock.iam.admin.application.configuration.maintenancemessages.MaintenanceMessageLocation
id: MaintenanceMessageLocation-xxxxxx
displayName:
comment:
properties:
locationName:
Location Filter Config
locationToBeMatched
) subStringOnly
)
type: com.airlock.iam.flow.api.application.configuration.LocationFilterConfig
id: LocationFilterConfig-xxxxxx
displayName:
comment:
properties:
locationToBeMatched:
subStringOnly: false
Location Interpretations Configuration
Analyzes an URI sent to the /<loginapp-uri>/rest/public/authentication/location/interpret endpoint and if it matches the specified pattern, returns a set of values to the client.
This could be the display language or other information extracted from the URI, that can be used by the client before showing its UI.
uriPattern
) locationInterpreterConfigs
) The endpoint returns a JSON map of key/values that have been extracted or derived from the given URI.
This map specifies the keys returned and a corresponding plugin defining the logic to derive the value. For example, the key 'lang' could be mapped to a plugin that extracts a user language from the URI.
The resulting map of all key/value pairs is returned to the REST client.
type: com.airlock.iam.login.application.configuration.location.interpret.LocationInterpretersConfigImpl
id: LocationInterpretersConfigImpl-xxxxxx
displayName:
comment:
properties:
locationInterpreterConfigs:
uriPattern: .*
Lock Expired Initial Passwords Task
If a user account satisfies all of the following conditions, it is locked:
- The account is not marked invalid
- The account is not locked
- A password change is enforced
- The generation date of the password is not null and older than the
initial-password-validity-period (as specified by the configuration of this plugin.
Note: This task determines whether a password is an initial password based only on the facts that the password change flag is set and that there is a password generation date/time. Thus, setting the password change flag to true and not changing an "old" generation date may result in the account being locked by this task.
userPersister
) userIterator
) Usually this is the same as the "User Persister".
passwordValidityDays
) deletePassword
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.LockExpiredInitialPasswordsTask
id: LockExpiredInitialPasswordsTask-xxxxxx
displayName:
comment:
properties:
deletePassword: true
passwordValidityDays:
userIterator:
userPersister:
Lock Inactive Accounts Task
The task looks at the latest successful login timestamp. If it is not empty and too far in the past (see configuration properties below), the account is locked. Login failures are not taken into account.
Accounts marked invalid and accounts that are already locked are ignored.
userPersister
) userIterator
) Usually this is the same as the UserPersister.
expirationDays
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.LockInactiveAccountsTask
id: LockInactiveAccountsTask-xxxxxx
displayName:
comment:
properties:
expirationDays:
userIterator:
userPersister:
Lock Self-Service Step
Self-service step that locks a user.
This step is non-interactive and immediately locks the user with the configured lock reason. For usability reasons, it is recommended to precede this step with an interactive step that allows the user to confirm the lock action, such as an Acknowledge Message Step or an approval step.
lockReason
) The lock reason to be set upon locking.
When displayed in the Adminapp, the lock reason is translated using the key user.account-state., e.g. user.account-state.LockReason.SelfLockout.
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.LockSelfServiceStepConfig
id: LockSelfServiceStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
lockReason: LockReason.SelfLockout
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Locked User Filter
type: com.airlock.iam.admin.application.configuration.usersearch.filter.LockedUserFilter
id: LockedUserFilter-xxxxxx
displayName:
comment:
properties:
Locked User Restriction
allowedLockReasons
) List of lock reasons that still allow the user to perform public self-services. Locked users with any lock reason not listed here will not be allowed to perform public self-services.
Note that a user is not automatically unlocked after a successful public self-service. A "Unlock User Step (Public Self-Service)" step has to be configured to perform this task.
enableFeedback
) If enabled, the User Identification Step always returns a specific error code in case this restriction is violated.
If no restrictions are configured to provide feedback, a flow can also be started for users violating one or more restrictions and the flow will advance to the user identity verification step in stealth mode. In this mode, the initial behavior of the step is the same as for unrestricted users (e.g. an mTAN OTP is required), but all responses are rejected as if they were incorrect. This behavior prevents restricted users from ever proceeding further in the flow and thus offers protection against user enumeration. Please refer to the documentation for more details.
Irrespective of this settings, once the identity verification step is passed, restriction are always checked before and after each method call and violations are always reported.
Security notice: Enabling this feature might allow a client to determine whether certain users exist in the system.
type: com.airlock.iam.publicselfservice.application.configuration.restrictions.LockedUserRestrictionConfig
id: LockedUserRestrictionConfig-xxxxxx
displayName:
comment:
properties:
allowedLockReasons:
enableFeedback: false
Locking Settings (Adminapp)
This plugin defines the lock reasons admins can select when locking users, the behavior when users are locked temporarily, and the handling of active user sessions at the time of locking.
Users may be locked automatically (e.g. after a certain amount of failed logins) or manually by the administrator.
lockReasons
) Identity strings that define the lock reasons administrators can select when manually locking a user. Typically, these strings are set to the locale identifiers used with translation.
The following manual lock reasons are predefined:
LockReason.InitiatedByUser = "Requested by user" LockReason.InitiatedByAdmin = "Locked by administrator"temporaryLockingConfig
) sessionLockBehavior
) Defines how to handle existing user sessions at the time of locking.
Note: Only applicable if the Adminapp is deployed behind the same Airlock Gateway (WAF) as the Loginapp.
type: com.airlock.iam.admin.application.configuration.users.LockingSettings
id: LockingSettings-xxxxxx
displayName:
comment:
properties:
lockReasons: [LockReason.InitiatedByUser, LockReason.InitiatedByAdmin]
sessionLockBehavior:
temporaryLockingConfig:
Log Cleanup Task
Deletes the oldest log files periodically so that only a configurable number of log files are kept. This can be used to limit log file growth.
Log file timestamps are extracted from the log file names in order to determine which ones to delete.
numberOfLogFilesToKeep
) The number of log files to keep.
If there are more log files, the oldest ones will be deleted, such that only the configured number of log files remain.
logDirectory
) logFileNamePatterns
) Log file path pattern to determine which logs to clean up.
The oldest log files that match an expression will be deleted so that for every entry only the configured number of log files remain. Use $(timestamp)
to mark the location of the log file timestamps.
Files that don't match any pattern will be completely ignored by this task.
timestampFormat
) The format of the timestamp in the log file names.
Timestamps are marked by $(timestamp) and are use to determine the oldest log files, which are deleted first.
yyyy
stands for the year.MM
stands for the month.dd
stands for the day.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.LogCleanupTask
id: LogCleanupTask-xxxxxx
displayName:
comment:
properties:
logDirectory:
logFileNamePatterns: [loginapp.log.$(timestamp), adminapp.log.$(timestamp), servicecontainerapp.log.$(timestamp), medusa-audit.log.$(timestamp)]
numberOfLogFilesToKeep:
timestampFormat: DEFAULT
Log File
nameTranslationKey
) file
) encoding
) Set to PLATFORM_DEFAULT to use the platform's default encoding.
filterPatterns
)
type: com.airlock.iam.admin.application.configuration.logviewer.LogFile
id: LogFile-xxxxxx
displayName:
comment:
properties:
encoding: UTF-8
file:
filterPatterns:
nameTranslationKey:
Log Viewer
When configured, enables the Log Viewer, which allows viewing messages from log files.
The available log files as well as their order can be customized here. You may also define a set of filter rules, which can be selected by admins to view specific log messages.
In addition, color schemes can be defined, which highlight specific messages with the selected colors.
logfiles
) The list of log files that will appear in the log viewer.
The order of the log files in this property is used in the Log Viewer as well.
colorScheme
) Defines color schemes for the Log Viewer. Messages are matched using regular expressions.
If the log line matches more than one pattern, the first matching rule is used. The log level is matched first and then the message text. If no scheme is defined, the following default scheme is used:
- Error messages (log level "ERROR") are marked red.
- Warning messages (log level "WARN") are marked yellow.
- Successful authentication lines are marked green.
initiallySelectedLogFile
) This property serves two purposes:
Firstly, it defines the log file that is selected when the Log Viewer is first opened during a browser session. When reopening the Log Viewer during the same session, the last selected log file is remembered.
Secondly, it defines the log file that is opened when switching to the Log Viewer from the User Activity Tab. In this case, it will always open the file defined by this property.
If left undefined, the first log file in the list is used instead.
logConfigChanges
) If enabled, the difference between the previously activated configuration and the newly activated configuration gets logged to the Adminapp log file when a configuration is activated in the Config Editor.
For example, if the Radius service port gets changed, the following log message is logged:
<property name="port">1812</property> <property name="port">1813</property>
Please be aware that enabling this setting has no effect for the current activation, but for future ones.
type: com.airlock.iam.admin.application.configuration.logviewer.LogViewer
id: LogViewer-xxxxxx
displayName:
comment:
properties:
colorScheme:
initiallySelectedLogFile:
logConfigChanges: false
logfiles:
Logged in from new Device
type: com.airlock.iam.authentication.application.configuration.newdevice.LoggedInFromNewDeviceEventConfig
id: LoggedInFromNewDeviceEventConfig-xxxxxx
displayName:
comment:
properties:
Logical AND
conditions
)
type: com.airlock.iam.flow.application.configuration.selection.condition.LogicalAndFlowConditionConfig
id: LogicalAndFlowConditionConfig-xxxxxx
displayName:
comment:
properties:
conditions:
Logical AND Condition
conditions
)
type: com.airlock.iam.core.misc.persistency.usereventbus.conditions.LogicalAndEventCondition
id: LogicalAndEventCondition-xxxxxx
displayName:
comment:
properties:
conditions:
Logical AND Device Condition
devicePredicates
)
type: com.airlock.iam.airlock2fa.application.configuration.provider.predicate.Airlock2FADeviceLogicalAndPredicateConfig
id: Airlock2FADeviceLogicalAndPredicateConfig-xxxxxx
displayName:
comment:
properties:
devicePredicates:
Logical AND Role Derivation
requiredRoles
) requiredRiskTags
)
type: com.airlock.iam.authentication.application.configuration.risk.accesspolicy.condition.LogicalAndRoleDerivationCondition
id: LogicalAndRoleDerivationCondition-xxxxxx
displayName:
comment:
properties:
requiredRiskTags:
requiredRoles:
Logical NOT
condition
)
type: com.airlock.iam.flow.application.configuration.selection.condition.LogicalNotFlowConditionConfig
id: LogicalNotFlowConditionConfig-xxxxxx
displayName:
comment:
properties:
condition:
Logical NOT Condition
condition
)
type: com.airlock.iam.core.misc.persistency.usereventbus.conditions.LogicalNotEventCondition
id: LogicalNotEventCondition-xxxxxx
displayName:
comment:
properties:
condition:
Logical NOT Device Condition
devicePredicate
)
type: com.airlock.iam.airlock2fa.application.configuration.provider.predicate.Airlock2FADeviceLogicalNotPredicateConfig
id: Airlock2FADeviceLogicalNotPredicateConfig-xxxxxx
displayName:
comment:
properties:
devicePredicate:
Logical NOT Role Derivation
condition
)
type: com.airlock.iam.authentication.application.configuration.risk.accesspolicy.condition.LogicalNotRoleDerivationCondition
id: LogicalNotRoleDerivationCondition-xxxxxx
displayName:
comment:
properties:
condition:
Logical OR
conditions
)
type: com.airlock.iam.flow.application.configuration.selection.condition.LogicalOrFlowConditionConfig
id: LogicalOrFlowConditionConfig-xxxxxx
displayName:
comment:
properties:
conditions:
Logical OR Condition
conditions
)
type: com.airlock.iam.core.misc.persistency.usereventbus.conditions.LogicalOrEventCondition
id: LogicalOrEventCondition-xxxxxx
displayName:
comment:
properties:
conditions:
Logical OR Device Condition
devicePredicates
)
type: com.airlock.iam.airlock2fa.application.configuration.provider.predicate.Airlock2FADeviceLogicalOrPredicateConfig
id: Airlock2FADeviceLogicalOrPredicateConfig-xxxxxx
displayName:
comment:
properties:
devicePredicates:
Logical OR Role Derivation
requiredRoles
) requiredRiskTags
)
type: com.airlock.iam.authentication.application.configuration.risk.accesspolicy.condition.LogicalOrRoleDerivationCondition
id: LogicalOrRoleDerivationCondition-xxxxxx
displayName:
comment:
properties:
requiredRiskTags:
requiredRoles:
Login From New Device Step
- Looks for a cookie with the configured name.
- Decrypts the cookie with the configured key.
- Uses the cookie to find out if the user already logged in from the current device.
- Triggers an event if it is the first login from that device or the time since the last login exceeds the configured validity.
- Updates the cookie and sets it in the response.
cookieName
) If this name is changed, the Airlock Gateway has to be reconfigured to pass-through and encrypt this cookie.
key
) The key used to encrypt the cookie. Must be 32 Bytes encoded as Base64 String.
One can, for example, generate a random base64 string with 256 bits (32 bytes) using OpenSSL as follows: openssl rand -base64 32
If this value is changed, all previously used devices are forgotten.
validity
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.newdevice.LoginFromNewDeviceStepConfig
id: LoginFromNewDeviceStepConfig-xxxxxx
displayName:
comment:
properties:
cookieName: AL_LoginFromNewDevice
customFailureResponseAttributes:
customResponseAttributes:
key:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
validity: 365d
Login History Consistency User Change Listener
- on user deletion: delete all login history assigned to that user.
- on user name change: update the login history to the new user name.
loginHistoryRepository
)
type: com.airlock.iam.common.application.configuration.loginhistory.LoginHistoryConsistencyUserChangeListener
id: LoginHistoryConsistencyUserChangeListener-xxxxxx
displayName:
comment:
properties:
loginHistoryRepository:
Login History Processor
- authentication flow was unsuccessful or
- the session already has an entry in the login history repository.
type: com.airlock.iam.authentication.application.configuration.processor.LoginHistoryProcessorConfig
id: LoginHistoryProcessorConfig-xxxxxx
displayName:
comment:
properties:
Login Page
type: com.airlock.iam.flow.ui.application.configuration.LoginPageTargetConfig
id: LoginPageTargetConfig-xxxxxx
displayName:
comment:
properties:
Loginapp
authenticationFlows
) selfRegFlows
) publicSelfServiceFlows
) protectedSelfServices
) ui
) userStore
) The user store for the REST API.
Important: A user store is almost always required unless there are only persistency-less authentication flows configured.
securitySettings
) languageSettings
) eventSettings
) maintenanceMessages
) gatewaySettings
) If no settings are configured, extra information from the reverse proxy will not be available and it may be harder to correlate log messages that are written to different log files.
sessionIdleTimeout
) sessionLifetime
) samlSettings
) oAuth2SSOSettings
) oAuth2ASSettings
) Configuration for OAuth 2.0 / OpenID Connect SSO (Airlock IAM as Authorization Server (AS)).
techClientRegistration
) oneShotAuthentication
) rest
) Configures session-less endpoints of the Loginapp REST API. These endpoints require authentication credentials attached to each request, but don't require previous authentication with a flow.
These REST endpoints begin with the resource path /<loginapp-uri>/rest/protected/my/
.
For most of the session-less protected REST APIs, there is a corresponding flow-based API in the protected self-service REST APIs. Whenever possible, prefer the flow-based variant over the session-less configured here.
geolocationProvider
) stateRepository
) Defines where IAM stores all state. As long as only one instance of IAM is running (no horizontal scaling), the in-memory repository can be used.
If session context retention is used, this plugin may only be configured in the default context.
contextExtractor
) Specifies how a context is to be extracted from a request.
Depending on what context retention policy is configured, this value might then retained e.g. for the duration of the request, or the duration of the session. Additionally, depending on what retention policy is used, this extractor might be evaluated e.g. for each request, or once per session.
contextRetentionPolicy
) Specifies how contexts are retained.
This property defines when the context extractor is evaluated, and how long the resulting value is retained. Depending on the retention policy, the context extractor may be e.g. evaluated once per request, or once per session.
crontoAppCommunication
) Cronto Handler to handle direct communication from the Cronto apps. This handler is used by the technical Cronto servlets that handle requests to approve push or online validation messages, return the transaction list or handle push notificiation ID registration.
This Cronto Handler is only used if push or online validation are active.
customExtensions
) readinessHealthCheckEndpoint
) logUserTrailToDatabase
) Configures the database settings to use when persisting user trail log entries.
If this value is defined, then all user trail log messages generated by the Loginapp module will additionally be forwarded to the database configured within the referenced repository plugin.
All forwarded log entries are stored inside the table "USER_TRAIL_LOG". Note that setting this value does not disable writing log messages to the Loginapp log file.
correlationIdSettings
) Defines settings for correlation ID transfer and logging inside the Loginapp module.
If undefined, no correlation ID will be logged for this module.
deviceUsageRepositoryConfig
) jwksSettings
) Enables a JWKS endpoint for all keys used in Loginapp, if configured.
The JWKS endpoint URL is /<loginapp-uri>/rest/public/jwks/
type: com.airlock.iam.login.app.misc.configuration.Loginapp
id: Loginapp-xxxxxx
displayName:
comment:
properties:
authenticationFlows:
contextExtractor:
contextRetentionPolicy:
correlationIdSettings:
crontoAppCommunication:
customExtensions:
deviceUsageRepositoryConfig:
eventSettings:
gatewaySettings:
geolocationProvider:
jwksSettings:
languageSettings:
logUserTrailToDatabase:
maintenanceMessages:
oAuth2ASSettings:
oAuth2SSOSettings:
oneShotAuthentication:
protectedSelfServices:
publicSelfServiceFlows:
readinessHealthCheckEndpoint:
rest:
samlSettings:
securitySettings:
selfRegFlows:
sessionIdleTimeout: 30m
sessionLifetime: 8h
stateRepository:
techClientRegistration:
ui:
userStore:
Loginapp Event Settings
eventSubscribers
)
type: com.airlock.iam.login.application.configuration.event.LoginappEventSettingsConfig
id: LoginappEventSettingsConfig-xxxxxx
displayName:
comment:
properties:
eventSubscribers:
Loginapp JWKS
cacheControlResponseHeader
)
type: com.airlock.iam.login.app.misc.configuration.JwksLoginappConfig
id: JwksLoginappConfig-xxxxxx
displayName:
comment:
properties:
cacheControlResponseHeader:
Loginapp UI Content Security Policy
contentSecurityPolicy
) This property can be used to define a custom policy.
The default policy requires to insert a nonce into script tags. Script tags that do not include a nonce will be blocked.
The placeholder '${cspNonce}' in the policy will be replaced with a fresh, randomly generated nonce for each request. The same nonce must be present in all policy relevant tags that were generated by a specific request.
Known use cases requiring CSP customization
- IAM is embedded in an (i)frame: frame-ancestors directive must be relaxed.
Security Warning: The default CSP was designed to offer a good level of security and maintainability. The CSP is validated to work with IAM (see limitations above). Defining a custom CSP may reduce the level of security and may lead to browsers blocking IAM pages. Therefore, the security benefits of a custom policy must be evaluated carefully and IAM must be tested to work with the policy.
type: com.airlock.iam.login.rest.application.configuration.LoginappUiContentSecurityPolicyConfig
id: LoginappUiContentSecurityPolicyConfig-xxxxxx
displayName:
comment:
properties:
contentSecurityPolicy: default-src 'self'; object-src 'none'; script-src ${cspNonce} 'strict-dynamic' 'self'; img-src 'self' data: https://api.futurae.com; connect-src 'self' https://api.futurae.com wss://api.futurae.com; base-uri 'self'; frame-ancestors 'none';
Loginapp UI SSO Ticket Extractor
stringTransformers
) urlDecodeValue
) URL-decoding is applied before the 'String Transformers' run.
type: com.airlock.iam.authentication.application.configuration.sso.LoginappUiSsoTicketExtractorConfig
id: LoginappUiSsoTicketExtractorConfig-xxxxxx
displayName:
comment:
properties:
stringTransformers:
urlDecodeValue: true
Lookup and Accept Authenticator
UserCredential
(or subtypes) and responds with "authentication successful" if a corresponding user was found and is valid. The authentee object returned in the response contains the user's roles and context-data retrieved from the persistency layer. This authenticator is stateless (i.e. does not support multiple authentication steps), therefore the use of a session is not expected.An example usage of this plugin is setting it up as the first authenticator of the The plugin writes the canonical class name description of this plugin to the context data container. The class name is stored under the key authPluginClassName
. A short description of this authentication method is stored under the key authMethodShortDesc
. This information may be used by callers.
userPersister
) doNotUpdateUserStatistics
) TRUE
, then this authenticator will not update the number of failed logins and the login dates on the persistency layer. This makes it suitable for use as a part in a bigger authentication scheme (e.g. as first part with the MetaAuthenticator)
type: com.airlock.iam.core.misc.impl.authen.LookupAndAcceptAuthenticator
id: LookupAndAcceptAuthenticator-xxxxxx
displayName:
comment:
properties:
doNotUpdateUserStatistics: true
userPersister:
Lowercase Data Transformer
properties
) Use the asterisk character ("*") to replace all properties.
type: com.airlock.iam.core.misc.util.datatransformer.LowercaseDataTransformer
id: LowercaseDataTransformer-xxxxxx
displayName:
comment:
properties:
properties:
Lowercase String Transformer
type: com.airlock.iam.common.application.configuration.transform.LowercaseStringTransformerConfig
id: LowercaseStringTransformerConfig-xxxxxx
displayName:
comment:
properties:
Lowercase Transformation
type: com.airlock.iam.common.application.configuration.location.transform.LowercaseStringTransformerConfig
id: LowercaseStringTransformerConfig-xxxxxx
displayName:
comment:
properties:
Lowercase Transformer
type: com.airlock.iam.core.misc.impl.authen.LowercaseTransformer
id: LowercaseTransformer-xxxxxx
displayName:
comment:
properties:
Mail Notificator
smtpHost
) smtpPort
) smtpUser
) smtpPassword
) fromAddress
) toAddresses
) mailSubject
) mailTemplate
) The mail template may contain references enclosed in <%...%>
. A corresponding get-method call (bean-like) is performed on the event object and the return value of the method call is used to replace the reference.
Example: let the mail template contain the following excerpt.
Dear Mrs. <%lastName%>
You are subject to our ...
The method getLastName()
is invoked on the event object handled and the return value of the method replaces the <%lastName%>
in the mail.
mailTemplateEncoding
) This configuration property is optional. If the property is not set, the default file encoding (as returned by System.getProperty("file.encoding")
is used.
type: com.airlock.iam.core.misc.impl.notification.MailNotificator
id: MailNotificator-xxxxxx
displayName:
comment:
properties:
fromAddress:
mailSubject:
mailTemplate:
mailTemplateEncoding: UTF-8
smtpHost:
smtpPassword:
smtpPort: 25
smtpUser:
toAddresses:
Main Authentication Settings
airlock2FASettings
) fidoSettings
) mtanSettings
) crontoSignSettings
) oathOtpSettings
)
type: com.airlock.iam.core.misc.plugin.config.GlobalAuthenticationSettings
id: GlobalAuthenticationSettings-xxxxxx
displayName:
comment:
properties:
airlock2FASettings:
crontoSignSettings:
fidoSettings:
mtanSettings:
oathOtpSettings:
Main Authenticator
This is used for simple username/password authentication or for combining a password authenticator with a second authentication step (e.g. mTAN, Cronto, OTP, matrix card, mobile app token, etc.).
first
) second
) userPersister
) The user persister used to update latest-login dates and number of failed logins (and some other fields if present).
This assumes that the first and the second authentication steps do not update the information.
The persister is also used to check whether the user is locked or a password change is enforced. The persister does not load any roles; this must be performed by the enclosed authenticators.
enableStealthMode
) Enables the "Stealth Mode": if enabled and the overall authentication process fails, the authentication process does not give away information about whether the first or the second factor was wrong.
This mode increases security by preventing attacks on passwords (since not even a small number of potential passwords can be tested for a given user) and prevents user enumeration under certain conditions (i.e. when the simulation of the second factor cannot be distinguished from the real authentication).
However, note that legitimate users get less information about what went wrong during the authentication process, which could lead to increased help desk demand.
Not all authenticaton steps support this mode.
maxFailedLogins
) displayLastLoginTimestamp
) useUsernameFromUserPersister
) additionalUserValidators
)
type: com.airlock.iam.core.misc.impl.authen.MainAuthenticator
id: MainAuthenticator-xxxxxx
displayName:
comment:
properties:
additionalUserValidators:
displayLastLoginTimestamp: false
enableStealthMode: false
first:
maxFailedLogins: 5
second:
useUsernameFromUserPersister: true
userPersister:
Main Settings
authenticationSettings
) passwordSettings
) dataSources
) - User data
- Token data
Note that data sources for some tokens are configured directly in the corresponding token-specific settings.
stateRepository
) correlationIdSettings
)
type: com.airlock.iam.core.misc.plugin.config.GlobalConfiguration
id: GlobalConfiguration-xxxxxx
displayName:
comment:
properties:
authenticationSettings:
correlationIdSettings:
dataSources:
passwordSettings:
stateRepository:
Maintenance Message Configuration
enableMenuItem
) messagesPerPage
) persister
) languages
) Use the ISO-2-letter language code.
locations
) Multiple locations on the login page can be defined for separate maintenance messages.
The here configured locations are selectable in the maintenance message editor in the Adminapp.
type: com.airlock.iam.admin.application.configuration.maintenancemessages.MaintenanceMessageConfiguration
id: MaintenanceMessageConfiguration-xxxxxx
displayName:
comment:
properties:
enableMenuItem: true
languages:
locations:
messagesPerPage: 50
persister:
Maintenance Message Settings
messageService
) locations
) This property specifies all available locations used to display / retrieve maintenance messages. When defined, these identifiers are used to retrieve the messages for the corresponding locations from the session bean. If this property is left empty, the default location (null) is used.
Note: In order to manage the maintenance messages in the Adminapp, make sure to configure the same locations in the Adminapp's maintenance message settings.
type: com.airlock.iam.login.misc.plugin.MaintenanceMessageConfig
id: MaintenanceMessageConfig-xxxxxx
displayName:
comment:
properties:
locations:
messageService:
Maintenance Message UI Settings
locationFilters
) firstPageOnly
)
type: com.airlock.iam.flow.api.application.configuration.MaintenanceMessageUiSettings
id: MaintenanceMessageUiSettings-xxxxxx
displayName:
comment:
properties:
firstPageOnly: true
locationFilters:
Mandatory HTTP Signature Header
httpSignatureHeader
) condition
)
type: com.airlock.iam.login.app.misc.oneshot.impl.MandatoryHttpSignatureHeadersConfig
id: MandatoryHttpSignatureHeadersConfig-xxxxxx
displayName:
comment:
properties:
condition:
httpSignatureHeader:
Mandatory Password Change Red Flag
name
)
type: com.airlock.iam.authentication.application.configuration.password.MandatoryPasswordChangeRedFlagConfig
id: MandatoryPasswordChangeRedFlagConfig-xxxxxx
displayName:
comment:
properties:
name: MANDATORY_PASSWORD_CHANGE
Mandatory Password Change Step Config
An authentication flow step that forces the user to change the password if the corresponding "red flag" has been raised by a previous step (e.g. during password check).
Note: If the step is configured such that the old password does not have to be entered (defined by separate password change configuration), do not forget to configure the "Password Attribute Key" in both the password authentication step(s) and in this step.
passwordRepository
) passwordPolicy
) oldPasswordAttempts
) oldPasswordRequired
) redFlag
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
passwordAttributeKey
) The optional key under which the new password is made available in the identity propagation or from which it should be retrieved if the old password is not required in the request.
The value can also be retrieved from the session using the "User Passwords Map" value map provider.
If no key is configured, the new password can not be used by identity propagators and the new password must always be provided with the request.
Important: Multiple Mandatory Password Change steps or Password Authentication steps which have the same value for this property might override each others passwords.
Note: This feature will not work when end-to-end encryption is used.
interactiveGotoTargets
) dynamicStepActivations
) preCondition
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.password.MandatoryPasswordChangeStepConfig
id: MandatoryPasswordChangeStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: PASSWORD
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
oldPasswordAttempts:
oldPasswordRequired: true
onFailureGotos:
passwordAttributeKey:
passwordPolicy:
passwordRepository:
preCondition:
redFlag:
stepId:
tagsOnSuccess:
Mapped Context Data Field
name
) Note that an entry named 'myName' will be nested in a map called 'contextData' and thus mapped to an external interface as data.attributes.contextData.myName
.
dataType
) accessType
)
type: com.airlock.iam.admin.application.configuration.generic.MappedContextDataField
id: MappedContextDataField-xxxxxx
displayName:
comment:
properties:
accessType: READ_WRITE
dataType: STRING
name:
Mapped Ticket Element
transformationMap
) For every ticket element value, a look-up into the map is performed. The value of the first matching entry replaces the original ticket element value. If no matching entry is found, the resulting ticket element value is determined by the configured 'No Match Behavior' which returns the original value by default.
noMatchBehavior
) ticketKey
) Note that for the special valueRef @all-context-data
, the value of this property is ignored because the keys of the context data entries are used.
valueRef
) Some keys have special meanings to add the username, the roles or all additional values.
mandatory
) - @username: only non empty usernames are allowed
- @roles: at least one role must is assigned
- context data key: the corresponding context data must exist and all values of the key must be non-empty
- @all-context-data: the values of all context data must be non-empty
- @all-additional-values: all additional data must have at least one value and all values must be non-empty
- additional value key : the selected additional data must exist, have at least one value and all values must be non-empty
type: com.airlock.iam.core.misc.util.ticket.service.MappedTicketElement
id: MappedTicketElement-xxxxxx
displayName:
comment:
properties:
mandatory: false
noMatchBehavior: ORIGINAL_VALUE
ticketKey:
transformationMap:
valueRef:
Mapping Ticket Service
The pieces of information to be encoded in an authentication ticket are selected from the authentee name, roles, context data as well as the additional key-value-pairs passed to the plugin.
All pieces of data selected to be stored in the ticket can be stored under a configurable name. This plugin is thus suitable for using different user ids for different receiving applications.
constantContent
) Note that values selected here can be overwritten by content or additional content (see other configuration properties) using the same ticket key.
content
) The values are interpreted as follows:
- The value
@username
refers to the authentee's name. - The value
@roles
refers to the authentee's roles. - The value
@all-context-data
refers to all context data of the authentee. If used, all context data entries are stored in the ticket using their own keys. TheticketKey
(see other property description) is ignored for this value. Even if this special value is used, selected context data container entries can still be selected by their name (see item below). - All other values are used to reference a value in the context data container of the authentee.
Note that values selected here can be overwritten by additional values (see other configuration property) using the same ticket key.
additionalContent
) The values are interpreted as follows:
- The value
@all-additional-values
refers to all additional key-value-pairs provided to this plugin. If used, these values are stored in the ticket using their own keys. TheticketKey
(see other property description of list elements) is ignored for this value. Even if this special value is used, selected additional values can still be selected by their name (see item below). - All other values are used to reference single additional value in the list of additional key-value-pairs.
Note that values selected here can overwrite values from the context data container of the authentee (see other configuration property) using the same ticket key.
Values available for identity propagation: The following values are available for identity propagation, if the corresponding feature is licensed and configured.
Values available in REST login identity propagation, when using the 'REST Identity Propagation' plugin:
- AUTH_TIMESTAMP: the time of authentication
- AUTH_TOKEN_ID: the auth token id as used for transaction approval
- REPRESENTER_ID: the representer's ID, as used for user representation
- AUTH_TIMESTAMP: the time of authentication
- AUTH_TOKEN_ID: the auth token id as used for transaction approval
- AUTH_PLUGIN: the authentication plugin identifier
- LANG: the user's language as used in the login forms
- GSID: the global session identifier
- CLIENT_IP: the client's IP address
- GEOLOCATION_CITY: the geolocation city
- GEOLOCATION_CONTINENT_CODE: the geolocation continent code
- GEOLOCATION_COUNTRY_CODE: the geolocation country code
- GEOLOCATION_LATITUDE: the geolocation latitude
- GEOLOCATION_LONGITUDE: the geolocation longitude
- GEOLOCATION_SUBDIVISION_CODE: the geolocation subdivision code
- GEOLOCATION_TIMEZONE: the geolocation timezone
- GEOLOCATION_ZIP: the geolocation zip
- REPRESENTER_ID: the representer's ID, as used for user representation
- OPENID_CONNECT_ID_TOKEN: the OpenID Connect ID Token that may have been used for the authentication.
- OAUTH2_ACCESS_TOKEN: the OAuth 2.0 or OpenID Connect Access Token that may have been used for the authentication.
validityMillis
)
type: com.airlock.iam.core.misc.util.ticket.service.MappingTicketService
id: MappingTicketService-xxxxxx
displayName:
comment:
properties:
additionalContent:
constantContent:
content:
validityMillis: 28800000
Mask Token
Be aware that logging token information is detrimental to security.
numberOfLeadingCharacters
) numberOfTrailingCharacters
)
type: com.airlock.iam.oauth2.application.configuration.logging.MaskTokenLogStrategy
id: MaskTokenLogStrategy-xxxxxx
displayName:
comment:
properties:
numberOfLeadingCharacters:
numberOfTrailingCharacters:
Masking Settings
visibleStart
) Note that if the length of the string is shorter or equal to the number of visible characters at the start and end, the string is not masked.
visibleEnd
) Note that if the length of the string is shorter or equal to the number of visible characters at the start and end, the string is not masked.
maskingCharacter
)
type: com.airlock.iam.common.application.configuration.masking.StringMaskingConfig
id: StringMaskingConfig-xxxxxx
displayName:
comment:
properties:
maskingCharacter: *
visibleEnd: 5
visibleStart: 3
Matching Username
Condition that is fulfilled if the username matches the configured regex.
This condition uses the transformed "tentative" username, which is available as soon as the provided username is resolved. This means that it can be used inside, but not before, a user identifying step.
If no user has been identified yet, the condition is not fulfilled.
pattern
) caseSensitive
)
type: com.airlock.iam.flow.shared.application.configuration.condition.UsernameMatchingConditionConfig
id: UsernameMatchingConditionConfig-xxxxxx
displayName:
comment:
properties:
caseSensitive: true
pattern:
Matrix Authentication Step
tanService
) tanListType
) - Indexed TAN list: A token list with an index next to each token. The tokens are queried in random order.
- Matrix card: A matrix card with the tokens organized in rows and columns. The tokens are queried in random order.
tokenListRenderer
) This property is only required if "TAN List Type" is set to Matrix card.
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
startIndex
) If the "TAN List Type" is not "Indexed TAN list", this property is ignored.
responseValidityMillis
) If not set, this feature is disabled, i.e. challenges never expire (this is the default).
maxRetries
) The number of times a wrong response can be sent before the flow is aborted. If set to zero (the default), only one attempt is possible.
The purpose of this settings is usability. The failed attempts counter is always increased upon receiving a wrong response and the user is locked when the global failed attempts limit is exceeded.
newChallengeOnRetry
) countUnansweredChallenges
) If enabled, any pending challenge that is abandoned will be counted as an unanswered challenge. After too many unanswered challenges (see the "Max Unanswered Challenges" property), further attempts will always fail. This prevents an attacker from being able to "wait" for a specific challenge that has been leaked.
Important: This feature requires the properties 'Col Challenge Open Since' and 'Col Unanswered Challenges' on the Token List Persister to be configured, otherwise it will not work properly.
unansweredChallengeTimeout
) maxUnansweredChallenges
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.matrix.MatrixAuthStepConfig
id: MatrixAuthStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: MATRIX
countUnansweredChallenges: true
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
maxRetries: 0
maxUnansweredChallenges: 3
newChallengeOnRetry: true
onFailureGotos:
preCondition:
requiresActivation: false
responseValidityMillis:
skipCondition:
startIndex: 1
stepId:
tagsOnSuccess:
tanListType:
tanService:
tokenListRenderer:
unansweredChallengeTimeout: 12
Matrix Card Generator Config
tokenAlphabet
) tokenLength
) tokensPerList
) hashFunction
) IdentityPasswordHash
plugin) results potential security vulnerability in that the token lists may easily be reconstructed from the stored hash values. tokenListRenderer
) deleteOldTokenLists
) If this property is set to TRUE, the plugin must have permission to delete files from the directory.
workingDirectory
) If this property is defined, the token lists are not directly generated into the output directory (see other property) but they are generated into this working directory and are moved to the output directory once they are done.
This helps to solve problems with processes automatically reading the rendered token lists and reading partial token lists during the generation process. Make sure that the working directory and the output directory reside in the same file system (if not the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
outputDirectory
) This property is not required if the renderer plugin (see separate property) does not write on the output stream (e.g. sends it somewhere else). It is required otherwise.
Note: If this property is not defined and the used renderer plugin writes on the output stream, then the result (e.g. a PDF file) is lost.
fileNamePrefix
) Do not use the prefix "pwd-" if password- reports are stored in the same directory. This prefix is the default for password letters (and not configurable in older plugin versions).
This property is optional to be backwards compatible. It is strongly recommended to define a prefix.
fileNameSuffix
)
type: com.airlock.iam.admin.application.configuration.matrixcard.MatrixCardGeneratorConfig
id: MatrixCardGeneratorConfig-xxxxxx
displayName:
comment:
properties:
deleteOldTokenLists: true
fileNamePrefix:
fileNameSuffix:
hashFunction:
outputDirectory:
tokenAlphabet:
tokenLength:
tokenListRenderer:
tokensPerList:
workingDirectory:
Matrix Public Self-Service Approval Step
Note that unlike identity verification steps, approval steps require an existing user and cannot prevent username enumeration (no stealth mode). It is therefore important that approval steps are only used after an identity verification step.
tanService
) tanListType
) - Indexed TAN list: A token list with an index next to each token. The tokens are queried in random order.
- Matrix card: A matrix card with the tokens organized in rows and columns. The tokens are queried in random order.
tokenListRenderer
) This property is only required if "TAN List Type" is set to Matrix card.
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
startIndex
) If the "TAN List Type" is not "Indexed TAN list", this property is ignored.
responseValidityMillis
) If not set, this feature is disabled, i.e. challenges never expire (this is the default).
maxRetries
) The number of times a wrong response can be sent before the flow is aborted. If set to zero (the default), only one attempt is possible.
The purpose of this settings is usability. The failed attempts counter is always increased upon receiving a wrong response and the user is locked when the global failed attempts limit is exceeded.
newChallengeOnRetry
) countUnansweredChallenges
) If enabled, any pending challenge that is abandoned will be counted as an unanswered challenge. After too many unanswered challenges (see the "Max Unanswered Challenges" property), further attempts will always fail. This prevents an attacker from being able to "wait" for a specific challenge that has been leaked.
Important: This feature requires the properties 'Col Challenge Open Since' and 'Col Unanswered Challenges' on the Token List Persister to be configured, otherwise it will not work properly.
unansweredChallengeTimeout
) maxUnansweredChallenges
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.MatrixCardPublicSelfServiceApprovalStepConfig
id: MatrixCardPublicSelfServiceApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: MATRIX
countUnansweredChallenges: true
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
maxRetries: 0
maxUnansweredChallenges: 3
newChallengeOnRetry: true
onFailureGotos:
preCondition:
requiresActivation: false
responseValidityMillis:
skipCondition:
startIndex: 1
stepId:
tagsOnSuccess:
tanListType:
tanService:
tokenListRenderer:
unansweredChallengeTimeout: 12
Matrix Self-Service Approval Step
Be aware that matrix approval does not allow verification of the data via a separate channel. If this additional level of security is required, use Airlock 2FA, Cronto or mTAN approval.
tanService
) tanListType
) - Indexed TAN list: A token list with an index next to each token. The tokens are queried in random order.
- Matrix card: A matrix card with the tokens organized in rows and columns. The tokens are queried in random order.
tokenListRenderer
) This property is only required if "TAN List Type" is set to Matrix card.
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
startIndex
) If the "TAN List Type" is not "Indexed TAN list", this property is ignored.
responseValidityMillis
) If not set, this feature is disabled, i.e. challenges never expire (this is the default).
maxRetries
) The number of times a wrong response can be sent before the flow is aborted. If set to zero (the default), only one attempt is possible.
The purpose of this settings is usability. The failed attempts counter is always increased upon receiving a wrong response and the user is locked when the global failed attempts limit is exceeded.
newChallengeOnRetry
) countUnansweredChallenges
) If enabled, any pending challenge that is abandoned will be counted as an unanswered challenge. After too many unanswered challenges (see the "Max Unanswered Challenges" property), further attempts will always fail. This prevents an attacker from being able to "wait" for a specific challenge that has been leaked.
Important: This feature requires the properties 'Col Challenge Open Since' and 'Col Unanswered Challenges' on the Token List Persister to be configured, otherwise it will not work properly.
unansweredChallengeTimeout
) maxUnansweredChallenges
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.MatrixCardSelfServiceApprovalStepConfig
id: MatrixCardSelfServiceApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: MATRIX
countUnansweredChallenges: true
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
maxRetries: 0
maxUnansweredChallenges: 3
newChallengeOnRetry: true
onFailureGotos:
preCondition:
requiresActivation: false
responseValidityMillis:
skipCondition:
startIndex: 1
stepId:
tagsOnSuccess:
tanListType:
tanService:
tokenListRenderer:
unansweredChallengeTimeout: 12
Matrix Token Controller
identifier
) Make sure the identifier is unique among all configured credential controllers.
The identifier is also used as key to translate the display name of this credential controller. The key is assembled as follows: edituserpage.cred.XYZ.title
(where XYZ is the identifier).
autoOrder
) autoOrderForNewUsers
) mayBeSelectedAsAuthMethod
) mayBeSelectedAsNextAuthMethod
) tokenListPersister
) validityDays
) Make sure to use the same value here as in other Airlock IAM components.
If this property is not defined, no token list expiry date is displayed.
matrixCardGenerator
)
type: com.airlock.iam.admin.application.configuration.matrixcard.MatrixTokenController
id: MatrixTokenController-xxxxxx
displayName:
comment:
properties:
autoOrder: false
autoOrderForNewUsers: false
identifier: MATRIX
matrixCardGenerator:
mayBeSelectedAsAuthMethod: true
mayBeSelectedAsNextAuthMethod: true
tokenListPersister:
validityDays:
Matrixcard Authenticator (TAN Challenge)
This authenticator always authenticates in two steps:
In the first call a
In the second step, the answer to the challenge is expected: The credential instance must be of type
This authenticator takes its authentication decisions by calling the configured tan service.
The plugin writes the canonical class name description of this plugin to the context data container. The class name is stored under the key authPluginClassName
. A short description of this authentication method is stored under the key authMethodShortDesc
. This information may be used by callers.
tanService
) tanListType
) - INDEXED_LIST: A token list with an index next to each token. The tokens are queried in random order.
- MATRIX_CARD: A matrix card with the tokens organized in rows and columns. The tokens are queried in random order.
- TOKEN_LIST: (not recommended) A normal token list that is processed from left to right (or top to bottom, depending on used token list renderer). There are no indices on the list.
tokenListRenderer
) This property is only required if TAN List Type is set to MATRIX_CARD.
startIndex
) If the "TAN List Type" is not INDEXED_LIST, this property is ignored.
responseValidityMillis
) The value 0 (zero) disables this feature, i.e. tokens never expire (this is the default).
maxRetries
) newChallengeOnRetry
) countUnansweredChallenges
) If enabled, any pending challenge that is abandoned will be counted as an unanswered challenge. After too many unanswered challenges (see the "Max Unanswered Challenges" property), further attempts will always fail. This prevents an attacker from being able to "wait" for a specific challenge that has been leaked.
Important: This feature requires the fields 'Challenge Open Since' and 'Unanswered Challenges' on the Token List Persister to be configured, otherwise it will not work properly.
unansweredChallengeTimeout
) maxUnansweredChallenges
)
type: com.airlock.iam.core.misc.impl.authen.MatrixcardAuthenticator
id: MatrixcardAuthenticator-xxxxxx
displayName:
comment:
properties:
countUnansweredChallenges: true
maxRetries: 0
maxUnansweredChallenges: 3
newChallengeOnRetry: true
responseValidityMillis: 0
startIndex: 1
tanListType:
tanService:
tokenListRenderer:
unansweredChallengeTimeout: 12
Maximal Length
translationKey
) maxNumberOfCharacters
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.validation.MaxLengthValidationConfig
id: MaxLengthValidationConfig-xxxxxx
displayName:
comment:
properties:
maxNumberOfCharacters:
translationKey:
Maximum Date
maxRelative
) The "maximum relative value" is the upper limit (last possible) for allowed difference in days to the current date. This cannot be used together with "Max Date".
Examples: A value of 1 means that tomorrow is the latest possible date to enter, a value of -365 means that the entered date has to be at least one year in the past. Use this property to configure a minimal required age.
maxDate
) The latest date allowed to be filled in. This cannot be used together with "Maximum Relative" and it must be in ISO 8601 format.
translationKey
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.validation.MaxDateValidationConfig
id: MaxDateValidationConfig-xxxxxx
displayName:
comment:
properties:
maxDate:
maxRelative:
translationKey:
MaxMind Geolocation Provider
dbFileLocation
)
type: com.airlock.iam.login.application.configuration.geolocation.MaxMindGeolocationProviderConfig
id: MaxMindGeolocationProviderConfig-xxxxxx
displayName:
comment:
properties:
dbFileLocation:
MD5 Base64 Password Hash
Returns the base-64 encoded version of MD5(password)
as hash value, i.e. no salt is included. The hash values is 16 bytes long and results in 24 bytes after base-64 encoding.
type: com.airlock.iam.core.misc.util.password.hash.MD5Base64PasswordHash
id: MD5Base64PasswordHash-xxxxxx
displayName:
comment:
properties:
MD5 Hex Password Hash
Returns the HEX-encoded version of MD5(password)
as hash value, i.e. no salt is included. The hash values is 16 bytes long and results in 32 bytes after HEX-encoding.
type: com.airlock.iam.core.misc.util.password.hash.MD5HexPasswordHash
id: MD5HexPasswordHash-xxxxxx
displayName:
comment:
properties:
Meta Authenticator
First, the first authenticator is called. If authentication with the first authenticator succeeds (or only a password change is enforced), the second authenticator is called. The second authenticator can also depend on user data. Therefore a user dependent second authentication step can be achieved.
Example: Username and password verification in the first step and token verification in the second step for user A but challenge-response authentication for user B.
The first authenticator must be one that accepts credentials with a user name (
The second authenticator is then called for the first time with the credential that was passed to the first authenticator in the first step. This is always a credential with a user name.
The overall authentication is considered to be successful if (and only if) the first authentication step succeeds (or a password change is required) and the second authentication step succeeds. The resulting authentee returned with the successful authentication result is a combination of the results from both authenticators. The set of roles contains both roles from the first and the second authenticator. The context data container contains both the data from the first and the second authenticator. If a key in the context data container is used in both the results from the first and the second authenticators, then the value from the second authenticator's result overwrites the one from the first. If the first and the second authenticators provide a different user name in the authentee object, the one from the second authenticator is used.
Be careful when using authenticator plug-ins that automatically adjust user information after successful or failed authentication. If an authenticator, for example, resets the number of failed logins after successful authentication, it will not produce what you want when used as first authenticator. It would reset the number of failed logins even if the second authentication step fails. Most authenticators provided by Airlock IAM allow to turn off automatic used data updates for this purpose. Make sure to configure them accordingly when using them as part of a bigger authentication process with this plug-in.
Typical example application: Check username and password against a directory or database and then check a third credential (token, smart card, matrix card) with a separate, used-dependent authentication mechanism.
For the configured authenticator plugins used in the second step, a channel-prefix can be configured (optionally). If configured, this prefix is prepended to the current channel when loading the plugins. This is useful for example when two authentiators use the same plugin with different configuration sets or if the an authenticator plugin is used multiple times with a different configuration.
If a user persister is configured (this is mandatory if different second authenticator plugins are configured), it is also consulted to check whether the user is locked or if a password change is required after the first authenticator said ok. This is useful if the first authenticator does not support these concepts.
The plugin writes the canonical class name description (including packages) of the authenticator plugin used in the second step into the context data container of the authentication result. The information is written into the context data container as soon as the second authenticator is defined (i.e. after successful authentication with first authenticator). The class name is stored under the key authPluginClassName
A short description of the second authentication method (and only the second one) is stored under the key authMethodShortDesc
. This information may be used by callers.
first
) defaultSecondAuthenticator
) All specified second authenticators must accept a credential with a username only (UserCredential) when called for the first time.
The default authenticator is used when no second authenticators is found for a given authentication method identifier.
secondAuthenticatorsByAuthMethod
) All specified second authenticators must accept a credential with a username only (UserCredential) when called for the first time.
If no authenticator is found for the chosen method identifier the default second authenticator is used.
The key in the map corresponds to the authentication method identifier (e.g. "MTAN" or "EMAIL") which must be chosen identically in all Airlock IAM modules for each authentication method. Example values are:
- PASSWORD
- MATRIX
- MTAN
- OATH_OTP
- CERTIFICATE
- EMAILOTP
- SECURID
- SECOVID
secondAuthenticatorSelector
) second
is always used. userPersister
) The user persister used to update latest-login dates and number of failed logins (and some other fields if present).
This assumes that the first and the second authenticators do not update the information.
The persister is also used to the authentication method from the user to select the second authenticator plugin and to check whether the user is locked or a password change is enforced according to the persister.
maxFailedLogins
) displayLastLoginTimestamp
) useUsernameFromUserPersister
) additionalUserValidators
)
type: com.airlock.iam.core.misc.impl.authen.MetaAuthenticator
id: MetaAuthenticator-xxxxxx
displayName:
comment:
properties:
additionalUserValidators:
defaultSecondAuthenticator:
displayLastLoginTimestamp: false
first:
maxFailedLogins: 5
secondAuthenticatorSelector:
secondAuthenticatorsByAuthMethod:
useUsernameFromUserPersister: true
userPersister:
Meta Password Policy
passwordPolicy
)
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyMetaCheck
id: PwdPolicyMetaCheck-xxxxxx
displayName:
comment:
properties:
passwordPolicy:
Migrating State Encryption Config
State encryption intended for migration from one encryption to a different one. Values are always written with the new encryption. If reading with the new encryption fails, decryption with the previous encryption is attempted as a fallback. After the migration period, this plugin should be replaced by the new encryption.
Specifically, this plugin can be used to migrate from unencrypted state to encrypted state. This plugin can not be used to migrate from encrypted state to unencrypted state.
previousEncryption
) newEncryption
) Migrating to unencrypted state is not supported.
type: com.airlock.iam.common.application.configuration.state.MigratingStateEncryptionConfig
id: MigratingStateEncryptionConfig-xxxxxx
displayName:
comment:
properties:
newEncryption:
previousEncryption:
Migration Selection Step
availableOptions
) neverMigratePossible
) If this property is enabled, it is possible for a user to reject the migration if:
- No migration date is set for the user OR
- A migration date is set and the property "Allow 'Never Migrate' Despite Migration Date" is enabled.
neverMigratePossibleWithToDate
) Whether it is possible to "Never Migrate" depends on whether or not a migration date is set and whether the authentication is happening during the "Never Migrate Period" (if set at all).
neverMigratePeriod
) Defines the period before the migration date in which the feature "Never Migrate" is active.
Prerequisites for this property to take effect:- A migration date must be set for the user.
- "Never Migrate Possible" must be enabled.
- "Never Migrate Possible Despite Migration Date" must be enabled.
- At least one available option must define a "Hint Period" greater or equal to this property.
If this property is not set, the feature "Never Migrate" is possible (if enabled) during and after the entire "Hint Period".
The duration must be specified in the format "(d)ays (h)ours (m)inutes (s)econds" e.g. "2d 4h 10m 5s" (any part can be omitted).
customNeverMigrateCondition
) customNeverMigrateSteps
) customSkipMigrationSteps
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.migration.MigrationSelectionStepConfig
id: MigrationSelectionStepConfig-xxxxxx
displayName:
comment:
properties:
availableOptions:
customFailureResponseAttributes:
customNeverMigrateCondition:
customNeverMigrateSteps:
customResponseAttributes:
customSkipMigrationSteps:
dynamicStepActivations:
interactiveGotoTargets:
neverMigratePeriod:
neverMigratePossible: false
neverMigratePossibleWithToDate: false
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
Minimum Date
minRelative
) The "minimum relative value" is the lower limit (earliest possible) for allowed difference in days to the current date.
Examples: A value of 1 means that tomorrow is the earliest possible date to enter, a value of -365 means that the entered date can be at most one year in the past.
minDate
) The earliest date allowed to be filled in. This cannot be used together with "Minimum Relative" and must be in ISO 8601 format.
translationKey
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.validation.MinDateValidationConfig
id: MinDateValidationConfig-xxxxxx
displayName:
comment:
properties:
minDate:
minRelative:
translationKey:
Minimum Length
translationKey
) minNumberOfCharacters
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.validation.MinLengthValidationConfig
id: MinLengthValidationConfig-xxxxxx
displayName:
comment:
properties:
minNumberOfCharacters:
translationKey:
Missing Account Link Step
redFlag
) preCondition
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.oauth2.application.configuration.accountlinking.MissingAccountLinkStepConfig
id: MissingAccountLinkStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
redFlag:
stepId:
tagsOnSuccess:
Most Recently Registered Device Condition
type: com.airlock.iam.airlock2fa.application.configuration.provider.predicate.Airlock2FAMostRecentlyRegisteredDevicePredicateConfig
id: Airlock2FAMostRecentlyRegisteredDevicePredicateConfig-xxxxxx
displayName:
comment:
properties:
MS-OFBA One-Shot Target Application
Note: This target application allows to authenticate HTTP requests based on the original HTTP request sent by the client to Airlock WAF. Therefore, this plugin only works with Airlock Gateway (WAF) Settings being configured.
MS-OFBA Protocol
The MS-OFBA protocol provides a mechanism by which Microsoft Office clients (e.g. Word, Excel, ...) can establish an authenticated session with a server or gateway like Airlock WAF. The three steps for establishing an identity using forms based authentication between a protocol client and a protocol server are as follows:
- Initialization: Prior to opening the document on the remote server, the client sends a so called protocol discovery request, which is a HTTP OPTIONS request allowing the server to determine whether the client is a browser or not, based on the headers sent (see Browser vs. Nonbrowser Clients below). In the case of an nonbrowser client, this target application responds that its authentication method is forms based authentication, by returning a 403 HTTP response including a X-FORMS_BASED_AUTH_REQUIRED header with a URL, pointing to the location to which the client should navigate to authenticate. The response also includes a X-FORMS_BASED_AUTH_RETURN_URL header, which is the location to which the protocol server will redirect the user after a successful authentication.
- Negotiation: Having determined that the protocol server is capable of establishing an identity by using forms based authentication, the protocol client renders the HTML returned from the request to the remote location provided by the server in step 1 (X-FORMS_BASED_AUTH_REQUIRED header). Note that the duration of this step is neither deterministic nor specified by this protocol. The reason is that the client will continue to follow as many redirects and refreshes as necessary to successfully establish the identity, until the server redirects to the return URI provided by the server in step 1 (X-FORMS_BASED_AUTH_RETURN_URL header)
- Finalization: After the protocol server redirects the protocol client to the return URI, the protocol client assumes that the identity has been successfully established and reissues the original request from step 1. Note that the process for actually establishing the user's identity is not specified by this protocol.
Browser vs. Nonbrowser Clients
If the request from the client contains a X-FORMS_BASED_AUTH_ACCEPTED HTTP header or the User-Agent header matches the configured user agent regular expression, the client is considered to be a nonbrowser client. In this case, a forms based authentication required response is returned as described in the Initialization step of the protocol.
In the other case, where the client is considered to be a browser, a HTTP 302 redirect to the configured redirect url is returned. In addition, a location parameter is added to the redirect location, pointing to the initially accessed URL on the WAF. Therefore, the effect of accessing this target application with a browser is the same as if the Authentication Flow on the WAF mapping would have been set to Redirect instead of One-Shot.
urlPattern
) The first pattern (in the list of target applications) that matches the forward URL is used.
The matching is case-insensitive.
The URL pattern is ignored for the default target application.
userAgentPattern
) IAM responds with a Forms Based Authentication Required response, as specified in the plugin description, iff
- The X-FORMS_BASED_AUTH_ACCEPTED header field is present with a value of "t" or "f" (otherwise it is ignored) or
- The request contains a User-Agent HTTP header that matches this regular expression pattern.
redirectUrl
) msofbaAuthUrl
) msofbaSuccessUrl
) msofbaDialogSize
) locationParameterName
)
type: com.airlock.iam.login.app.misc.configuration.oneshot.MsOfbaOneShotTargetApplication
id: MsOfbaOneShotTargetApplication-xxxxxx
displayName:
comment:
properties:
locationParameterName: Location
msofbaAuthUrl:
msofbaDialogSize:
msofbaSuccessUrl:
redirectUrl: /auth/check-login
urlPattern:
userAgentPattern: Microsoft Office(.*)
mTAN Authentication Step
messageProvider
) mtanSettings
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.mtan.MtanAuthStepConfig
id: MtanAuthStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: MTAN
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
messageProvider:
mtanSettings:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
mTAN IAK Token Report Strategy
mtanSettings
) tokenDataProvider
) reportTypeShortDesc
) The text is used in the user trail log written when a report is rendered. Please specify a text like in the examples below, so it suits the structure of the log statement it is used in.
userStore
) reportRenderer
) barcodeGenerator
) Optional barcode generator. If this property is configured, a barcode image and the corresponding barcode content are added to the parameter map accessible by report templates. The following keys are defined:
- BarcodeImage: placeholder for the barcode image.
- BarcodeContent: placeholder for the barcode content.
- BarcodeContentDisplay: placeholder for the barcode content in a human-readable format.
Tracking ID: If the "tracking ID" field is configured in the token data provider the generated barcode content is automatically stored in the token. This is useful for future reference, e.g., for tracking active shipments.
languageAttributeName
) outputDirectory
) This property is not required if the renderer plugin (see separate property) does not write on the outputstream (e.g. sends it somewhere else). It is required otherwise.
Note: If this property is not defined and the used renderer plugin writes on the output stream, then the result (e.g. a PDF file) is lost.
workingDirectory
) If this property is defined, the credential reports are not directly generated into the output directory (see other property) but they are generated into this working directory and are moved to the output directory once they are done.
This helps to solve problems with processes automatically reading the rendered reports and reading partial reports during the generation process. Make sure that the working directory and the output directory reside in the same file system (if not the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
deleteOldReports
) Caution: This feature will delete all reports starting with the prefix configured by property "file-name-prefix" and the user's name. Thus you must make sure, that different report types use different filename prefixes.
fileNamePrefix
) Do not use the prefix "pwd-" or the empty prefix if password- or tokenlist reports are stored in the same directory. The latter is used as default for token lists (matrix card) and the former for password letters.
fileNameSuffix
) aggregateReport
) requiredOrderOptions
) excludingOrderOptions
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.token.MtanIakTokenReportStrategyConfig
id: MtanIakTokenReportStrategyConfig-xxxxxx
displayName:
comment:
properties:
aggregateReport:
barcodeGenerator:
deleteOldReports: false
excludingOrderOptions:
fileNamePrefix:
fileNameSuffix:
languageAttributeName:
mtanSettings:
outputDirectory:
reportRenderer:
reportTypeShortDesc: UNSPECIFIED
requiredOrderOptions:
tokenDataProvider:
userStore:
workingDirectory:
mTAN Label Item Definition
Item to register a label for an mTAN number. The label is saved in the flow session and later persisted together with the (potentially verified) mTAN number. Note that the credential mTAN handler does not support labels.
In protected self-service flows, the dedicated "mTAN Token Edit Step" or "mTAN Token Registration Step" are the preferred way to edit or register mTAN tokens, respectively.
key
) required
) maximumLength
) validators
)
type: com.airlock.iam.flow.shared.application.configuration.item.mtan.MtanLabelItemDefinitionConfig
id: MtanLabelItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
key: mtanLabel
maximumLength: 30
required: false
validators:
mTAN Letter User Event Listener
mtanHandlerForIakOrder
) condition
)
type: com.airlock.iam.common.application.configuration.token.mtan.MtanLetterUserEventListener
id: MtanLetterUserEventListener-xxxxxx
displayName:
comment:
properties:
condition:
mtanHandlerForIakOrder:
mTAN Message Provider
resourceKey
) valueProviders
) maxLength
)
type: com.airlock.iam.flow.shared.application.configuration.message.GenericMtanMessageProviderConfig
id: GenericMtanMessageProviderConfig-xxxxxx
displayName:
comment:
properties:
maxLength: 160
resourceKey:
valueProviders:
mTAN Number Changed
type: com.airlock.iam.selfservice.application.configuration.selection.condition.MtanNumberChangedConditionConfig
id: MtanNumberChangedConditionConfig-xxxxxx
displayName:
comment:
properties:
mTAN Number Deletion Possible
mtanSettings
) allowDeletingLastNumber
)
type: com.airlock.iam.selfservice.application.configuration.selection.condition.MtanNumberDeletionPossibleConditionConfig
id: MtanNumberDeletionPossibleConditionConfig-xxxxxx
displayName:
comment:
properties:
allowDeletingLastNumber: false
mtanSettings:
mTAN Number Item Definition
Item to edit or register an mTAN number. By default, all numbers that can be normalized are accepted, but additional configurable validators can further restrict the number. Once validated, the normalized number is kept in the session to be verified and persisted later in the flow.
In protected self-service flows, the dedicated "mTAN Token Edit Step" or "mTAN Token Registration Step" are the preferred way to edit or register mTAN tokens, respectively.
key
) required
) maximumInputLength
) validatorsOnNormalized
) No validator can be configured for the raw input of the phone number. The input is always required to be normalizable by IAM, otherwise a validation error is returned. Normalization requires the number to start with "0" or the plus sign ("+") followed by digits and separation characters like white-space, dashes and parentheses. Normalized numbers always start with a plus sign, followed by digits only.
mtanSettings
)
type: com.airlock.iam.flow.shared.application.configuration.item.mtan.MtanNumberItemDefinitionConfig
id: MtanNumberItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
key: mtanNumber
maximumInputLength: 30
mtanSettings:
required: true
validatorsOnNormalized:
mTAN Number List
mtanSettings
) accessCondition
) Precondition that must be fulfilled for a user to access the mTAN number list.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.token.MtanNumberListSelfServiceRestConfig
id: MtanNumberListSelfServiceRestConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
mtanSettings:
mTAN Number Management UI
Depending on the configuration, the user interface allows an authenticated user:
- to delete an mTAN number.
- to edit an mTAN phone number.
- to activate a new mTAN number.
The number management interface is accessible at /<loginapp-uri>/ui/app/protected/tokens/mtan after user authentication.
flowToDeleteNumber
) flowToEditNumber
) flowToRegisterNumber
) pageExitTarget
) If configured, an additional button is displayed on the mTAN number management to exit the page. On click, this button redirects the user to the configured target.
To redirect to a target application, redirect to the corresponding "Authentication Flow". If the flow can be skipped due to the obtained tags, the user is directly forwarded to the target application.
type: com.airlock.iam.selfservice.application.configuration.ui.tokens.MtanNumberManagementUiConfig
id: MtanNumberManagementUiConfig-xxxxxx
displayName:
comment:
properties:
flowToDeleteNumber:
flowToEditNumber:
flowToRegisterNumber:
pageExitTarget:
mTAN Number Registration Possible
mtanSettings
)
type: com.airlock.iam.selfservice.application.configuration.selection.condition.MtanRegistrationPossibleConditionConfig
id: MtanRegistrationPossibleConditionConfig-xxxxxx
displayName:
comment:
properties:
mtanSettings:
mTAN OTP Check Settings (based on mTAN Settings)
mtanSettings
) chooseLastNumberAutomatically
)
type: com.airlock.iam.authentication.application.configuration.mtan.ExistingMtanOtpCheckConfig
id: ExistingMtanOtpCheckConfig-xxxxxx
displayName:
comment:
properties:
chooseLastNumberAutomatically: false
mtanSettings:
mTAN OTP Checks Settings
basicSettings
) otpGenerator
) otpCaseSensitive
) maxWrongOtpChecks
) Setting this value to
n
means that the user has n+1
tries in total. This should not be confused with the limit of failed attempts before the user is locked, which is configured globally for each flow type. maxOtpResends
) resendSameOtp
) true
is less secure but helps avoiding erroneous user input when the initial OTP is received before retransmission. otpValidity
) lastTokenAutomaticallySelected
)
type: com.airlock.iam.authentication.application.configuration.mtan.MtanOtpCheckConfig
id: MtanOtpCheckConfig-xxxxxx
displayName:
comment:
properties:
basicSettings:
lastTokenAutomaticallySelected: false
maxOtpResends: 0
maxWrongOtpChecks: 0
otpCaseSensitive: true
otpGenerator:
otpValidity: 300
resendSameOtp: false
mTAN Public Self-Service Approval Step
Note that unlike identity verification steps, approval steps require an existing user and cannot prevent username enumeration (no stealth mode). It is therefore important that approval steps are only used after an identity verification step.
messageProvider
) mtanSettings
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.MtanPublicSelfServiceApprovalStepConfig
id: MtanPublicSelfServiceApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: MTAN
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
messageProvider:
mtanSettings:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
mTAN Registration Number Provider
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.MtanRegistrationNumberProviderConfig
id: MtanRegistrationNumberProviderConfig-xxxxxx
displayName:
comment:
properties:
mTAN Self-Service Approval Step
messageProvider
) mtanSettings
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.MtanSelfServiceApprovalStepConfig
id: MtanSelfServiceApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: MTAN
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
messageProvider:
mtanSettings:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
mTAN Self-Service Settings (based on mTAN Settings, Legacy)
mtanSettings
)
type: com.airlock.iam.login.application.configuration.mtan.MtanSelfServiceConfig
id: MtanSelfServiceConfig-xxxxxx
displayName:
comment:
properties:
mtanSettings:
mTAN Self-Services (Legacy)
mtanSettings
) messageTemplateKey
) $TOKEN$
in the message template is mandatory and is replaced by the token. tokenGenerator
) otpCaseSensitive
) allowPhoneNumberChange
) otpValidity
) phoneNumberValidationRegex
) If configured, the normalized phone number is matched against this regular expression.
type: com.airlock.iam.login.application.configuration.mtan.MtanSelfServicesLegacyConfig
id: MtanSelfServicesLegacyConfig-xxxxxx
displayName:
comment:
properties:
allowPhoneNumberChange: false
messageTemplateKey: sms-authenticator.default-message
mtanSettings:
otpCaseSensitive: true
otpValidity: 300
phoneNumberValidationRegex:
tokenGenerator:
MTAN Token Deleted
type: com.airlock.iam.common.application.configuration.event.MtanTokenDeletedSubscribedEventConfig
id: MtanTokenDeletedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
mTAN Token Edit Step
mtanSettings
) numberEditable
) numberRequired
) validatorsOnNormalized
) No validator can be configured for the raw input of the phone number. The input is always required to be normalizable by IAM, otherwise a validation error is returned. Normalization requires the number to start with "0" or the plus sign ("+") followed by digits and separation characters like white-space, dashes and parentheses. Normalized numbers always start with a plus sign, followed by digits only.
labelEditable
) labelRequired
) labelValidators
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.MtanTokenEditStepConfig
id: MtanTokenEditStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
labelEditable: true
labelRequired: false
labelValidators:
mtanSettings:
numberEditable: true
numberRequired: false
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
validatorsOnNormalized:
mTAN Token Import Handler
mtanSettings
) onlyImportForNewUsers
) normalizePhoneNumbers
) A default country code (see separate property) must be specified if this feature is enabled.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.MtanTokenImportHandler
id: MtanTokenImportHandler-xxxxxx
displayName:
comment:
properties:
mtanSettings:
normalizePhoneNumbers: true
onlyImportForNewUsers: false
mTAN Token Insertion Handler
mtanSettings
)
type: com.airlock.iam.userselfreg.application.configuration.step.MtanInsertionHandlerConfig
id: MtanInsertionHandlerConfig-xxxxxx
displayName:
comment:
properties:
mtanSettings:
mTAN Token Management UI Redirect
type: com.airlock.iam.selfservice.application.configuration.ui.tokens.MtanNumberManagementFlowRedirectTargetConfig
id: MtanNumberManagementFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
MTAN Token Phone Number Changed
type: com.airlock.iam.common.application.configuration.event.MtanTokenPhoneNumberChangedSubscribedEventConfig
id: MtanTokenPhoneNumberChangedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
MTAN Token Registered
type: com.airlock.iam.common.application.configuration.event.MtanTokenRegisteredSubscribedEventConfig
id: MtanTokenRegisteredSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
mTAN Token Registration Step
mtanSettings
) validatorsOnNormalized
) No validator can be configured for the raw input of the phone number. The input is always required to be normalizable by IAM, otherwise a validation error is returned. Normalization requires the number to start with "0" or the plus sign ("+") followed by digits and separation characters like white-space, dashes and parentheses. Normalized numbers always start with a plus sign, followed by digits only.
labelEditable
) labelRequired
) labelValidators
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.step.mtan.MtanTokenRegistrationStepConfig
id: MtanTokenRegistrationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
labelEditable: true
labelRequired: false
labelValidators:
mtanSettings:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
validatorsOnNormalized:
mTAN Transaction Approval Step
messageProvider
) mtanSettings
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.transactionapproval.application.configuration.mtan.MtanTransactionApprovalStepConfig
id: MtanTransactionApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: MTAN
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
messageProvider:
mtanSettings:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
mTAN Verification Step
mtanSettings
) iakVerificationRequired
) If enabled, IAK verification is required. Make sure that the configured mTAN Handler also supports IAK verification.
Typically, this is not needed if the step is configured in a migration subflow, but it is essential for security reasons if the step is used during authentication for new users that have not yet registered an mTAN number.
phoneNumberProvider
) messageProvider
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.step.MtanVerificationStepConfig
id: MtanVerificationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: MTAN
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
iakVerificationRequired: true
interactiveGotoTargets:
messageProvider:
mtanSettings:
onFailureGotos:
phoneNumberProvider:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
mTAN was used for login (Transaction Approval only)
selectableIfNoAuthTokenIdPresent
)
type: com.airlock.iam.transactionapproval.application.configuration.selection.MtanAuthTokenIdSelectionConditionConfig
id: MtanAuthTokenIdSelectionConditionConfig-xxxxxx
displayName:
comment:
properties:
selectableIfNoAuthTokenIdPresent: true
MTAN/SMS Authenticator
mtanSettings
) chooseLastNumberAutomatically
) sendSmsInStealthMode
) Send SMS messages in stealth mode for existing users even if first factor was wrong and the user is not locked. The number of sent SMS per user is limited to the maximum allowed first factor attempts (see Main Authenticator).
messageTemplate
) Message template used to create the message text sent to the user. Use Shift-Return to insert line breaks.
This template is only used, if no language-specific template is configured in the mTAN Settings.
Special Variables:
- The string
$TOKEN$
in the message template is mandatory and is replaced by the token. ${Now,...}
contains the current timestamp and can be used for both date and time display in the SMS. Since this represents aDate
object, it can be formatted directly using MessageFormat, for example${Now,date,short}
displays a short date using the user's locale, e.g.09.01.12
. A specific date format can be specified in aSimpleDateFormat
compatible form, e.g.${Now,date,dd.MM.yyyy HH:mm.ss}
resulting in09.01.2012 17:32.19
.
stringResourcesFile
) Specifies the prefix of the file(s) containing the language dependent string resources. Example: If the value of this property is strings
, the language dependent files must be strings_de.properties
, strings_en.properties
, etc.
defaultLanguage
) Default language to be used for login message if the display language could not be determined. This is only used for translating the language-specific message template.
type: com.airlock.iam.core.misc.impl.authen.mtan.SmsAuthenticator
id: SmsAuthenticator-xxxxxx
displayName:
comment:
properties:
chooseLastNumberAutomatically: false
defaultLanguage: de
messageTemplate: $TOKEN$
mtanSettings:
sendSmsInStealthMode: false
stringResourcesFile: strings
MTAN/SMS Settings
Settings related to mTAN/SMS (authentication, self-registration, administration, etc.). These settings are used by various components in Airlock IAM.
Loginapp flows typically have step-specific mTAN settings and only refer to these global settings if plugins with "(based on mTAN Settings)" in the name are used.
mtanHandler
) An mTAN handler retrieves, creates and updates MTAN number tokens.
- in the mTAN/SMS Authenticator
- in the Adminapp
- in Service Container tasks
- in flow steps if the settings "based on mTAN Settings" are used
- for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
smsGateway
) The SMS gateway used to send messages.
This property is used for the following:
- in the mTAN/SMS Authenticator
- in the Adminapp
- in flow steps if the settings "based on mTAN Settings" are used
- for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
originatorName
) The originator that is displayed for the SMS messages (instead of the phone number).
There may be restrictions on the originator imposed by the SMS gateway service and by local law.
The format of the originator must be one of:
- Numeric characters only, optionally prefixed with a plus sign '+', at most 16 characters
- Alphanumeric characters, at most 11 characters
This property is used for the following:
- in the mTAN/SMS Authenticator
- in the Adminapp
- in flow steps if the settings "based on mTAN Settings" are used
- for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
useFlashMessages
) If enabled, SMS messages are sent as 'flash SMS' by default. A flash message is shown directly on the mobile phone display.
Note: If the per-user setting is set, it takes precedence as long as a value is set for a user. If it is empty or not set, this default value is used.
Note: This has to be supported by the SMS gateway. Some recipients might have not be able to receive flash messages.
This property is used for the following:
- in the mTAN/SMS Authenticator
- in the Adminapp
- in flow steps if the settings "based on mTAN Settings" are used
- for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
defaultCountryCode
) Default country code to be used if a phone number does not contain a country code.
This property is used for the following:
- in the mTAN/SMS Authenticator
- in the Adminapp
- in flow steps if the settings "based on mTAN Settings" are used
- for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
otpGenerator
) The string generator plugin to generate the OTP token.
This property is used for the following:
- in the mTAN/SMS Authenticator
- in the Adminapp
- in flow steps if the settings "based on mTAN Settings" are used
- for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
visiblePhoneNumberDigits
) Defines the number of phone number digits that are displayed to the user or the administrator.
If the value is zero, all digits are masked, if it is large enough (e.g. 100), all digits are visible. Example: if set to 3, logged number looks like ********965.
This property is used for the following:
- in the mTAN/SMS Authenticator
- in the Adminapp
- in flow steps if the settings "based on mTAN Settings" are used
- for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
messageTemplateKey
) The message template can be defined in the string resource files, to enable language-specific messages to be sent to the user.
This property is only used in the mTAN/SMS Authenticator and for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
ignoreTokenCase
) If enabled the case of characters is ignored when checking OTP tokens.
This property is used for the following:
- in the mTAN/SMS Authenticator
- in flow steps if the settings "based on mTAN Settings" are used
- for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
maxTokenRetransmissions
) Maximum number of times an OTP token may be requested to be retransmitted during one authentication process. The authentication is aborted if this limit is exceeded. Token retransmissions are disabled if this value is 0. Restricting this value to a small number prevents the abusive use of SMS delivery.
This property is only used in the mTAN/SMS Authenticator and the mTAN Authentication Step if the settings "based on mTAN Settings" are used.
retransmitSameToken
) If token retransmissions are enabled this sets whether the OTP token should be retransmitted or whether a new OTP should be generated for each retransmission.Setting this property totrue
is less secure but helps avoiding erroneous user input when the initial OTP is received before retransmission.
This property is only used in the mTAN/SMS Authenticator and the mTAN Authentication Step if the settings "based on mTAN Settings" are used.
otpValidity
) Determines how long the OTP is valid (in seconds).
This property is only used in the mTAN/SMS Authenticator and for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
maxTokenRetries
) The number of times a user may retry after a wrong token is entered before the authentication process is aborted.
If set to zero (the default), only one attempt is possible for each token. This is more secure but may increase costs (if sending a token is costly) and negatively affects usability. Setting this value to n
means that the user has n+1
tries in total.
This property is only used in the mTAN/SMS Authenticator and the mTAN Authentication Step if the settings "based on mTAN Settings" are used.
allowPhoneNumberChange
) If enabled, the user may change an already registered mobile phone number by starting the registration process for mobile phone numbers. If disabled (the default), changing an already registered number is not possible.
This property is only used for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
phoneNumberValidationRegex
) If enabled the phone number entered by the user is matched against this regular expression. This regex match takes place after (optional) normalization. Using with normalization allows to check for simpler rules, because it means that the number is already transformed into the international form without spaces, e.g. "+41761234567".
E.g. to only allow Swiss numbers, set the default Country Code to 41, and validate the resulting number with \+41(\d){9,9}
This property is only used for the /protected/my/tokens/mtan/ REST endpoints if the settings "based on mTAN Settings" are used.
mayBeSelectedAsAuthMethod
) mayBeSelectedAsNextAuthMethod
) adminMayEditPhoneNumber
) notifyNewNumber
) notificationSmsTemplate
) Message template for the notification SMS. Defining this property enables the "Send Test SMS" button on the mTAN detail view on the user page. If the property "Notify New Number" is enabled, it is also used for the SMS that is sent to a new or changed phone number.
If the template contains the "$TOKEN$"-variable, it is replaced by a randomly generated OTP that can be verified by the administrator.
type: com.airlock.iam.core.misc.impl.authen.mtan.MtanSettings
id: MtanSettings-xxxxxx
displayName:
comment:
properties:
adminMayEditPhoneNumber: false
allowPhoneNumberChange: false
defaultCountryCode: 41
ignoreTokenCase: false
maxTokenRetransmissions: 0
maxTokenRetries: 0
mayBeSelectedAsAuthMethod: true
mayBeSelectedAsNextAuthMethod: true
messageTemplateKey:
mtanHandler:
notificationSmsTemplate:
notifyNewNumber: false
originatorName:
otpGenerator:
otpValidity: 300
phoneNumberValidationRegex:
retransmitSameToken: false
smsGateway:
useFlashMessages: false
visiblePhoneNumberDigits: 100
mTAN/SMS Token Controller
- Send OTP code to user's phone (e.g. to authenticate user calling help desk or to verify the number entered manually).
- When changing the phone number, a notification about this can be sent to the old phone number.
- A notification about the registration of a phone number may be sent to the corresponding number.
- Part (or all of) the configured phone numbers may be masked, so the administrator does not see entire numbers.
mtanSettings
) notifyOldNumber
) notifyOldNumberTemplate
) This property is only relevant if "notifyOldNumber" is true.
secretLetterRenderer
) identifier
) Make sure the identifier is unique among all configured token controllers.
The identifier is also used as key to translate the display name of this token controller. The key is assembled as follows: edituserpage.cred.XYZ.title
(where XYZ is the identifier).
autoOrderCredential
) autoOrderForNewUsers
) showLetterAttributes
) deletePropertiesWithCredential
) Make sure, the underlying persister plugin is configured to persist the specified context data properties.
type: com.airlock.iam.admin.application.configuration.mtan.MtanTokenController
id: MtanTokenController-xxxxxx
displayName:
comment:
properties:
autoOrderCredential: false
autoOrderForNewUsers: false
deletePropertiesWithCredential:
identifier: MTAN
mtanSettings:
notifyOldNumber: false
notifyOldNumberTemplate:
secretLetterRenderer:
showLetterAttributes: false
Multi Password Hash (LDAP-style)
Password hash plugin that uses existing plugins to generate and verify hash values in an LDAP styled format.
Note: This hash function is not compatible with hashes generated by an LDAP server, it only uses a similar format. For LDAP compatibility, use the LDAP Password Hash.
The syntax is{hash-func}hash-value
, where hash-func
is the hash function identifier and hash-value
is the base64-encoded hash value (except for CLEARTEXT
, there the hash is not base64-encoded). Currently supported hash functions are:- SSHA: Salted SHA-1
- SSHA256: Salted SHA-256
- CLEARTEXT: Identity function (results in clear text passwords)
Security Warning: The use of this plugin is discouraged due to security reasons. Consider using Scrypt Password Hash instead (within a PasswordHashConfiguration for Encoded Hash Values).
hashFunction
)
type: com.airlock.iam.core.misc.util.password.hash.MultiPasswordHash
id: MultiPasswordHash-xxxxxx
displayName:
comment:
properties:
hashFunction:
NAS-based Target Service
The target service is meant to be used if a NAS identifier, sent by a RADIUS client, matches the one in the configuration.
nasIdentifierPattern
) matchCaseSensitive
) requiredRoles
) The user needs one of the roles in order to get access to the target service.
If no roles are configured, all authenticated users may access the target service.
The roles may be transformed before being compared to this list using the role transformers (see separate property).
roleTransformationRules
)
type: com.airlock.iam.servicecontainer.app.application.configuration.radius.NASBasedTargetServiceConfig
id: NASBasedTargetServiceConfig-xxxxxx
displayName:
comment:
properties:
matchCaseSensitive: true
nasIdentifierPattern:
requiredRoles:
roleTransformationRules:
NAS-IP-Address-based Target Service
The target service is meant to be used if the NAS-IP-Address of the RADIUS client matches the one in the configuration.
clientNasIp
) requiredRoles
) The user needs one of the roles in order to get access to the target service.
If no roles are configured, all authenticated users may access the target service.
The roles may be transformed before being compared to this list using the role transformers (see separate property).
roleTransformationRules
)
type: com.airlock.iam.servicecontainer.app.application.configuration.radius.NasIpBasedTargetServiceConfig
id: NasIpBasedTargetServiceConfig-xxxxxx
displayName:
comment:
properties:
clientNasIp:
requiredRoles:
roleTransformationRules:
Native Vasco Handler
runtimeParameters
) cipherPassword
) Password used for the encryption and decryption of the Vasco blob.
As long as this property is not configured, the Vasco blob is not encrypted. When set to a non-null value, the Vasco blobs are encrypted on the fly when accessed the next time. Once set, do not change this value. Otherwise, decryption of existing Vasco blobs will fail.
secureChannelCryptoApplicationIndex
) otpCryptoApplicationIndex
) useSoftwareVectorForActivationChallenge
) If this flag is set, a different static vector is used for software devices when generating the second activation message. This static vector (called software vector in Airlock IAM) must be specified during license file import in Adminapp. It is then stored with every license that is imported and used for generating the second activation challenge, if the device has one of the following platform types:
- IOS
- ROOTED_IOS
- ANDROID
- ROOTED_ANDROID
- WINDOWS
- BLACKBERRY
Setting this flag also requires the input of a software vector during license import in Adminapp.
type: com.airlock.iam.core.misc.util.vasco.NativeVascoHandler
id: NativeVascoHandler-xxxxxx
displayName:
comment:
properties:
cipherPassword:
otpCryptoApplicationIndex:
runtimeParameters:
secureChannelCryptoApplicationIndex:
useSoftwareVectorForActivationChallenge: false
Never Migrate Possible
- the user has no migration date set and the feature "Never Migrate" is enabled.
- the features "Never Migrate" and "Never Migrate with to Date" are enabled and the migration date is within or after the "Never Migrate Period Days".
neverMigratePossibleWithToDate
) Whether it is possible to "Never Migrate" depends on whether or not a migration date is set and whether the authentication is happening during the "Never Migrate Period" (if set at all).
neverMigratePeriod
) Defines the period before the migration date in which the feature "Never Migrate" is active.
Prerequisites for this property to take effect:- A migration date must be set.
- The "Never Migrate" feature must be enabled.
- The feature "Never Migrate Despite Migration Date" must be enabled.
- A "Hint Period" must be specified.
If this property is not set, the feature "Never Migrate" is possible during and after the entire "Hint Period" if the"Never Migrate" feature is enabled.
The value of this property must be smaller or equal "Hint Period Days".
The duration must be specified in the format "(d)ays (h)ours (m)inutes (s)econds" e.g. "2d 4h 10m 5s" (any part can be omitted).
type: com.airlock.iam.authentication.application.configuration.migration.condition.NeverMigrateConditionConfig
id: NeverMigrateConditionConfig-xxxxxx
displayName:
comment:
properties:
neverMigratePeriod:
neverMigratePossibleWithToDate: false
Never Migrate Step
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.migration.NeverMigrateStepConfig
id: NeverMigrateStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
New Email Clean-up Strategy
null
as it has not been confirmed. tokenDataProvider
) userPersister
) newEmailAttribute
) daysToKeepNewEmail
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.token.NewEmailCleanUpStrategyConfig
id: NewEmailCleanUpStrategyConfig-xxxxxx
displayName:
comment:
properties:
daysToKeepNewEmail: 1
newEmailAttribute: new_email
tokenDataProvider:
userPersister:
New User Defaults Setter
enableSecretQuestionsDefault
) condition
)
type: com.airlock.iam.core.misc.impl.persistency.usereventbus.NewUserDefaultsSetter
id: NewUserDefaultsSetter-xxxxxx
displayName:
comment:
properties:
condition:
enableSecretQuestionsDefault:
Next Authentication Method-based Migration Condition
targetAuthMethod
) hintPeriod
) The duration must be specified in the format "(d)ays (h)ours (m)inutes (s)econds" e.g. "2d 4h 10m 5s" (any part can be omitted).
migrationToSameAuthMethodAllowed
)
type: com.airlock.iam.authentication.application.configuration.migration.condition.NextAuthMethodBasedMigrationConditionConfig
id: NextAuthMethodBasedMigrationConditionConfig-xxxxxx
displayName:
comment:
properties:
hintPeriod: 10d
migrationToSameAuthMethodAllowed: true
targetAuthMethod:
NextGenPSD2 Certificate Authenticator
If the certificate passes all of the configured validity checks, the resulting authenticated technical user will contain the following elements from the certificate:
- The subject DN's organizationIdentifier (oid 2.5.4.97 according to ITU-T Recommendations X.520) as the username.
- The payment service roles contained in the QCStatement (RFC 3739) with ID "0.4.0.19495.2" as granted user roles. The roles can be one of: PSP_AS, PSP_PI, PSP_AI or PSP_IC.
Technical clients are inserted into the configured persistence. A technical client is identified by the certificate's subject DN and will have the organizationIdentifier as display name. A TPP therefore can have multiple technical clients.
This plugin must not be used in other locations than in a HTTP Request Authentication (using Airlock Gateway One-Shot Flow).
clientRepository
) interceptors
) checkValidityPeriod
) certStatusCheckers
)
type: com.airlock.iam.login.app.application.configuration.psd2.NextGenPsd2CertificateAuthenticator
id: NextGenPsd2CertificateAuthenticator-xxxxxx
displayName:
comment:
properties:
certStatusCheckers:
checkValidityPeriod: true
clientRepository:
interceptors:
No Access Control
type: com.airlock.iam.admin.application.configuration.NoAccessControl
id: NoAccessControl-xxxxxx
displayName:
comment:
properties:
No Adminapp Content Security Policy
type: com.airlock.iam.admin.application.configuration.csp.NoAdminappContentSecurityPolicyConfig
id: NoAdminappContentSecurityPolicyConfig-xxxxxx
displayName:
comment:
properties:
No Context Extractor
type: com.airlock.iam.core.misc.util.context.NoContextExtractor
id: NoContextExtractor-xxxxxx
displayName:
comment:
properties:
No CRL Persister
type: com.airlock.iam.core.misc.impl.cert.crl.NoCRLPersister
id: NoCRLPersister-xxxxxx
displayName:
comment:
properties:
No Email Address Restriction
Does not allow users without an email address to perform public self-services and returns a corresponding feedback message.
For public self-service flows using email identity verification, the purpose of this restriction is only to add an informative feedback message. This increases usability but could allow user enumeration since it makes it possible to find existing users without an email address.
We recommend to configure this restriction as the last restriction to be checked.
emailContextData
)
type: com.airlock.iam.publicselfservice.application.configuration.restrictions.NoEmailAddressRestrictionConfig
id: NoEmailAddressRestrictionConfig-xxxxxx
displayName:
comment:
properties:
emailContextData:
No Identity Propagator
type: com.airlock.iam.core.misc.impl.sso.NoIdentityPropagator
id: NoIdentityPropagator-xxxxxx
displayName:
comment:
properties:
No Loginapp UI Content Security Policy
type: com.airlock.iam.login.rest.application.configuration.NoLoginappUiContentSecurityPolicyConfig
id: NoLoginappUiContentSecurityPolicyConfig-xxxxxx
displayName:
comment:
properties:
No mTAN Token Restriction
Does not allow users without an mTAN token to perform public self-services and returns a corresponding feedback message.
For public self-service flows using mTAN identity verification, the purpose of this restriction is only to add an informative feedback message. This increases usability but could allow user enumeration since it makes it possible to find existing users without an mTAN token.
We recommend to configure this restriction as the last restriction to be checked.
mtanHandler
)
type: com.airlock.iam.publicselfservice.application.configuration.restrictions.NoMtanTokenRestrictionConfig
id: NoMtanTokenRestrictionConfig-xxxxxx
displayName:
comment:
properties:
mtanHandler:
No Operation Step
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.application.configuration.step.NoOperationStepConfig
id: NoOperationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
No Retry Policy
type: com.airlock.iam.common.infrastructure.restclient.NoRetryPolicy
id: NoRetryPolicy-xxxxxx
displayName:
comment:
properties:
No State Encryption
CAUTION: As IAM state contains sensitive information, storing unencrypted state is not recommended in production setups!
type: com.airlock.iam.common.application.configuration.state.NoStateEncryptionConfig
id: NoStateEncryptionConfig-xxxxxx
displayName:
comment:
properties:
Non-Flow UI Settings
maintenanceMessageUi
)
type: com.airlock.iam.authentication.application.configuration.ui.NonFlowAuthenticationUiConfig
id: NonFlowAuthenticationUiConfig-xxxxxx
displayName:
comment:
properties:
maintenanceMessageUi:
None (Airlock 2FA Account Display Name)
type: com.airlock.iam.airlock2fa.application.configuration.enrollment.Airlock2FANoDisplayNameProviderConfig
id: Airlock2FANoDisplayNameProviderConfig-xxxxxx
displayName:
comment:
properties:
None (FIDO Attestation Verification)
type: com.airlock.iam.fido.application.configuration.registration.FidoNoAttestationVerificationConfig
id: FidoNoAttestationVerificationConfig-xxxxxx
displayName:
comment:
properties:
Nonexistent User Restriction
enableFeedback
) If enabled, the User Identification Step always returns a specific error code in case this restriction is violated.
If no restrictions are configured to provide feedback, a flow can also be started for users violating one or more restrictions and the flow will advance to the user identity verification step in stealth mode. In this mode, the initial behavior of the step is the same as for unrestricted users (e.g. an mTAN OTP is required), but all responses are rejected as if they were incorrect. This behavior prevents restricted users from ever proceeding further in the flow and thus offers protection against user enumeration. Please refer to the documentation for more details.
Irrespective of this settings, once the identity verification step is passed, restriction are always checked before and after each method call and violations are always reported.
Security notice: Enabling this feature might allow a client to determine whether certain users exist in the system.
type: com.airlock.iam.publicselfservice.application.configuration.restrictions.NonexistentUserRestrictionConfig
id: NonexistentUserRestrictionConfig-xxxxxx
displayName:
comment:
properties:
enableFeedback: false
Not Claim Condition Config
condition
)
type: com.airlock.iam.oauth2.application.configuration.claims.conditions.NotClaimConditionConfig
id: NotClaimConditionConfig-xxxxxx
displayName:
comment:
properties:
condition:
NTLM Identity Propagator
This propagator only works together with Airlock Gateway. It uses the control API to propagate username and password.
Attention: due to a known limitation (AP-27159), only passwords only containing characters in the iso-8859-1 character set can be used. Incompatible passwords will result in an error.
controlCookieName
) usernameProperty
) The name of the context key holding the username to be used for idenitity propagation.
Use the special value "@username" to use the username the user entered during authentication.
Use the prefix "STATIC:" to indicate that what follows is the statically configured username to be used for all users. Example: "STATIC:techaccount" means that the username "techaccount" is used for all users.
passwordProperty
) The name of the context key holding the password to be used for identity propagation.
Use the special value "@password" to use the password the user entered during authentication. Note that depending on the authentication scheme, there is no such password (e.g. when using client certificates).
Use the special value "@roles" to use the user's roles as the password. The roles are represented as comma-separated list (e.g. "admin,empoloyee,user").
Notice: If there are users with no roles and basic-auth headers with no passwords are accepted by the backend, the property "Allow Empty Passwords" must be enabled.
Use the prefix "STATIC:" to indicate that what follows is the statically configured password to be used for all users. Example: "STATIC:abcd1234" means that the password "abcd1234" is used for all users.
allowEmptyPasswords
) targetMappingName
)
type: com.airlock.iam.core.misc.impl.sso.NtlmIdentityPropagator
id: NtlmIdentityPropagator-xxxxxx
displayName:
comment:
properties:
allowEmptyPasswords: false
controlCookieName: AL_CONTROL
passwordProperty: @password
targetMappingName:
usernameProperty: @username
Null Password Policy
type: com.airlock.iam.core.misc.impl.authen.NullPasswordPolicy
id: NullPasswordPolicy-xxxxxx
displayName:
comment:
properties:
Null SMS Gateway
SMS gateway that does not send an SMS.
This SMS gateway only logs a generic message when sending an SMS. It can be used to block/disregard certain phone numbers and not send them SMS.
visiblePhoneNumberDigitsInLog
) Defines the number of phone number digits visible in log statements.
Thus, if the value is zero, all digits are masked, if it is large enough, all digits are visible. If set to 3, for example, the logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.core.misc.impl.sms.NullSmsGateway
id: NullSmsGateway-xxxxxx
displayName:
comment:
properties:
visiblePhoneNumberDigitsInLog: 100
Number-based Selection SMS Gateway
SMS gateway selection based on phone number.
Allows selecting an SMS gateway based on phone number pattern matching.
smsGatewaySelectionOptions
) Defines the mapping between phone numbers and SMS gateways.
When sending an SMS, the phone number is checked against the regex patterns defined in this map, and the first gateway whose corresponding pattern matches the phone number is selected to send the SMS. If no SMS gateway matches the phone number, the default gateway is used.
Note that the phone number is always normalized before checking it against the configured regex patterns meaning all whitespace is removed and the country code is added if it is missing, e.g. "+411234567".
defaultGateway
) visiblePhoneNumberDigitsInLog
) Defines the number of phone number digits visible in log statements.
Thus, if the value is zero, all digits are masked, if it is large enough, all digits are visible. If set to 3, for example, the logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.core.misc.impl.sms.NumberBasedSelectionSmsGateway
id: NumberBasedSelectionSmsGateway-xxxxxx
displayName:
comment:
properties:
defaultGateway:
smsGatewaySelectionOptions:
visiblePhoneNumberDigitsInLog: 100
O Auth2 Authorization Server
authorizationServerIdentifier
) sessionRepository
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.token.OAuth2AuthorizationServer
id: OAuth2AuthorizationServer-xxxxxx
displayName:
comment:
properties:
authorizationServerIdentifier:
sessionRepository:
O Auth2 Response Mode Config
Restricts the accepted response mode(s) per OpenId Connect Flow.
By default only the standard response mode for each flow is allowed ('query' for Authorization Code Grant, 'fragment' for Hybrid Flow).
If the standard response mode of a particular flow is unselected, requests without a response_mode parameter will be rejected.
authorizationCodeFlowQueryResponseMode
) Enables the query response mode for Authorization Code Flow. This is the default mode according to the specification if a client does not request a particular response mode.
If unselected, requests without a response_mode parameter will be rejected.
authorizationCodeFlowFragmentResponseMode
) Enables the fragment response mode for Authorization Code Flow.
If not enabled, requests that explicitly request this mode will be rejected.
authorizationCodeFlowFormPostResponseMode
) Enables the form_post response mode for Authorization Code Flow.
If not enabled, requests that explicitly request this mode will be rejected.
hybridFlowQueryResponseMode
) Enables the query response mode for Hybrid Flow.
If not enabled, requests that explicitly request this mode will be rejected.
hybridFlowFragmentResponseMode
) Enables the fragment response mode for Hybrid Flow. This is the default mode according to the specification if a client does not request a particular response mode.
If unselected, requests without a response_mode parameter will be rejected.
hybridFlowFormPostResponseMode
) Enables the form_post response mode for Hybrid Flow.
If not enabled, requests that explicitly request this mode will be rejected.
type: com.airlock.iam.login.app.misc.configuration.oauth.as.oauth2.OAuth2ResponseModeConfig
id: OAuth2ResponseModeConfig-xxxxxx
displayName:
comment:
properties:
authorizationCodeFlowFormPostResponseMode: false
authorizationCodeFlowFragmentResponseMode: false
authorizationCodeFlowQueryResponseMode: true
hybridFlowFormPostResponseMode: false
hybridFlowFragmentResponseMode: true
hybridFlowQueryResponseMode: false
O Auth2 Token Cleanup
authorizationServers
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.token.OAuth2TokenCleanup
id: OAuth2TokenCleanup-xxxxxx
displayName:
comment:
properties:
authorizationServers:
OATH OTP Activation Step
Allows adding or replacing an OATH (T)OTP token.
When existing shared secrets are not overwritten, the shared secret is read from the database and presented to the user who may register it in an authenticator app. If the secret has been read into another app, it will remain functional. This can only be done with TOTP tokens, as HOTP token counters will diverge on different devices.
When used for user self-registration, this step needs an "OATH Token Insertion Handler" to be configured.
This step can trigger two kinds of events, depending on the value of the flag "Overwrite Existing Shared Secret":
- An "OATH OTP Secret Viewed" event, if the flag is set to false and the user has an existing secret. This event is triggered whenever this step is entered, without any user interaction (the existing shared secret is communicated to the SPA at the start), and signifies an intended exposure of the secret. Irrespective of how this step ends (success or failure), the (exposed) secret can be used to generate OTPs.
- An "OATH OTP Secret Added" event, if a new secret is persisted.
oathOtpSettings
) overwriteExistingSharedSecret
) This setting has no effect if the step is used in a self-registration flow.
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.oath.OathOtpActivationStepConfig
id: OathOtpActivationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: PASSWORD
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
oathOtpSettings:
onFailureGotos:
overwriteExistingSharedSecret: true
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
OATH OTP Authentication Step
oathOtpSettings
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.oath.OathOtpAuthStepConfig
id: OathOtpAuthStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: OATH_OTP
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
oathOtpSettings:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
OATH OTP Authenticator
It can be used to verify counter based HOTP one time passwords (event-triggered, incrementing counter) or to verify time based TOTP one time passwords (draft standard). On the client side we tested it with 'Google Authenticator' which is available for Android, iPhone and Blackberry.
Note: Does not support getLatestUsedToken()
.
References:
HOTP RFC 4226 http://www.ietf.org/rfc/rfc4226.txt
TOTP http://www.ietf.org/id/draft-mraihi-totp-timebased-06.txt
oathOtpSettings
)
type: com.airlock.iam.core.misc.impl.authen.OathOtpAuthenticator
id: OathOtpAuthenticator-xxxxxx
displayName:
comment:
properties:
oathOtpSettings:
OATH OTP Event-based Challenge Handler
windowsSize
) The window size defines the number of codes that are allowed to be skipped. This is required if the user accidentally generated OTPs that he did not use.
This value cannot be to big for security reasons. If the value is too small, the convenience is not given, since the users must to often synchronize his token.
type: com.airlock.iam.core.misc.impl.tokenverifier.oathotp.HotpChallengeHandler
id: HotpChallengeHandler-xxxxxx
displayName:
comment:
properties:
windowsSize: 10
OATH OTP Letter Task
The task uses a user iterator plug-in to go through the set of users or credential records and looks at a specific flag telling this plug-in that a report should be rendered for the user (or credential). If the flag is set, the "delivery security gap" is checked: This is the minimum amount of time there must be between two reports being generated for one and the same user. If this check is ok, the configured report renderer is called and the flag reset.
Note: This generates letters with QR codes. This 2-D barcode pictures are a convenient way for initializing/provisioning of the mobile phone software application 'Google Authenticator'.oathOtpSettings
) credentialIterator
) If this property is not specified, the credential persister plugin (referenced in the OATH OTP settings) is used to iterate over the credentials.
reportRenderer
) deliverySecurityGap
) This feature only works correct, if the underlying credential persister knows about the other credentials delivery timestamps. Make sure these are properly configured for the credential persister.
Not setting this property turns this feature off.
languageAttributeName
) workingDirectory
) If this property is defined, the credential reports are not directly generated into the output directory (see other property) but they are generated into this working directory and are moved to the output directory once they are done.
This helps to solve problems with processes automatically reading the rendered reports and reading partial reports during the generation process. Make sure that the working directory and the output directory reside in the same file system (if not the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
outputDirectory
) This property is not required if the renderer plugin (see separate property) does not write on the output stream (e.g. sends it somewhere else). It is required otherwise.
Note: If this property is not defined and the used renderer plugin writes on the output stream, then the result (e.g. a PDF file) is lost.
fileNamePrefix
) Do not use the prefix "pwd-" or the empty prefix if password- or tokenlist reports are stored in the same directory. The latter is used as default for token lists (matrix card) and the former for password letters.
fileNameSuffix
) deleteOldReports
) Caution: This feature will delete all reports starting with the prefix configured by property "file-name-prefix" and the user's name. Thus you must make sure, that different report types use different filename prefixes.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.OathOtpReportTask
id: OathOtpReportTask-xxxxxx
displayName:
comment:
properties:
credentialIterator:
deleteOldReports: false
deliverySecurityGap: 0
fileNamePrefix:
fileNameSuffix:
languageAttributeName:
oathOtpSettings:
outputDirectory:
reportRenderer:
workingDirectory:
OATH OTP Secret Added
Event that is triggered by a user activating a new OATH OTP device. Technically, it is triggered when a new shared secret is persisted for the user.
Consult the "OATH OTP Activation Step" for details.
type: com.airlock.iam.common.application.configuration.event.OathOtpSecretAddedSubscribedEventConfig
id: OathOtpSecretAddedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
OATH OTP Secret Viewed
Event that is triggered by a user viewing an existing (not newly generated) OATH OTP shared secret (to import into an authenticator app).
Consult the "OATH OTP Activation Step" for details.
type: com.airlock.iam.common.application.configuration.event.OathOtpSecretViewedSubscribedEventConfig
id: OathOtpSecretViewedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
OATH OTP Settings
It can be used to verify counter based HOTP (event-triggered, incrementing counter) or to verify time based TOTP (draft standard).
On the client side we tested it with 'Google Authenticator' which was available for Android, iPhone and Blackberry at the time this plugin has been developed.
References:
HOTP RFC 4226 http://www.ietf.org/rfc/rfc4226.txt
TOTP RFC 6238 http://www.ietf.org/rfc/rfc6238.txt
password
) credentialPersister
) tokenType
) More formal:hotp := truncate(secureHash(sharedSecret, counter))
totp := truncate(secureHash(sharedSecret, time_slot))
We implement HOTP as defined in RFC 4226
and for TOTP we follow the draft standard
http://www.ietf.org/id/draft-mraihi-totp-timebased-06.txt).
orgLabelContextProperty
) The label is used together with the username as label of the OTP generator (usually, a mobile app can display multiple OTP generators).
Make sure the context data property is provided by the configured credential persister.
Note that spaces will be removed from the label (not allowed in some mobile clients).
If this property is not defined or the referenced context data value is empty, the default label is used (see separate configuration property).
orgLabelDefault
) The label is used together with the username as label of the OTP generator (usually, a mobile app can display multiple OTP generators).
digits
) selectableAsAuthMethod
) selectableAsNextAuthMethod
) synchronizeIncreaseCounterButton
) Using this button, the administrator can reset the time offset (for time-based OATH OTP) or increase the counter-value (event-based OATH OTP) in order to manually re-synchronize the token with the server.
showLetterAttributes
) showSecretAsQrCode
) The QR code allows admins to transfer the token key more easily to a compatible mobile app. This also eases "cloning" the OTP generator!
showSecretInHex
) The HEX representation allows admins to transfer the token key to a mobile app. This also allows "cloning" the OTP generator!
showSecretInBase32
)
type: com.airlock.iam.core.misc.impl.tokenverifier.oathotp.OathOtpSettings
id: OathOtpSettings-xxxxxx
displayName:
comment:
properties:
credentialPersister:
digits: 6
orgLabelContextProperty:
orgLabelDefault: Airlock
password:
selectableAsAuthMethod: true
selectableAsNextAuthMethod: true
showLetterAttributes: true
showSecretAsQrCode: true
showSecretInBase32: true
showSecretInHex: false
synchronizeIncreaseCounterButton: true
tokenType:
OATH OTP Time-based Challenge Handler
windowsSize
) The window size defines how many time slots before and after the current time slot that are allowed for the OTP verification. The length of a time slot is 30s. The window is symmetric. For a window size of 1, the time slots before and after the current time slot are allowed, in addition to the current time slot. Extending the time-window is required if the client's clock is not in perfect sync with the server clock (e.g. for hardware tokens).
This value must be as small as possible for security reasons. On the other hand, if the value is too small, usability may be impacted.
autoTimeShift
)
type: com.airlock.iam.core.misc.impl.tokenverifier.oathotp.TotpChallengeHandler
id: TotpChallengeHandler-xxxxxx
displayName:
comment:
properties:
autoTimeShift: true
windowsSize: 1
OATH OTP Token Controller
Time-based OTP ("TOTP" according to draft standard http://www.ietf.org/id/draft-mraihi-totp-timebased-06.txt) and counter-based OTP ("HOTP" according to RFC 4226) are supported.
There are number of freely available clients ("apps") for various mobile phone operating systems. The plugin has been tested with the "Google Authenticator" app.
oathOtpSettings
) autoOrderCredential
) autoOrderForNewUsers
) identifier
) Make sure the identifier is unique among all configured token controllers.
The identifier is also used as key to translate the display name of this token controller. The key is assembled as follows: edituserpage.cred.XYZ.title
(where XYZ is the identifier).
deletePropertiesWithCredential
) Make sure, the underlying persister plugin is configured to persist the specified context data properties.
type: com.airlock.iam.admin.application.configuration.oathotp.OathOtpTokenController
id: OathOtpTokenController-xxxxxx
displayName:
comment:
properties:
autoOrderCredential: false
autoOrderForNewUsers: false
deletePropertiesWithCredential:
identifier: OATH_OTP
oathOtpSettings:
OATH OTP Token Verifier
This is an OATH OTP token verifier implementation. It can be used to verify counter-based HOTP one-time passwords (event-triggered, incrementing counter) or time-based TOTP one-time passwords. OATH is compatible with standard authenticator apps, e.g. Goole Authenticator.
References:
HOTP RFC 4226 http://www.ietf.org/rfc/rfc4226.txt
TOTP http://www.ietf.org/id/draft-mraihi-totp-timebased-06.txt
oathOtpSettings
)
type: com.airlock.iam.core.misc.impl.tokenverifier.oathotp.OathOtpTokenVerifier
id: OathOtpTokenVerifier-xxxxxx
displayName:
comment:
properties:
oathOtpSettings:
OATH Token Insertion Handler
Persists an OATH token that was created through a previous step.
oathOtpSettings
)
type: com.airlock.iam.userselfreg.application.configuration.step.OathOtpInsertionHandlerConfig
id: OathOtpInsertionHandlerConfig-xxxxxx
displayName:
comment:
properties:
oathOtpSettings:
OAuth 2.0 Access Token Authenticator
Authenticator that validates an OAuth 2.0 Access Token against the local persistence layer.
Note: When using certificate-bound access tokens with this Authenticator a "Certificate Token Credential Extractor" must be used as credential extractor to successfully authenticate the access token.
authorizationServerReference
) This must reference an Authorization Server in the top-level OAuth 2.0 Settings of the Loginapp.
addRolesFromPersistence
) addScopesAsRoles
) addContextDataFromPersistence
)
type: com.airlock.iam.login.app.application.configuration.oauth.OAuth2AccessTokenAuthenticatorConfig
id: OAuth2AccessTokenAuthenticatorConfig-xxxxxx
displayName:
comment:
properties:
addContextDataFromPersistence: true
addRolesFromPersistence: true
addScopesAsRoles: true
authorizationServerReference:
OAuth 2.0 Access Token Ticket Decoder
authorizationServerReference
) This must reference an Authorization Server in the top-level OAuth 2.0 Settings of the Loginapp.
addScopesAsRoles
) Controls whether the Access Token's scopes are added as roles to the authenticated user.
type: com.airlock.iam.login.app.application.configuration.oauth.OAuth2AccessTokenDecoderConfig
id: OAuth2AccessTokenDecoderConfig-xxxxxx
displayName:
comment:
properties:
addScopesAsRoles: true
authorizationServerReference:
OAuth 2.0 Authorization Code Grant
Configures an OAuth 2.0 Authorization Code Grant.
The Authorization Code Grant uses the following endpoints:
- /<loginapp-uri>/oauth2/v3/<as-identifier>/authorize - The Authorize Endpoint
- /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/token - The Token Endpoint
authorizationCodeExpiresIn
) Time in seconds for which an Authorization Code is valid. Set to 0 for infinite validity.
Security Warning: Infinite Authorization Code validity is not recommended. If long lasting access is required and acceptable from a security perspective, consider increasing the Refresh Token validity instead.
pkceCodeChallengeMethod
) Proof Key for Code Exchange by OAuth 2.0 Public Clients (RFC 7636)
It is strongly recommended to use PKCE in setups involving native mobile apps (see the RFC 8252).
PKCE is always performed if the client starts it; however this property defines the minimum challenge hash method necessary and therefore allows to enforce the usage of PKCE.
If PKCE is required, "plain" should only be used if a legacy client doesn't support S256.
The value configured here applies to all clients, however, it's possible to override it in the configuration of each static client.
Background on PKCE:
OAuth 2.0 public clients utilizing the Authorization Code Grant are susceptible to the Authorization Code interception attack. PKCE helps to mitigate this risk through the use of Proof Key for Code Exchange (pronounced "pixy").
This extension utilizes a dynamically created cryptographic random key called "code verifier". A unique code verifier is created for every authorization request, and its transformed value, called "code challenge", is sent to the authorization server to obtain the Authorization Code. The Authorization Code obtained is later sent to the token endpoint with the "code verifier", which allows the server to verify the possession of the "code verifier" before issuing an Access Token.
pushedAuthorizationRequests
) Configures the Pushed Authorization Requests (PAR) endpoint.
If configured, IAM will provide an endpoint that allows starting an authentication flow with PAR.
invalidateOldAccessTokensOnRefresh
) accessTokenExpiresIn
) Time in [s] for which an Access Token is valid. Set to 0 for infinite validity.
Security Warning: Infinite Access Token validity is not recommended. If long lasting access is required and acceptable from a security perspective, consider increasing the Refresh Token validity instead.
singleUseAccessTokens
) Indicates whether an Access Token is valid only for a single request.
When enabled, any Access Token may only be used once for example in resource requests, authentications using one-shot, or when used as bearer tokens in REST calls.
accessTokenFormat
) Defines the format and structure of the issued OAuth 2.0 Access Tokens.
Tokens will be persisted in the token persister regardless of their format and therefore can be revoked at any time. Changing the format will not result in an invalidation of existing tokens.
generateRefreshToken
) refreshTokenExpiresIn
) Time in seconds for which a Refresh Token is valid. Set to 0 for infinite validity.
Security Warning: Only consider infinite Refresh Token validity if this is acceptable from a security perspective.
singleUseRefreshTokens
) Indicates whether Refresh Tokens are only valid for a single refresh request.
When enabled, all other Refresh Tokens of the current OAuth 2.0 session will be invalidated on successful refresh. This ensures that the Refresh Token issued during the current refresh is the only valid Refresh Token for this OAuth 2.0 session.
gracePeriod
) The time in seconds during which a single use Refresh Token can still be used after completing a successful refresh. Only relevant if 'Single Use Refresh Tokens' is enabled. If a Refresh Token is used to obtain several new token pairs, only the most recent new token pair is valid.
Warning: This option has security impact!
Configuring a grace period weakens the single use property of Refresh Tokens. If a grace period is not strictly necessary, it is not recommended to use this option.
This option may be used if the client can be unreachable so that the refresh response never reaches the client (e.g. mobile apps losing connection). Normally, the Refresh Token is invalidated in this case, leaving the client without valid tokens.
By configuring a grace period, such a client is able to reuse an already used Refresh Token within the configured time (called grace period) as long as the previously issued new tokens have not been used.
flowApplicationId
) When left empty, the default authentication flow is started. The Application ID configured here for all clients can be overridden for individual clients in the corresponding client configuration (static clients only).
scopeFiltering
) This filtering takes place after processing the requested scopes (using "Scope Policy" and any allowed scopes of the client).
When not configured explicitly, all requested scopes must be covered by a persistent user role or an acquired flow tag.
consent
) If configured, enables displaying a consent page to the user to accept or refuse certain requested scopes.
For "Local Consents", a page is displayed by IAM and only scopes matching the user's roles are offered.
For "Remote Consents", the user is redirected to the configured remote consent URL to confirm OAuth 2.0 scopes at a third party.
If nothing is configured, all requested scopes allowed by Scope Filtering are automatically granted and no page is displayed.
If "Local Consent" is configured, all requested scopes allowed by Scope Filtering are allowed to be granted by the "Consent Step".
scopeTranslator
) Translator to convert (technical) scopes to human readable strings.
This allows for multi-language, user friendly explanations of the different access rights.
requireRedirectURI
) Indicates whether the redirect_uri
parameter is mandatory in OAuth 2.0 requests from the client.
Caution: When the redirect_uri
is not mandatory, only clients having exactly one registered redirect_uri
will be able to login, otherwise the correct value cannot be determined.
scopePolicy
) The scope policy defines how the requested scopes are validated and processed (before they are used for scope consent or scope filtering).
Depending on the selected policy, the following rules apply:
- Scopes Mandatory: It is mandatory for the client to request at least one scope, otherwise the request is denied.
- For static clients for which 'Filter Requested Scopes' is enabled: the requested scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the client has not requested any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the requested scopes are not filtered (i.e. all scopes are allowed to be requested).
- For persisted clients, the allowed scopes to request are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
- Empty Scopes Allowed: It is optional for the client to request scopes.
If scopes are requested:
- For static clients for which 'Filter Requested Scopes' is enabled: the requested scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the client has not requested any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the requested scopes are not filtered (i.e. all scopes are allowed to be requested).
- For persisted clients, the allowed scopes to request are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
- Always Overwrite Scopes: The scopes requested by the client are ignored and replaced by the default scopes of the client. If the client has no default scopes, this is treated as if the client has not requested any scopes at all.
With this policy, the 'Filter Requested Scopes' flag of static clients is ignored. - Empty Scopes Overwritten: When the client does not request any scopes, the request is treated as if the default scopes of this client were requested.
If scopes are requested:
- For static clients for which 'Filter Requested Scopes' is enabled: the requested scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the client has not requested any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the requested scopes are not filtered (i.e. all scopes are allowed to be requested).
- For persisted clients, the allowed scopes to request are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
allowEmptyScope
) Indicates if Access / Refresh Tokens and Authorization Codes with no scopes may be issued.
If set to false, no tokens are issued when there are no scopes; instead the authorization server returns an 'access denied' response.
Notice: 'No scopes' can be caused by the client not requesting any scopes, the configured scope policy (especially in combination with 'Filter Requested Scopes' enabled and empty 'Allowed/Default Scopes'), the scope processors or when the user just denies all scopes.
alwaysGrantedScopes
) grantedScopeProcessors
) Allows to further restrict the granted scopes before issuing the tokens.
The processors will be applied in the configured order and only scopes allowed by all processors may be granted.
If not configured, all granted scopes are assigned to all tokens.
Notice: the scope processors are applied after the configured Scope Policy and thus have no influence on whether the requested scopes are allowed.
type: com.airlock.iam.login.app.misc.configuration.oauth.as.oauth2.OAuth2AuthorizationCodeGrantConfig
id: OAuth2AuthorizationCodeGrantConfig-xxxxxx
displayName:
comment:
properties:
accessTokenExpiresIn: 180
accessTokenFormat:
allowEmptyScope: false
alwaysGrantedScopes:
authorizationCodeExpiresIn: 90
consent:
flowApplicationId:
generateRefreshToken: true
gracePeriod:
grantedScopeProcessors:
invalidateOldAccessTokensOnRefresh: false
pkceCodeChallengeMethod: PKCE_NOT_ENFORCED
pushedAuthorizationRequests:
refreshTokenExpiresIn: 900
requireRedirectURI: true
scopeFiltering:
scopePolicy: SCOPES_MANDATORY
scopeTranslator:
singleUseAccessTokens: false
singleUseRefreshTokens: true
OAuth 2.0 Authorization Code Grant In Progress
type: com.airlock.iam.oauth2.application.configuration.OAuth2CodeGrantInProgressConditionConfig
id: OAuth2CodeGrantInProgressConditionConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 Authorization Server Identifier
Unique identifier of an OAuth 2.0 / OpenID Connect Authorization Server.
This identifier is used in all 'v3'-URLs of this AS.
identifier
) The unique identifier of this AS. This identifier is used in the endpoint URLs.
When changed, all persisted clients have to re-register because their association with this AS is stored in the database.
Note that the issuer ID also contains this identifier.
type: com.airlock.iam.common.application.configuration.oauth2.OAuth2ASIdentifierConfig
id: OAuth2ASIdentifierConfig-xxxxxx
displayName:
comment:
properties:
identifier:
OAuth 2.0 Basic Auth Client Secret
Note: The basic auth scheme in OAuth 2.0 requests must comply to the specification in RFC 6749
charset
)
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2BasicAuthClientSecretConfig
id: OAuth2BasicAuthClientSecretConfig-xxxxxx
displayName:
comment:
properties:
charset: UTF-8
OAuth 2.0 Basic Auth Client Secret (AS)
Note: The basic auth scheme in OAuth 2.0 requests must comply to the specification in RFC 6749
charset
)
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2BasicAuthClientSecretMethodConfig
id: OAuth2BasicAuthClientSecretMethodConfig-xxxxxx
displayName:
comment:
properties:
charset: UTF-8
OAuth 2.0 Bearer Access Token
Configuration for a OAuth 2.0 Access Token in a Bearer Authorization header.
Example of such an authorization header: Authorization: Bearer mF_9.B5f-4.1JqM.
type: com.airlock.iam.oauth2.application.configuration.OAuth2BearerAccessTokenConfig
id: OAuth2BearerAccessTokenConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 Clean-up Task
Task to clean up expired OAuth 2.0 / OpenID Connect tokens and sessions.
In order to minimize database locks, the task doesn't delete all expired tokens in one transaction but deletes the tokens in configurable batches.
It is recommended to schedule this task with a daily interval during a time with little traffic. Depending on the total number of tokens and the number of deletable OAuth 2.0 tokens, the task might take some time but a proper "Batch Size" will keep row locks at a minimum.
sqlDataSource
) batchSize
) During clean-up, tokens are deleted in batches of this size. This ensures that any row locks on the database are very short-lived, and do not affect parallel token modifications. This value should not be set too high to prevent very long running transactions.
Token clean-up will repeatedly delete this number of tokens until all expired tokens have been removed. Therefore, this task can take some time when a lot of expired tokens are present.
This size should be chosen such that every batch does not take longer than 5 seconds. The average runtime of the batches can be found in the task's logs.
cleanupPushedAuthorizationRequests
) If set to true, expired Pushed Authorization Requests will be removed during clean-up.
Note that if this is set to true, the database must contain an oauth2_par_request table, otherwise an exception will be thrown during clean-up.
cleanupAcceptedClientAssertions
) If set to true, expired private key JWTs previously accepted as client_assertion during client authentication will be removed during clean-up.
Note that if this is set to true, the database must contain an oauth2_accepted_client_assertions table, otherwise an exception will be thrown during clean-up.
tokenTableName
) tokenAssignmentTableName
) logQueries
) If enabled, all SQL queries executed during cleanup will be written to the module's corresponding log file. This is only effective if the log level is set to at least INFO.
Warning: query values (including potentially sensitive data) will be logged as well.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.oauth2.OAuth2CleanupTask
id: OAuth2CleanupTask-xxxxxx
displayName:
comment:
properties:
batchSize: 1000
cleanupAcceptedClientAssertions: true
cleanupPushedAuthorizationRequests: true
logQueries: false
sqlDataSource:
tokenAssignmentTableName: token_assignment
tokenTableName: token
OAuth 2.0 Client Certificate
subjectDN
) For RDN types without a string representation defined, the OID format with values starting with a '#', followed by the hexadecimal representation, must be used (see RFC 2253. An example of such a value in OID notation would be 1.3.6.1.4.1.1466.0=#04024869 (OCTET String value "Hi" for OID 1.3.6.1.4.1.1466.0).
OpenSSL can be used to extract the subject as follows:
openssl x509 -in cert.pem -noout -subject -nameopt sep_comma_plus -nameopt dn_rev -nameopt utf8
if this produces an error the subject should be configured with the RDNs in their OID's and hexadecimal values as mentioned above. This format can be generated by:
openssl x509 -in cert.pem -noout -subject -nameopt dump_all -nameopt dump_der -nameopt oid -nameopt sep_comma_plus
issuerDN
) For RDN types without a string representation defined, the OID format with values starting with a '#', followed by the hexadecimal representation, must be used (see RFC 2253. An example of such a value in OID notation would be 1.3.6.1.4.1.1466.0=#04024869 (OCTET String value "Hi" for OID 1.3.6.1.4.1.1466.0).
OpenSSL can be used to extract the issuer as follows:
openssl x509 -in cert.pem -noout -issuer -nameopt sep_comma_plus -nameopt dn_rev -nameopt utf8
if this produces an error the issuer should be configured with the RDNs in their OID's and hexadecimal values as mentioned above. This format can be generated by:
openssl x509 -in cert.pem -noout -issuer -nameopt dump_all -nameopt dump_der -nameopt oid -nameopt sep_comma_plus
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2ClientCertificateConfig
id: OAuth2ClientCertificateConfig-xxxxxx
displayName:
comment:
properties:
issuerDN:
subjectDN:
OAuth 2.0 Client Credentials Grant
Configures an OAuth 2.0 Client Credentials Grant. Issued Access Token are self contained JWTs. Therefore, tokens will not be persisted and cannot be revoked.
The Client Credentials Grant uses the following endpoint:
/<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/token
- The Token Endpoint
accessTokenValidity
) issuer
) iss
) to include in the Access Token. If left empty the claim will not be included. audience
) The audience claim (aud
) to include in the Access Token. If left empty the claim will not be included.
If there is one audience, the claim is written as a string, for multiple values as an array.
scopePolicy
) The scope policy defines how the requested scopes are validated and processed (before the scope processors are applied).
Depending on the selected policy, the following rules apply:
Scopes Mandatory
: It is mandatory for the client to request at least one scope, otherwise the request is denied.- For static clients for which 'Filter Requested Scopes' is enabled: the requested scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the client has not requested any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the requested scopes are not filtered (i.e. all scopes are allowed to be requested).
- For persisted clients, the allowed scopes to request are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
Empty Scopes Allowed
: It is optional for the client to request scopes.
If scopes are requested:
- For static clients for which 'Filter Requested Scopes' is enabled: the requested scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the client has not requested any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the requested scopes are not filtered (i.e. all scopes are allowed to be requested).
- For persisted clients, the allowed scopes to request are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
Always Overwrite Scopes
: The scopes requested by the client are ignored and replaced by the default scopes of the client. If the client has no default scopes, this is treated as if the client has not requested any scopes at all.
With this policy, the 'Filter Requested Scopes' flag of static clients is ignored.Empty Scopes Overwritten
: When the client does not request any scopes, the request is treated as if the default scopes of this client were requested.
If scopes are requested:
- For static clients for which 'Filter Requested Scopes' is enabled: the requested scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the client has not requested any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the requested scopes are not filtered (i.e. all scopes are allowed to be requested).
- For persisted clients, the allowed scopes to request are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
grantedScopeProcessors
) Allows to further restrict the granted scopes (after applying the scope policy) before issuing the tokens.
The processors will be applied in the configured order and only scopes allowed by all processors may be granted.
If not configured, all granted scopes are assigned to the access token.
Notice: the scope processors are applied after the configured Scope Policy and thus have no influence on whether the requested scopes are allowed.
signature
)
type: com.airlock.iam.oauth2.application.configuration.OAuth2ClientCredentialsGrantConfig
id: OAuth2ClientCredentialsGrantConfig-xxxxxx
displayName:
comment:
properties:
accessTokenValidity: 180
audience:
grantedScopeProcessors:
issuer:
scopePolicy: EMPTY_SCOPES_ALLOWED
signature:
OAuth 2.0 Client ID Pattern UI Tenant ID Rule
clientIdPattern
) uiTenantIdValue
)
type: com.airlock.iam.oauth2.application.configuration.OAuth2ClientIdPatternUiTenantIdRuleConfig
id: OAuth2ClientIdPatternUiTenantIdRuleConfig-xxxxxx
displayName:
comment:
properties:
clientIdPattern:
uiTenantIdValue:
OAuth 2.0 Client ID UI Tenant ID Rule
type: com.airlock.iam.oauth2.application.configuration.OAuth2ClientIdUiTenantIdRuleConfig
id: OAuth2ClientIdUiTenantIdRuleConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 Client mTLS Authentication
The certificate from the TLS handshake is verified with the certificates of the client, which is either configured (static client) or stored in the database.
Note: If a gateway is used, the corresponding Gateway Settings must be configured in the Loginapp.
certStatusCheckers
)
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2ClientMTLSAuthenticationConfig
id: OAuth2ClientMTLSAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
certStatusCheckers:
OAuth 2.0 Client Persisting Step
interceptors
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.techclientreg.application.configuration.step.OAuth2ClientPersistingStepConfig
id: OAuth2ClientPersistingStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
interceptors:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
OAuth 2.0 Client Public Key
publicKey
) keyId
) Must match the value of the "kid" sent in the header of the private_key_jwt JWT.
Note that the "Key ID" property is only optional if a singular public key is configured. If more than one public key is configured, each must have a (unique) Key ID.
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2ClientPublicKeyConfig
id: OAuth2ClientPublicKeyConfig-xxxxxx
displayName:
comment:
properties:
keyId:
publicKey:
OAuth 2.0 Client Registration Step
The step uses the properties from the "Dynamic Client Registration" settings of the Loginapp's "OAuth 2.0 AS Settings".
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.techclientreg.application.configuration.step.OAuth2ClientRegistrationStepConfig
id: OAuth2ClientRegistrationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
OAuth 2.0 Client Secret Authentication
clientSecretConfig
)
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2ClientSecretAuthenticationConfig
id: OAuth2ClientSecretAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
clientSecretConfig:
OAuth 2.0 Consent Deny Initiation Step
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.OAuth2SelfServiceDenyConsentStepConfig
id: OAuth2SelfServiceDenyConsentStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
OAuth 2.0 Consent Grant Initiation Step
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.OAuth2SelfServiceGrantConsentStepConfig
id: OAuth2SelfServiceGrantConsentStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
OAuth 2.0 Consent List
accessCondition
) Precondition that must be fulfilled for a user to access the OAuth 2.0 consent list.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.oauth2.OAuth2ConsentListSelfServiceRestConfig
id: OAuth2ConsentListSelfServiceRestConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
OAuth 2.0 Consent Management UI
Configures the OAuth 2.0 Consent Management user interface.
Depending on the configuration, the user interface allows an authenticated user to view, grant, deny or delete OAuth 2.0 Consents.
The OAuth 2.0 Consent Management is accessible at /<loginapp-uri>/ui/app/protected/oauth2/consents after user authentication.
pageExitTarget
) If configured, an additional button is displayed on the OAuth 2.0 Consent Management to exit the page. On click, this button redirects the user to the configured target.
To redirect to a target application, redirect to the corresponding "Authentication Flow".
If the flow can be skipped due to the obtained tags, the user is directly forwarded to the target application.
flowToGrantAConsent
) ID of the flow which is used to grant a stored OAuth 2.0 consent.
flowToDenyAConsent
) ID of the flow which is used to deny a stored OAuth 2.0 consent.
flowToDeleteConsentsByClient
) ID of the flow which is used to delete OAuth 2.0 consents by client.
type: com.airlock.iam.selfservice.application.configuration.ui.oauth2.OAuth2ConsentManagementUiConfig
id: OAuth2ConsentManagementUiConfig-xxxxxx
displayName:
comment:
properties:
flowToDeleteConsentsByClient:
flowToDenyAConsent:
flowToGrantAConsent:
pageExitTarget:
OAuth 2.0 Consent Management UI Redirect
type: com.airlock.iam.selfservice.application.configuration.ui.oauth2.OAuth2ConsentManagementFlowRedirectTargetConfig
id: OAuth2ConsentManagementFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 Consent Repository
sqlDataSource
) logQueries
) If enabled, all SQL queries executed on this repository will be written to the module's corresponding log file. This is only effective if the log level is set to at least INFO.
Warning: query values (including potentially sensitive data) will be logged as well.
tenantId
) Identity added to the database records to distinguish between different tenants. Only consents that match the tenant ID specified here will be retrieved on query.
If left empty, 'no_tenant' is used as the effective value for tenant ID.
type: com.airlock.iam.oauth2.application.configuration.consentstorage.OAuth2ConsentRepositoryConfig
id: OAuth2ConsentRepositoryConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sqlDataSource:
tenantId:
OAuth 2.0 Consent Step
interactiveGotoTargets
) dynamicStepActivations
) preCondition
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.oauth2.application.configuration.OAuth2ConsentStepConfig
id: OAuth2ConsentStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
stepId:
tagsOnSuccess:
OAuth 2.0 Consent Storage
Attention: A 'OAuth 2.0/OIDC Consent Consistency User Change Listener' must be configured in the user persister to account for user deletion and username changes.
repository
)
type: com.airlock.iam.oauth2.application.configuration.consentstorage.OAuth2ConsentStorageConfig
id: OAuth2ConsentStorageConfig-xxxxxx
displayName:
comment:
properties:
repository:
OAuth 2.0 Consents Delete Initiation Step
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.OAuth2SelfServiceDeleteConsentsStepConfig
id: OAuth2SelfServiceDeleteConsentsStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
OAuth 2.0 Credential Context Data Map
type: com.airlock.iam.oauth2.application.configuration.valueprovider.OAuth2CredentialContextDataValueMapProviderConfig
id: OAuth2CredentialContextDataValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 Credential Roles Provider
type: com.airlock.iam.oauth2.application.configuration.valueprovider.OAuth2CredentialRolesProviderConfig
id: OAuth2CredentialRolesProviderConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 Custom Application UI
authorizationEndpointUri
) checkSessionEndpointUri
)
type: com.airlock.iam.oauth2.application.configuration.ui.OAuth2CustomApplicationUiConfig
id: OAuth2CustomApplicationUiConfig-xxxxxx
displayName:
comment:
properties:
authorizationEndpointUri:
checkSessionEndpointUri:
OAuth 2.0 Custom Client Endpoint Redirect URI
redirectUri
)
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2CustomClientEndpointRedirectUriConfig
id: OAuth2CustomClientEndpointRedirectUriConfig-xxxxxx
displayName:
comment:
properties:
redirectUri:
OAuth 2.0 Custom Scopes Flow Settings
conditions
)
type: com.airlock.iam.oauth2.application.configuration.OAuth2CustomScopesSettingsConfig
id: OAuth2CustomScopesSettingsConfig-xxxxxx
displayName:
comment:
properties:
conditions:
OAuth 2.0 Custom Session Attribute
An OAuth 2.0 session can have various custom attributes that are defined as a name-value pair.
name
) valuePattern
) updatable
)
type: com.airlock.iam.oauth2.application.configuration.session.OAuth2CustomSessionAttributeConfig
id: OAuth2CustomSessionAttributeConfig-xxxxxx
displayName:
comment:
properties:
name:
updatable: true
valuePattern: .{1,200}
OAuth 2.0 Date Context Data Resource
contextDataItem
) pattern
) timezone
) identifier
) condition
) This resource value will only be added to the response if the configured condition is satisfied.
If no condition is configured, the resource value will always be added.
type: com.airlock.iam.oauth2.application.configuration.resource.OAuth2DateContextDataResourceProviderConfig
id: OAuth2DateContextDataResourceProviderConfig-xxxxxx
displayName:
comment:
properties:
condition:
contextDataItem:
identifier:
pattern: yyyy-MM-dd
timezone:
OAuth 2.0 Default Application UI
type: com.airlock.iam.oauth2.application.configuration.ui.OAuth2DefaultSpaApplicationUiConfig
id: OAuth2DefaultSpaApplicationUiConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 Default Scopes Flow Settings
type: com.airlock.iam.oauth2.application.configuration.OAuth2DefaultScopesSettingsConfig
id: OAuth2DefaultScopesSettingsConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 Default UI Client Redirect URI
externalIamURL
)
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2RestUiClientRedirectUriConfig
id: OAuth2RestUiClientRedirectUriConfig-xxxxxx
displayName:
comment:
properties:
externalIamURL:
OAuth 2.0 Dynamic Client Registration
Service for OAuth 2.0 Dynamic Client Registration Protocol that can be used for the most common use cases.
Dynamic Client Registration uses the following endpoint:
- /<loginapp-uri>/rest/public/tech-client-registration/oauth2/<as-identifier>/register - The DCR Endpoint
clientIdGenerator
) clientSecretGenerator
) In addition, a "Token Endpoint Auth Method Processor" is required to determine the authentication method.
additionalProcessors
) authorizationCodeGrant
) If enabled, Authorization Code Grant is supported.
The registered client will be enabled to perform the authorization code grant in any of the following cases:
- If the "grant_types" requested by the client include "authorization_code". In this case a "redirect_uri" must be present.
- If the requested "response_types" include "code". In this case a "redirect_uri" must be present.
- If the client requests no "grant_types" and no "response_types", but supplies a "redirect_uri".
If this property is disabled, authorization code grant is never enabled for the client.
implicitGrant
) If enabled, Implicit Grant is supported.
The registered client will be enabled to perform implicit grant in any of the following cases:
- If the "grant_types" requested by the client include "implicit". In this case, a "redirect_uri" must be present.
- If the requested "response_types" include "token". In this case, a "redirect_uri" must also be present.
- If the client requests no "grant_types" and no "response_types", but supplies a "redirect_uri".
If this property is disabled, implicit grant is never enabled for the client.
clientCredentialsGrant
) If enabled, Client Credentials Grant is supported.
The registered client will be enabled to perform client credentials grant in any of the following cases:
- If the "grant_types" requested by the client include "client_credentials".
- If the client specifies no "grant_types" in the registration request.
If this property is disabled, client credentials grant is never enabled for the client.
accessTokenRefresh
) If enabled, refreshing an access token is supported.
The registered client will be enabled to refresh access tokens in any of the following cases:
- If the "grant_types" requested by the client include "refresh_token".
- If the client specifies no "grant_types" in the registration request.
If this property is disabled, refreshing of access tokens is never enabled for the client.
type: com.airlock.iam.techclientreg.application.configuration.oauth2dcr.DefaultOAuth2ClientRegistrationConfig
id: DefaultOAuth2ClientRegistrationConfig-xxxxxx
displayName:
comment:
properties:
accessTokenRefresh: true
additionalProcessors:
authorizationCodeGrant: true
clientCredentialsGrant: false
clientIdGenerator:
clientSecretGenerator:
implicitGrant: false
OAuth 2.0 Flow Client
httpClient
) tokenEndpointAuthentication
) authorizationEndpointURL
) pushedAuthorizationRequestEndpointURL
) tokenEndpointURL
) scopesToRequest
) Scopes may only contain the following characters: 0-9, A-Z, a-z, !, #, $, %, &, ', (, ), *, +, ',', -, ., /, :, ;, <, >, =, ?, @, [, ], ^, _, `, {, }, |, ~
pkceChallengeMethod
) providerId
) clientRedirectURI
) Defines the redirect URI (redirect_uri) parameter value to be included in OAuth 2.0 requests. The authorization response will then be sent to this URI by the authorization server (AS) or OpenID Provider (OP).
For redirects to the default IAM Loginapp UI use the "OAuth 2.0 Default UI Client Redirect URI".
resourceRequests
) Resource requests that will be executed to determine the identity of the user on the provider.
An OAuth 2.0 credential containing data of these resources is instantiated. This credential can then be used by plugins such as OAuth 2.0 Credential Roles Provider and OAuth 2.0 Credential Context Data Map to provide the data from the Authorization Server to the ID Propagation. This enables the ability to propagate the data to the backends.accountLinkingSelfService
) If enabled, this provider is available in the account linking self-service.
Users can link their IAM account with this provider to have an alternative authentication method.The account link management is available for authenticated users under the Loginapp URL: <loginapp-uri>/ui/app/protected/account-links
missingAccountLinkRedFlag
) If configured, the flow will raise the configured red flag and continue in case no user could be identified using an account link.
This red flag can then be used by a following subflow to:- be triggered (by using Account Linking Required Red Flag Condition as condition for the subflow)
- identify the local user with authentication steps
- link the identified user to the provider account and take down the red flag (by using Missing Account Link Step as step in the subflow)
clientId
) Only alphanumeric characters and '-_.' are allowed.
clientSecret
) accessTokenRequestMethod
) loggingSettings
) enableAccountLinking
) - Users using the self-service
- The automated registration
- Auto-link feature
autoLinkExistingUsersContextDataField
) To be able to match the context data value, it is required to add an 'OAuth 2.0 Remote Context Data Resource' with a 'Local Context Data Key' equal to this value to the resource mappings and have a context data column entry equal to this value in the Loginapp's user persister.
If this feature is used in combination with 'Automated Account Registration', no accounts will be registered that have been auto-linked.
Security Warning: For security reasons this should always be a context data field that is globally unique (e.g. email or phone number) and was previously verified by the IAM registration process (channel verification) and the provider's registration process. If this is not guaranteed, an attacker may be able to use this feature to log into a victim's IAM account.
accountRegistrationConfig
) The user must always confirm the account registration.
If this feature is used in combination with 'Auto-link IAM Account Based on Context Data Field', no accounts will be registered that have been auto-linked.
Security Warning: For automated account registration, the provider's data is used without additional validation. In particular:
- Identity verification for mTAN numbers and/or email addresses is currently not supported.
- Data validation (e.g. using regular expressions) is currently not supported.
- The provider's data that is used to create the account is not displayed to the user and the user is not asked to confirm the data, e.g. using transaction approval.
type: com.airlock.iam.oauth2.application.configuration.OAuth2SsoFlowClientSettings
id: OAuth2SsoFlowClientSettings-xxxxxx
displayName:
comment:
properties:
accessTokenRequestMethod: POST
accountLinkingSelfService:
accountRegistrationConfig:
authorizationEndpointURL:
autoLinkExistingUsersContextDataField:
clientId:
clientRedirectURI:
clientSecret:
enableAccountLinking: false
httpClient:
loggingSettings:
missingAccountLinkRedFlag:
pkceChallengeMethod: S256
providerId:
pushedAuthorizationRequestEndpointURL:
resourceRequests:
scopesToRequest:
tokenEndpointAuthentication:
tokenEndpointURL:
OAuth 2.0 Granted Scope Whitelist
allowedScopes
) Scopes may only contain the following characters: 0-9, A-Z, a-z, !, #, $, %, &, ', (, ), *, +, ',', -, ., /, :, ;, <, >, =, ?, @, [, ], ^, _, `, {, }, |, ~
type: com.airlock.iam.oauth2.application.configuration.as.OAuth2GrantedScopeWhitelistProcessorConfig
id: OAuth2GrantedScopeWhitelistProcessorConfig-xxxxxx
displayName:
comment:
properties:
allowedScopes:
OAuth 2.0 Grants / OIDC Flows
authorizationCodeGrant
) The OAuth 2.0 Authorization Code Grant.
If configured, clients can authorize using the RFC 6749 Authorization Code Grant.
Either this or the OpenID Connect Authorization Code Flow can be active at any time, however all other grants or endpoints can be active in parallel.
oidcAuthorizationCodeGrant
) The OpenID Connect Authorization Code / Hybrid Flow.
If configured, clients can authorize using the OpenID Connect Authorization Code Flow and optionally the OpenID Connect Hybrid Flow.
Either this or the OAuth 2.0 Authorization Code Grant can be active at any time, however all other grants or endpoints can be active in parallel.
clientCredentialsGrant
) The OAuth 2.0 Client Credentials Grant.
If configured, clients can authorize using the RFC 6749 Client Credentials Grant.
tokenExchangeGrant
) The OAuth 2.0 Token Exchange Grant.
If configured, the token endpoint supports the grant type "urn:ietf:params:oauth:grant-type:token-exchange" and exchanges tokens according to the configuration.
type: com.airlock.iam.login.app.misc.configuration.oauth.as.oauth2.OAuth2GrantsAndEndpointsConfig
id: OAuth2GrantsAndEndpointsConfig-xxxxxx
displayName:
comment:
properties:
authorizationCodeGrant:
clientCredentialsGrant:
oidcAuthorizationCodeGrant:
tokenExchangeGrant:
OAuth 2.0 Header Access Token Config
headerFieldName
) headerPrefix
) A header prefix denotes the first part of a space delimited header value.
Eg. "Authorization: Bearer 2q93nf8q23UIZFR2qfh98" where "Authorization" denotes the header field name, "Bearer" the header prefix and "2q93nf8q23UIZFR2qfh98" the Access Token.
type: com.airlock.iam.oauth2.application.configuration.OAuth2HeaderAccessTokenConfig
id: OAuth2HeaderAccessTokenConfig-xxxxxx
displayName:
comment:
properties:
headerFieldName: Authorization
headerPrefix:
OAuth 2.0 Header Client Secret
headerField
) headerPrefix
) A header prefix denotes the first part of a space delimited header value.
E.g. "Authorization: Basic 2q93nf8q23UIZFR2qfh98" where "Authorization" denotes the header field name, "Basic" the header prefix and "2q93nf8q23UIZFR2qfh98" the client secret value.
clientSecretFormat
) base64EncodeClientSecretValue
)
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2HeaderClientSecretConfig
id: OAuth2HeaderClientSecretConfig-xxxxxx
displayName:
comment:
properties:
base64EncodeClientSecretValue: false
clientSecretFormat:
headerField: Authorization
headerPrefix:
OAuth 2.0 Header Client Secret (AS)
headerField
) headerPrefix
) A header prefix denotes the first part of a space delimited header value.
Eg. "Authorization: Basic 2q93nf8q23UIZFR2qfh98" where "Authorization" denotes the header field name, "Basic" the header prefix and "2q93nf8q23UIZFR2qfh98" the client secret value.
clientSecretFormat
) base64EncodeClientSecretValue
)
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2HeaderClientSecretMethodConfig
id: OAuth2HeaderClientSecretMethodConfig-xxxxxx
displayName:
comment:
properties:
base64EncodeClientSecretValue: false
clientSecretFormat:
headerField: Authorization
headerPrefix:
OAuth 2.0 Issuer ID
issuerId
) Issuer ID.
Must be an absolute URL with "https" scheme and may not contain a query or fragment component.
type: com.airlock.iam.oauth2.application.configuration.OAuth2IssuerIdConfig
id: OAuth2IssuerIdConfig-xxxxxx
displayName:
comment:
properties:
issuerId:
OAuth 2.0 Legacy Client Endpoint Redirect URI
externalIamURL
)
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2LegacyClientEndpointRedirectUriConfig
id: OAuth2LegacyClientEndpointRedirectUriConfig-xxxxxx
displayName:
comment:
properties:
externalIamURL:
OAuth 2.0 Legacy Client Endpoint UI Redirect
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2LegacyClientEndpointRestUiSupport
id: OAuth2LegacyClientEndpointRestUiSupport-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 Legacy Custom Client Endpoint Redirect
redirectUri
)
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2LegacyCustomClientEndpointSupport
id: OAuth2LegacyCustomClientEndpointSupport-xxxxxx
displayName:
comment:
properties:
redirectUri:
OAuth 2.0 Local Consent
enableConsentStorage
)
type: com.airlock.iam.oauth2.application.configuration.OAuth2LocalConsentConfig
id: OAuth2LocalConsentConfig-xxxxxx
displayName:
comment:
properties:
enableConsentStorage: false
OAuth 2.0 LocalDate Context Data Resource
contextDataItem
) pattern
) identifier
) condition
) This resource value will only be added to the response if the configured condition is satisfied.
If no condition is configured, the resource value will always be added.
type: com.airlock.iam.oauth2.application.configuration.resource.OAuth2LocalDateContextDataResourceProviderConfig
id: OAuth2LocalDateContextDataResourceProviderConfig-xxxxxx
displayName:
comment:
properties:
condition:
contextDataItem:
identifier:
pattern: yyyy-MM-dd
OAuth 2.0 Logging Settings
Be aware that this settings are not meant for productive service unless it is required for error diagnostics.
logOnInfo
) Be aware that logging DEBUG information is detrimental to security because sensitive data might be logged. In addition, increased log output decreases the performance of the system
strategy
) Security implications: Logging token information is detrimental to security. The logs will contain parts of OAuth 2.0 Tokens, which is generally not recommended. This increases the probability of guessing correct tokens for attackers with log access.
Especially in cases where tokens (e.g. Refresh Tokens) are long living, we advise against using this feature.
type: com.airlock.iam.oauth2.application.configuration.logging.OAuth2LoggingSettings
id: OAuth2LoggingSettings-xxxxxx
displayName:
comment:
properties:
logOnInfo: false
strategy:
OAuth 2.0 Metadata Endpoint
Configuration of an endpoint for OAuth 2.0 Authorization Server Metadata. (RFC 8414).
Note that this endpoint also works for authentication servers in OpenID Connect mode.
As dictated by RFC 8414, the front-facing URL of this endpoint must be derived from the configured issuer ID. For instance, if the issuer ID is "https://example.com/auth/rest/oauth2/authorization-servers/main-as", the front-facing URL of this endpoint must be "https://example.com/.well-known/oauth-authorization-server/auth/rest/oauth2/authorization-servers/main-as".
Note that the well-known URI string ".well-known/oauth-authorization-server/" is not appended but inserted after the host part of the issuer ID to be compliant. Regardless of this fact, IAM serves this endpoint at a URL where the well-known URI string is appended to the base URL of the AS (e.g., "https://example.com/auth/rest/oauth2/authorization-servers/main-as/.well-known/oauth-authorization-server"). In order to fully meet the specification, an Airlock Gateway (WAF) mapping should be used to map the compliant URL to the one used by IAM.
issuerValidationMode
) Defines how IAM should behave when a mismatch is detected at runtime between the configured issuer ID and the front-facing URL of the request to this endpoint.
Available options:
- Ignore: Ignore a mismatch and respond with metadata
- Log Only: Log a warning and respond with metadata when there is a mismatch
- Fail: Respond with a server error when there is a mismatch
type: com.airlock.iam.login.app.misc.configuration.oauth.as.OAuth2MetadataEndpointConfig
id: OAuth2MetadataEndpointConfig-xxxxxx
displayName:
comment:
properties:
issuerValidationMode: FAIL
OAuth 2.0 No Client Authentication
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2NoClientAuthenticationConfig
id: OAuth2NoClientAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 No Client Secret Authentication
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2NoAuthenticationClientSecretConfig
id: OAuth2NoAuthenticationClientSecretConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 No Redirect URI
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2NoRedirectUriConfig
id: OAuth2NoRedirectUriConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 Parameter Access Token Config
parameterName
)
type: com.airlock.iam.oauth2.application.configuration.OAuth2ParameterAccessTokenConfig
id: OAuth2ParameterAccessTokenConfig-xxxxxx
displayName:
comment:
properties:
parameterName: access_token
OAuth 2.0 Parameter Client Secret
clientIdName
) parameterName
)
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2ParameterClientSecretConfig
id: OAuth2ParameterClientSecretConfig-xxxxxx
displayName:
comment:
properties:
clientIdName: client_id
parameterName: client_secret
OAuth 2.0 Parameter Client Secret (AS)
clientIdName
) parameterName
)
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OAuth2ParameterClientSecretMethodConfig
id: OAuth2ParameterClientSecretMethodConfig-xxxxxx
displayName:
comment:
properties:
clientIdName: client_id
parameterName: client_secret
OAuth 2.0 Persisted Clients
These clients are stored in the database and can be inserted using Dynamic Client Registration.
clientRepository
) emptyScopeAttributeInterpretedAsAllScopesAllowed
) Determines how to interpret a persisted client with an empty list of registered scopes. This happens when a client is being registered without sending any scopes or by filtering the requested scopes.
If this option is enabled, a persisted client whose registered scopes are empty will be interpreted as having an undefined list of allowed scopes meaning that all scopes may be requested. Otherwise, a persisted client whose registered scopes are empty will be interpreted as having an empty list of allowed scopes i.e. no scope is allowed.
type: com.airlock.iam.login.app.misc.configuration.oauth.as.client.OAuth2PersistedClientConfig
id: OAuth2PersistedClientConfig-xxxxxx
displayName:
comment:
properties:
clientRepository:
emptyScopeAttributeInterpretedAsAllScopesAllowed: true
OAuth 2.0 Post Logout Redirect Base URL
Redirect URI to the IAM SPA endpoint after an RP-initiated logout at the AS.
postLogoutRedirectBaseUrl
) The external base URL of the IAM instance that initiated the logout on the AS should redirect
after a logout has been performed. This URL must previously have been registered with the AS.
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2SpaPostLogoutRedirectUriConfig
id: OAuth2SpaPostLogoutRedirectUriConfig-xxxxxx
displayName:
comment:
properties:
postLogoutRedirectBaseUrl:
OAuth 2.0 Provider Identifier
An ID to identify an OAuth 2.0 Authorization Server or OpenID Provider.
identifier
)
type: com.airlock.iam.oauth2.application.configuration.OAuth2ProviderIdentifierConfig
id: OAuth2ProviderIdentifierConfig-xxxxxx
displayName:
comment:
properties:
identifier:
OAuth 2.0 Pushed Authorization Request (PAR) Repository
OAuth 2.0 / OpenID Connect Pushed Authorization Request (PAR) Repository for relational databases.
Requests made to the PAR endpoint are saved in this repository and later retrieved when the user makes a request to the authorization endpoint with the generated request_uri.
sqlDataSource
) logQueries
) If enabled, all SQL queries executed on this repository will be written to the module's corresponding log file. This is only effective if the log level is set to at least INFO.
Warning: query values (including potentially sensitive data) will be logged as well.
tenantId
) Identity added to the database records to distinguish between different tenants. Only requests that match the tenant ID specified here will be retrieved on query.
If left empty, 'no_tenant' is used as the effective value for tenant ID.
type: com.airlock.iam.oauth2.application.configuration.par.OAuth2ParRequestRepositoryConfig
id: OAuth2ParRequestRepositoryConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sqlDataSource:
tenantId:
OAuth 2.0 Pushed Authorization Requests
Configures OAuth 2.0 Pushed Authorization Requests (PAR).
The endpoint is located at /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/par. Clients must authenticate to call this endpoint. The PAR endpoint uses the same authentication method as configured for the token endpoint.
To prevent attacks like swapping an obtained request_uri, clients should make use of PKCE, use a unique state parameter, or use the OIDC "nonce" parameter.
requestUriLifetime
) The lifetime of the generated PAR request URI in seconds.
A general guidance for the validity time would be less than a minute.
repository
) requirePar
)
type: com.airlock.iam.oauth2.application.configuration.par.OAuth2ParConfig
id: OAuth2ParConfig-xxxxxx
displayName:
comment:
properties:
repository:
requestUriLifetime: 30
requirePar: false
OAuth 2.0 Remote Consent
IAM will redirect the user to the configured remote consent URL to confirm OAuth 2.0 scopes.
The remote site must implement the Remote Consent Protocol. Please refer to the documentation for further information.
remoteConsentUrl
) signer
) encrypter
) validity
) callbackUrl
) verifier
) decrypter
) airlockGatewayRole
) The Airlock Gateway (WAF) role / credential that is set when accessing the remote consent site.
This can be used when IAM and the remote consent site provider are behind the same Airlock Gateway and you want to restrict the access to the remote consent site by a specific Gateway mapping.
The name of the credential can be followed by a colon and the idle timeout of the credential in seconds, e.g. "myrole:300" sets the credential "myrole" that will expire after 5 minutes of client inactivity.
With a second colon and a second number, the life-time can be set, e.g. "myrole:300:3600" will set the credential "myrole" for a maximum of 1 hour, but it will also expire after 5 minutes of client inactivity.
type: com.airlock.iam.oauth2.application.configuration.OAuth2RemoteConsentConfig
id: OAuth2RemoteConsentConfig-xxxxxx
displayName:
comment:
properties:
airlockGatewayRole:
callbackUrl:
decrypter:
encrypter:
remoteConsentUrl:
signer:
validity: 1800
verifier:
OAuth 2.0 Remote Context Data Resource
localContextDataKey
) optional
) If set to true, the authentee's context data field is only set in case the resource is present. In case the resource cannot be obtained, the context data field will not be added to the authentee.
stringTransformers
) Note: If the resource is not a string, but a list of string transformers is configured, authentication fails.
resourceSelector
)
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2RemoteContextDataResource
id: OAuth2RemoteContextDataResource-xxxxxx
displayName:
comment:
properties:
localContextDataKey:
optional: false
resourceSelector:
stringTransformers:
OAuth 2.0 Remote User Role Resource
resourceSelector
)
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2RemoteUserRoleResource
id: OAuth2RemoteUserRoleResource-xxxxxx
displayName:
comment:
properties:
resourceSelector:
OAuth 2.0 Remote Username Resource
resourceSelector
)
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2RemoteUsernameResource
id: OAuth2RemoteUsernameResource-xxxxxx
displayName:
comment:
properties:
resourceSelector:
OAuth 2.0 Resource
resourceName
) The name of this resource.
This value will be part of the URL: /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/resources/<resource-name>
resourceProviders
) A list of OAuth 2.0 resource content providers.
Each provider may contribute any number of claims to the final result of this resource.
Multiple claims with the same name can be configured if each has a claim condition which ensures that only one of them will be included at runtime.
requiredScopes
) Scopes required to access this resource.
If scope values are added to this list, the access token has to cover at least all configured scopes to be able to access this resource.
If this list is left empty, there are no required scopes to access this resource, meaning it is accessible to anyone presenting a valid access token, regardless of the presented scopes. Note however, that the individual resource providers may have a configured condition requiring that certain scopes be present to include the corresponding data element in the response.
type: com.airlock.iam.oauth2.application.configuration.resource.OAuth2ResourceConfig
id: OAuth2ResourceConfig-xxxxxx
displayName:
comment:
properties:
requiredScopes:
resourceName:
resourceProviders:
OAuth 2.0 Resource Endpoint
OAuth 2.0 / OpenID Connect resource endpoint configuration.
Authentication against those endpoints must be done using an Access Token
provided in a Bearer Token header; for example: Authorization: Bearer pQ8x4f8PXcp9aS84
The endpoint will be available under /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/resources/<resource-name>
resources
) accessTokenAuthenticationConfig
)
type: com.airlock.iam.oauth2.application.configuration.resource.OAuth2ResourceEndpointConfig
id: OAuth2ResourceEndpointConfig-xxxxxx
displayName:
comment:
properties:
accessTokenAuthenticationConfig:
resources:
OAuth 2.0 Resource Selector
To find a resource in the response tree, the configured regex patterns are applied to the identifiers in the following way:
The first pattern of the matcher list is applied to the keys of the root level. The element corresponding to the first matching key is retrieved and the next pattern is applied to the keys of the nested element.
The last pattern must apply to a single value or a list of values (then the first one is used).
matcherList
)
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2ResourceSelectorImpl
id: OAuth2ResourceSelectorImpl-xxxxxx
displayName:
comment:
properties:
matcherList:
OAuth 2.0 Scope Matcher
scopeNamePattern
) caseSensitive
)
type: com.airlock.iam.oauth2.application.configuration.scope.OAuth2ScopeMatcherConfig
id: OAuth2ScopeMatcherConfig-xxxxxx
displayName:
comment:
properties:
caseSensitive: true
scopeNamePattern:
OAuth 2.0 Scope Translation Entry
scopePattern
) translationKey
)
type: com.airlock.iam.login.app.misc.oauth2.provider.configuration.OAuth2ScopeTranslationEntry
id: OAuth2ScopeTranslationEntry-xxxxxx
displayName:
comment:
properties:
scopePattern:
translationKey:
OAuth 2.0 Scope Translator
scopeTranslations
)
type: com.airlock.iam.login.app.misc.oauth2.provider.configuration.OAuth2ScopeTranslator
id: OAuth2ScopeTranslator-xxxxxx
displayName:
comment:
properties:
scopeTranslations:
OAuth 2.0 Session List
accessCondition
) Precondition that must be fulfilled for a user to access the OAuth 2.0 session list.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) - Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.oauth2.OAuth2SessionListSelfServiceRestConfig
id: OAuth2SessionListSelfServiceRestConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
OAuth 2.0 Session Management Endpoint
accessTokenConfig
) customSessionAttributes
)
type: com.airlock.iam.oauth2.application.configuration.session.OAuth2SessionManagementEndpointConfig
id: OAuth2SessionManagementEndpointConfig-xxxxxx
displayName:
comment:
properties:
accessTokenConfig:
customSessionAttributes:
OAuth 2.0 Session Management UI
Configures the OAuth 2.0 session management user interface.
Depending on the configuration, the user interface allows an authenticated user to view and delete OAuth 2.0 sessions.
The OAuth 2.0 session management is accessible at /<loginapp-uri>/ui/app/protected/oauth2/sessions after user authentication.
flowToDeleteSession
) ID of the flow which is used for deletion of an OAuth 2.0 session.
If not configured, the user will not be able to delete a session via the management UI.
pageExitTarget
) If configured, an additional button is displayed on the OAuth 2.0 session management to exit the page. On click, this button redirects the user to the configured target.
To redirect to a target application, redirect to the corresponding "Authentication Flow".
If the flow can be skipped due to the obtained tags, the user is directly forwarded to the target application.
type: com.airlock.iam.selfservice.application.configuration.ui.oauth2.OAuth2SessionManagementUiConfig
id: OAuth2SessionManagementUiConfig-xxxxxx
displayName:
comment:
properties:
flowToDeleteSession:
pageExitTarget:
OAuth 2.0 Session Management UI Redirect
type: com.airlock.iam.selfservice.application.configuration.ui.oauth2.OAuth2SessionManagementFlowRedirectTargetConfig
id: OAuth2SessionManagementFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 Session Repository
sqlDataSource
) tokenTableName
) tokenAssignmentTableName
) logQueries
) If enabled, all SQL queries executed on this repository will be written to the module's corresponding log file. This is only effective if the log level is set to at least INFO.
Warning: query values (including potentially sensitive data) will be logged as well.
type: com.airlock.iam.oauth2.application.configuration.session.OAuth2SessionRepositoryConfig
id: OAuth2SessionRepositoryConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sqlDataSource:
tokenAssignmentTableName: token_assignment
tokenTableName: token
OAuth 2.0 Session Reset Step
sessionRepository
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.oauth2.application.configuration.step.OAuth2SessionResetStepConfig
id: OAuth2SessionResetStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
sessionRepository:
skipCondition:
stepId:
tagsOnSuccess:
OAuth 2.0 Simple Resource Selector
key
)
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2SimpleResourceSelector
id: OAuth2SimpleResourceSelector-xxxxxx
displayName:
comment:
properties:
key:
OAuth 2.0 SSO Resource Request
resourceURL
) containedResources
) requestMethod
) accessTokenConfig
)
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2ClientResourceRequest
id: OAuth2ClientResourceRequest-xxxxxx
displayName:
comment:
properties:
accessTokenConfig:
containedResources:
requestMethod: GET
resourceURL:
OAuth 2.0 SSO Step
providerId
) An OAuth 2.0/OIDC Flow Client Settings configuration must be present below the Loginapp referencing the same Provider Identifier.
messageId
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.oauth2.application.configuration.OAuth2SsoStepConfig
id: OAuth2SsoStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: OAUTH2
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
messageId: automated-account-registration-confirmation
onFailureGotos:
preCondition:
providerId:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
OAuth 2.0 SSO Ticket Resource
OAuth 2.0 resource provider returning an SSO Ticket to be used for authentication.
Security Warning: This resource allows exchanging an Access Token for an SSO Ticket which may provide much more access than intended. This implies that everyone in possession of an access token can impersonate the user.
The ticket only contains the username and the static roles.
This plugin is intended to be used as login_hint
parameter in OpenID Connect flows and requires a configured "OpenID Connect SSO Ticket Login Hint" on the authorization server.
ticketLifetimeInSeconds
) The SSO ticket lifetime in seconds.
This should be configured as short as possible.
encoder
) staticRoles
) identifier
) condition
) This resource value will only be added to the response if the configured condition is satisfied.
If no condition is configured, the resource value will always be added.
type: com.airlock.iam.oauth2.application.configuration.resource.OAuth2SsoTicketResourceProviderConfig
id: OAuth2SsoTicketResourceProviderConfig-xxxxxx
displayName:
comment:
properties:
condition:
encoder:
identifier:
staticRoles:
ticketLifetimeInSeconds: 10
OAuth 2.0 Static Client
clientId
) Must be unique across all static clients of this AS.
clientName
) An optional human readable name of this client for display purposes.
redirectUris
) Allowed Redirect URIs of this client.
Required if the client is used in a flow requiring redirect URIs, e.g. the Authorization Code Grant.
Notice that any Redirect URI sent by the client must match exactly one of the configured URIs in this property. No prefix or regular expression matching is performed.
filterRequestedScopes
) Whether to filter all requested scopes against those configured in 'Allowed/Default Scopes'.
If disabled, all requested scopes are accepted for further processing.
If enabled, only scopes also explicitly configured in 'Allowed/Default Scopes' are accepted for this client. If that list is empty, the request is treated as if the client had not requested any scopes at all.
Notice: This property only affects the requested scopes. The configured scope policy, scope filtering and granted scope processors may still affect the final resulting scopes such that they might be different than the requested scopes even if this option is disabled.
allowedScopes
) The list of allowed or default scopes for this client.
When "Filter Requested Scopes" is disabled, this list is only relevant if a scope policy is chosen in the grant/flow that replaces the requested scopes with these default scopes.
When "Filter Requested Scopes" is enabled, all scopes requested by the client are always filtered against this list. If there are no allowed scopes, the request is treated as if the client had not requested any scopes at all.
Notice that for OpenID connect, the 'openid' scope does not have to be added to this list since it only acts as a marker for OpenID connect requests and will never be explicitly granted.
alwaysGrantedScopes
) pkceCodeChallengeMethodOverride
) Overrides the default Proof Key for Code Exchange (PKCE, see RFC 7636) configuration of the Authorization Code Flow/Grant for this particular client.
This allows to either disable PKCE enforcement for this client if enforced by default or to enforce PKCE for this client if not enforced by default.
clientSecret
) Required, for example, if the client secret is used for token endpoint authentication using a post parameter or basic authentication.
clientCertificates
) jwksSettings
) A JSON Web Key Set (JWKS) containing the keys that can be used by the client for authentication to the authorization server, e.g. when accessing the token endpoint (if configured to use private_key_jwt
).
For this client to authenticate using private_key_jwt
, either this property or at least one public key must be configured. However, both may not be configured at the same time, i.e. if a public key is configured, then this property must not be set.
publicKeys
) Public keys that can be used by the client for authentication to the authorization server, e.g. when accessing the token endpoint (if configured to use private_key_jwt
).
For this client to authenticate using private_key_jwt
, either this property or a JWKS must be configured. However, both may not be configured at the same time, i.e. if a JWKS is configured, then this list must be empty.
accessTokenAudience
) List of values that are added to the audience claim (aud
) of the issued access tokens for this client.
The values configured here are combined with the values configured in the authorization server, duplicate values are discarded.
If there is one audience, the claim is written as a string, for multiple values as an array.
accessTokenCustomClaims
) List of custom claims that are added to the issued access tokens for this client.
Multiple claims with the same name can be configured if each has a claim condition which ensures that only one of them will be included at runtime.
The following claims are automatically set by Airlock IAM and therefore will be ignored if defined as custom claim.iss
aud
exp
nbf
iat
jti
random
scope
The claims configured here are combined with the values configured in the authorization server. If claims configured here and in the authorization server have the same name, the claims configured here will override the ones configured at the authorization server level.
Note: This only works on Authorization Code Grant/Flow and Hybrid Flow. For the latter, both Hybrid Flow ID tokens (Authorization Endpoint and Token Endpoint) use this functionality. It only applies to JWT access token and not to opaque tokens.
Note: When "Persist Claims" is disabled, custom claims are collected when the Access Token is requested by an OAuth 2.0 client and not when the Access Token is issued. Therefore the values of the custom claims may change between issue and request time.
accessTokenDistributedClaims
) List of distributed claims that are added to the issued access tokens for this client.
These claims allow providing a URL to a 3rd party claims provider in the response where additional claims may be obtained.
The claims configured here are combined with the values configured in the authorization server. If claims configured here and in the authorization server have the same name, the claims configured here will override the ones configured at the authorization server level.
Note: This only works on Authorization Code Grant/Flow and Hybrid Flow. For the latter, both Hybrid Flow ID tokens (Authorization Endpoint and Token Endpoint) use this functionality. It only applies to JWT access token and not to opaque tokens.
idTokenCustomClaims
) List of custom claims that are added to the issued OpenID Connect ID tokens for this client.
Multiple claims with the same name can be configured if each has a claim condition which ensures that only one of them will be included at runtime.
The following claims are automatically set by Airlock IAM and therefore will be ignored if defined as custom claim.auth_time
nonce
acr
The claims configured here are combined with the values configured in the authorization server. If claims configured here and in the authorization server have the same name, the claims configured here will override the ones configured at the authorization server level.
Note: This only works on Authorization Code Grant/Flow and Hybrid Flow. For the latter, both Hybrid Flow ID tokens (Authorization Endpoint and Token Endpoint) use this functionality.
Note: When "Persist Claims" is disabled, custom claims are collected when the ID Token is requested by an OpenID Connect relying party and not when the ID Token is issued. Therefore the values of the custom claims may change between issue and request time.
idTokenDistributedClaims
) List of distributed claims that are added to the issued OpenID Connect ID tokens for this client.
These claims allow providing a URL to a 3rd party claims provider in the response where additional claims may be obtained.
The claims configured here are combined with the values configured in the authorization server. If claims configured here and in the authorization server have the same name, the claims configured here will override the ones configured at the authorization server level.
Note: This only works on Authorization Code Grant/Flow and Hybrid Flow. For the latter, both Hybrid Flow ID tokens (Authorization Endpoint and Token Endpoint) use this functionality.
roleTransformations
) A list of role transformation rules used to modify the collection of roles to propagate.
The role transformation rules are executed at the following locations in-order from top to bottom:
- OpenID Connect ID Token
- Access Token as JWT
- UserInfo Endpoint
- User Roles Resource
The role transformations defined here override those defined in "OAuth 2.0/OIDC Authorization Server".
flowApplicationId
) When left empty, the setting in "OIDC Authorization Code / Hybrid Flow" or "OAuth 2.0 Authorization Code Grant" applies.
acrToFlowAppId
) Maps an ACR value requested in the authentication request made by this client to an Application ID. The mappings defined here are merged with the mappings defined in "OIDC Authorization Code / Hybrid Flow"; if the same "ACR Value" is defined in "OIDC Authorization Code / Hybrid Flow" and here, the mapping configured here takes precedence.
How the application ID is selected:
- The merged ACR mappings (explained above) are evaluated first, if there is a match, the mapped Application ID is selected
- If there is no match, the flow is selected based on the Flow Application ID property:
- First at the level of the Static Client
- Then at the level of the Authorization Server ("OIDC Authorization Code / Hybrid Flow" or "OAuth 2.0 Authorization Code Grant")
- If both are not configured, the default application is selected
type: com.airlock.iam.login.app.misc.configuration.oauth.as.client.OAuth2StaticClientConfig
id: OAuth2StaticClientConfig-xxxxxx
displayName:
comment:
properties:
accessTokenAudience:
accessTokenCustomClaims:
accessTokenDistributedClaims:
acrToFlowAppId:
allowedScopes:
alwaysGrantedScopes:
clientCertificates:
clientId:
clientName:
clientSecret:
filterRequestedScopes: false
flowApplicationId:
idTokenCustomClaims:
idTokenDistributedClaims:
jwksSettings:
pkceCodeChallengeMethodOverride: DEFAULT
publicKeys:
redirectUris:
roleTransformations:
OAuth 2.0 Static Clients
These clients only reside in the configuration.
staticClients
)
type: com.airlock.iam.login.app.misc.configuration.oauth.as.client.OAuth2StaticClientsConfig
id: OAuth2StaticClientsConfig-xxxxxx
displayName:
comment:
properties:
staticClients:
OAuth 2.0 Static Resource
staticValue
) identifier
) condition
) This resource value will only be added to the response if the configured condition is satisfied.
If no condition is configured, the resource value will always be added.
type: com.airlock.iam.oauth2.application.configuration.resource.OAuth2StaticResourceProviderConfig
id: OAuth2StaticResourceProviderConfig-xxxxxx
displayName:
comment:
properties:
condition:
identifier:
staticValue:
OAuth 2.0 String Context Data Resource
contextDataItem
) identifier
) condition
) This resource value will only be added to the response if the configured condition is satisfied.
If no condition is configured, the resource value will always be added.
type: com.airlock.iam.oauth2.application.configuration.resource.OAuth2StringContextDataResourceProviderConfig
id: OAuth2StringContextDataResourceProviderConfig-xxxxxx
displayName:
comment:
properties:
condition:
contextDataItem:
identifier:
OAuth 2.0 Token Controller
tokenDataProvider
) sessionRepository
) consentRepository
)
type: com.airlock.iam.admin.application.configuration.oauth2.OAuth2TokenController
id: OAuth2TokenController-xxxxxx
displayName:
comment:
properties:
consentRepository:
sessionRepository:
tokenDataProvider:
OAuth 2.0 Token Endpoint
Configuration of the token endpoint for OAuth 2.0 or OpenID Connect.
The endpoint will be available under /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/token
clientAuthentication
) scopesToRemoveOnRefresh
) bindAccessTokens
) Issued Access Tokens will be bound to the client certificate that was used for client authentication for the Token Endpoint Authentication. This will enable the "cnf" claim to be included in the Token Introspection Endpoint result as well as in the JWT Access Token (if enabled). All consumers must utilise the claim to verify the client certificate being used with the Access Token.
IAM consumes such Access Tokens (Token Revocation Endpoint, Session Management Endpoint, Resource Endpoints, UserInfo Endpoint and One-Shot Authenticators) and will therefore automatically verify the mTLS client certificate, if an Certificate-Bound Access Token is used for authorization.
Note: Currently this setting is restricted to client authentications using mTLS.
type: com.airlock.iam.oauth2.application.configuration.as.OAuth2TokenEndpointConfig
id: OAuth2TokenEndpointConfig-xxxxxx
displayName:
comment:
properties:
bindAccessTokens: false
clientAuthentication:
scopesToRemoveOnRefresh:
OAuth 2.0 Token Exchange
Configuration of the token endpoint for token exchange (see RFC8693).
The token endpoint supports the grant type "urn:ietf:params:oauth:grant-type:token-exchange" and exchanges tokens according to the configuration.
subjectTokenValidation
) tokenExchangeRules
)
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.OAuth2TokenExchangeGrantConfig
id: OAuth2TokenExchangeGrantConfig-xxxxxx
displayName:
comment:
properties:
subjectTokenValidation:
tokenExchangeRules:
OAuth 2.0 Token Generator Settings
tokenRandomPartLength
) Length (in characters) of the random part in generated OAuth 2.0 Tokens.
With random tokens, this forms part of the token string itself, for JWT tokens, this string is included in the JWT as "jti" claim.
For security reasons, as recommended by RFC 6749, the randomness must be at least 160 bit corresponding to about 28 characters. Overly large values may have a negative performance impact.
passwordHash
) Hash function used to hash the generated OAuth 2.0 Tokens. Only a random ID and the hash of the token will be persisted.
Warning: When changing this hash, all previously issued tokens will be come invalid!
Security Warning: A cryptographic hash function should be used.
type: com.airlock.iam.oauth2.application.configuration.OAuth2TokenGeneratorConfig
id: OAuth2TokenGeneratorConfig-xxxxxx
displayName:
comment:
properties:
passwordHash:
tokenRandomPartLength: 40
OAuth 2.0 Token Introspection Endpoint
RFC 7662 Token Introspection endpoint allows authenticated clients to fetch information about Access and Refresh Tokens.
The endpoint will be available under /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/introspect
authenticationSettings
)
type: com.airlock.iam.oauth2.application.configuration.introspection.OAuth2TokenIntrospectionConfig
id: OAuth2TokenIntrospectionConfig-xxxxxx
displayName:
comment:
properties:
authenticationSettings:
OAuth 2.0 Token Request Authentication
authorizationServerId
) The unique identifier of the OAuth 2.0 Authorization Server.
This must reference an Authorization Server in the top-level OAuth 2.0 Settings of the Loginapp.
addScopesAsRoles
) userStore
) staticRoles
) rolesBlocklist
)
type: com.airlock.iam.login.app.application.configuration.oauth.OAuth2TokenRequestAuthenticationConfig
id: OAuth2TokenRequestAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
addScopesAsRoles: true
authorizationServerId:
rolesBlocklist:
staticRoles:
userStore:
OAuth 2.0 Token Revocation Endpoint
RFC 7009 Token Revocation endpoint allows clients to revoke Access and Refresh Tokens.
The endpoint is available under /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/revoke
accessTokenInvalidationStrategy
) refreshTokenInvalidationStrategy
) authenticationMethod
) Enforce the client authentication of the token revocation endpoint.
- BASIC_AUTH: Basic Authentication using the client id and secret, see RFC 6749.
- POST_PARAM: Authentication is done using the POST parameters client_id and client_secret, see RFC 6749.
Warning: Including the client credentials in the request-body using the two parameters is not recommended for security reasons. - NONE: No authentication required (should only used for public clients without any credentials). However, a client_id parameter must still be provided.
type: com.airlock.iam.oauth2.application.configuration.revocation.OAuth2TokenRevocationConfig
id: OAuth2TokenRevocationConfig-xxxxxx
displayName:
comment:
properties:
accessTokenInvalidationStrategy:
authenticationMethod: BASIC_AUTH
refreshTokenInvalidationStrategy:
OAuth 2.0 Tokens Map
- Access Token: access_token
- ID Token (OpenId Connect): id_token
type: com.airlock.iam.oauth2.application.configuration.valueprovider.OAuth2TokensValueMapProviderConfig
id: OAuth2TokensValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
OAuth 2.0 User Roles Resource
OAuth 2.0 resource provider returning the user's persistent roles.
Obtained roles are only part of the user's specific session and thus cannot be returned by this resource.
identifier
) condition
) This resource value will only be added to the response if the configured condition is satisfied.
If no condition is configured, the resource value will always be added.
type: com.airlock.iam.oauth2.application.configuration.resource.OAuth2UserRolesResourceProviderConfig
id: OAuth2UserRolesResourceProviderConfig-xxxxxx
displayName:
comment:
properties:
condition:
identifier:
OAuth 2.0 Username Resource
OAuth 2.0 resource provider returning the user name.
If the authorization server has username transformation configured, the username returned by this resource will be transformed according to the config.
identifier
) condition
) This resource value will only be added to the response if the configured condition is satisfied.
If no condition is configured, the resource value will always be added.
type: com.airlock.iam.oauth2.application.configuration.resource.OAuth2UsernameResourceProviderConfig
id: OAuth2UsernameResourceProviderConfig-xxxxxx
displayName:
comment:
properties:
condition:
identifier:
OAuth 2.0/OIDC Authorization Server
identifier
) applicationUi
) Defines which application UI will handle the authorization requests or redirect to a custom application UI.
This allows clients to use the URL (/<loginapp-uri>/oauth2/v3/<as-identifier>/authorize) from the OAuth 2.0 metadata to redirect to a custom application UI.
issuerId
) The issuer ID of this AS.
This is used both for the metadata endpoint and the OIDC authorization code flow, therefore it must be configured when using either one.
It must end with a slash followed by the unique identifier of the AS.
Note that the issuer ID usually represents the front-facing URL of this authentication server and may be used by clients to derive the URL of the OpenID Connect Discovery or the OAuth 2.0 Metadata endpoint. See plugin documentation of those endpoints for more details about the logic and rules of this derivation.
oauth2Grants
) staticClients
) The statically configured clients of this AS.
In contrast to the "Persisted Clients", these clients are only contained in the configuration and are not stored on the database. This is useful when the entire set of clients is known upfront at configuration time.
Static clients can be combined with persisted clients. If both sources contain a client with the same name, the static client will take precedence without raising an error.
persistedClients
) The persisted clients on the database of this AS.
This plugin is required when Dynamic Client Registration is used. Persisted clients are stored on the database and currently can only be inserted using Dynamic Client Registration.
Persisted clients can be combined with static clients. If both sources contain a client with the same name, the static client will take precedence without raising an error.
metadataEndpoint
) Endpoint for OAuth 2.0 Authorization Server Metadata (RFC 8414).
The Endpoint is located at /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/.well-known/oauth-authorization-server and must be mapped by a WAF or proxy to the external URL <issuer id>/.well-known/oauth-authorization-server
tokenEndpoint
) Configuration of the token endpoint.
This endpoint is called by the clients in order to exchange an authorization code or to refresh a Refresh Token.
The token endpoint is located at /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/token
tokenIntrospectionEndpoint
) Endpoint for OAuth 2.0 Token Introspection (RFC 7662) located at /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/introspect
tokenRevocationEndpoint
) Endpoint for OAuth 2.0 Token Revocation (RFC 7009) located at /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/revoke
dynamicClientRegistration
) The OAuth 2.0 Dynamic Client Registration endpoint settings.
The registration endpoint must be configured as "Technical Client Registration Flow" with an "OAuth 2.0 Client Registration Step" in the Loginapp REST API.
resourceEndpoint
) Configuration of all resource endpoints located at /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/resources/<resource-name>
For all resource endpoints, a valid access token must be provided.
sessionManagementEndpoint
) Endpoint for the custom OAuth 2.0 Session Management.
If not configured, the session management endpoint is disabled for this AS.
The session management endpoint is located under /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/sessions/
discoveryEndpoint
) Enables the OpenID Connect Discovery Endpoint.
The endpoint is available under /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/.well-known/openid-configuration
This endpoint can only be configured when an OpenID Connect flow has been configured.
userInfoEndpoint
) Enables the UserInfo Endpoint according to the OpenID Connect Specification.
The endpoint is available under /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/userinfo
This endpoint can only be configured when an OpenID Connect flow has been configured.
openIdConnectSessionManagement
) Enables OpenID Connect Session Management 1.0 according to the OpenID Connect Session Management Specification.
It allows a website relying on the user's authentication to monitor his login status at the OpenID Provider on an ongoing basis so that the Relying Party can log out an End-User who has logged out of the OpenID Provider.
Enabling this will allows the client to embed the OP-Iframe using the url /<loginapp-uri>/oauth2/v3/<as-identifier>/check-session
userStore
) tokenDataProvider
) sessionRepository
) consentStorageRepository
) If configured, enables storing user given consent in a database.
During an OAuth 2.0 flow, IAM can remember the scopes for which a user has given his consent and therefore skips the consent screen if all requested scopes were granted/denied in a previous flow.
This setting is required when a Local Consent is used with enabled Consent Storage.
usernameTransformation
) Allows to convey a different username than the IAM user ID.
This transformed username is used in the following locations:
- OpenID Connect ID Token: sub claim
- OpenID Connect ID Token: Custom username claim
- Access Token as JWT: sub claim
- UserInfo Endpoint: sub claim
- Token Introspection Endpoint: sub claim
- Username Resource
The transformers are asked to provide an alternative name in the configured order. Every transformer may interrupt the transformation chain and provide a final result or pass it on to the next transformer to potentially apply further transformations.
If left blank, the username of the authenticated user is used for all endpoints mentioned above.
Note that this setting can be overridden for each "OAuth 2.0 Static Client".
roleTransformationConfigs
) A list of role transformation rules used to modify the collection of roles to propagate.
The role transformation rules are executed at the following locations in-order from top to bottom:
- OpenID Connect ID Token
- Access Token as JWT
- UserInfo Endpoint
- User Roles Resource
tokenGeneratorConfig
) loggingSettings
) deleteTokensOnLogout
) Indicates whether all persisted tokens and sessions of the user are deleted when the user logs out.
Security Warning: Affects only actively triggered logouts, but not session timeouts. Therefore, the validity of each OAuth 2.0 token type should be configured and checked appropriately.
deleteTokensOnPasswordChange
) deleteTokensOnUserLocked
) Note: This setting only applies to users locked in the Loginapp. To delete tokens for users locked by admins, configure the corresponding settings within the Adminapp.
persistClaims
) When not enabled, claim values are newly evaluated every time a new token is created. This may lead to different claim values every time a token is requested. This was the default behaviour in all IAM <= version 8.2 releases.
However, regardless of this setting, the following claims are always freshly evaluated every time a token is requested:
- iat - Issue Time
- nbf - Not Valid Before
- exp - Expiration Time (claim is not included if token has infinite validity)
- jti - JWT ID (random value)
- random - A random value for the token entropy
- scope - A JSON array defining the scope of the access token
- cnf - The token binding (if applicable)
Note: The column 'claims' in the database table 'oauth2_session' is required to use this feature. A runtime error occurs if this feature is active and the database was not migrated.
cacheControlResponseHeader
) - /auth-login/rest/oauth2/authorization-servers/authorizationServerId/jwks/
- /auth-login/rest/oauth2/authorization-servers/authorizationServerId/.well-known/openid-configuration/
- /auth-login/rest/oauth2/authorization-servers/authorizationServerId/.well-known/oauth-authorization-server/
type: com.airlock.iam.login.app.misc.configuration.oauth.as.OAuth2ASConfig
id: OAuth2ASConfig-xxxxxx
displayName:
comment:
properties:
applicationUi:
cacheControlResponseHeader:
consentStorageRepository:
deleteTokensOnLogout: false
deleteTokensOnPasswordChange: false
deleteTokensOnUserLocked: false
discoveryEndpoint:
dynamicClientRegistration:
identifier:
issuerId:
loggingSettings:
metadataEndpoint:
oauth2Grants:
openIdConnectSessionManagement:
persistClaims: true
persistedClients:
resourceEndpoint:
roleTransformationConfigs:
sessionManagementEndpoint:
sessionRepository:
staticClients:
tokenDataProvider:
tokenEndpoint:
tokenGeneratorConfig:
tokenIntrospectionEndpoint:
tokenRevocationEndpoint:
userInfoEndpoint:
userStore:
usernameTransformation:
OAuth 2.0/OIDC Authorization Servers
authorizationServers
)
type: com.airlock.iam.login.app.misc.configuration.OAuth2AuthorizationServersConfig
id: OAuth2AuthorizationServersConfig-xxxxxx
displayName:
comment:
properties:
authorizationServers:
OAuth 2.0/OIDC Clients
flowClientSettings
) legacyClientEndpointSupport
) OAuth 2.0 legacy client endpoint (/oauth2-client) compatibility support.
This property must be configured when flow-based OAuth 2.0/OpenID Connect is used, and the client endpoint (redirect_uri) URI cannot be changed on the Authorization Server to the new endpoint URI:
/<loginapp-uri>/ui/app/oauth2/client
When this property is set, the browser accessing the legacy client endpoint URI will be redirected to the configured target, if and only if all of the following conditions apply:
- The request contains an authorization response
- "AS Setting For Flow Clients" has at least one entry configured
All OAuth 2.0 URL parameters will be retained in the redirect.
accountLinkPersister
) The database entry contains
- The IAM user name
- The configured 'Provider Identifier' of the 'OAuth 2.0 Flow Client' or 'OIDC Flow Client'
- The provider's username defined by the 'OAuth 2.0 Remote Username Resource' resource mapping
- Optionally the additional information to help the user identify the provider's account defined by 'Account Info Resource Key' of the 'Account Linking Self-Service'
If a user chooses to login in with a provider that has 'Account Linking Self-Service' enabled and a link matching the 'Provider Identifier' and the provider's username is found, the IAM user of the entry will be authenticated.
If users are allowed to change their usernames, a 'Account Link Consistency User Change Listener' in the Loginapp's user persister should be configured.
type: com.airlock.iam.login.app.misc.configuration.OAuth2SSOClientSettings
id: OAuth2SSOClientSettings-xxxxxx
displayName:
comment:
properties:
accountLinkPersister:
flowClientSettings:
legacyClientEndpointSupport:
OAuth 2.0/OIDC Consent Consistency User Change Listener
- on user deletion: delete all OAuth 2.0 / OIDC Consents stored for that user.
- on user name change: change the OAuth 2.0 / OIDC Consents to the new user name.
consentRepository
)
type: com.airlock.iam.oauth2.application.configuration.consentstorage.OAuth2ConsentConsistencyUserChangeListener
id: OAuth2ConsentConsistencyUserChangeListener-xxxxxx
displayName:
comment:
properties:
consentRepository:
OAuth 2.0/OIDC ID Propagator
This target URI to the client will be propagated in a header named "X-Forward-URL" and the browser should always be redirected to this URI.
type: com.airlock.iam.authentication.application.configuration.idpropagation.OAuth2IdentityPropagatorConfig
id: OAuth2IdentityPropagatorConfig-xxxxxx
displayName:
comment:
properties:
OCSP Certificate Status Checker
The OCSP responder used the check the revocation status of a certificate is determined through the X509v3 Authority-Information-Access-Extension of the certificate. The issuer certificate used by the responder to sign the response must be provided in the configured truststore (OCSP signing delegation is not supported, therefore the certificate used to sign the reponse must be equal to the issuer certificate of the certificate for which the request was performed).
ocspClient
) Different protocols can be used as transport mechanism for the OCSP protocol. An OCSP-Client represents an OCSP implementation that uses a particular transport protocol.
trustStorePath
) trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
type: com.airlock.iam.core.misc.impl.cert.ocsp.OcspCertificateStatusChecker
id: OcspCertificateStatusChecker-xxxxxx
displayName:
comment:
properties:
ocspClient:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
OCSP Over HTTP Client
httpClientConfig
)
type: com.airlock.iam.core.misc.impl.cert.ocsp.OcspOverHttpClient
id: OcspOverHttpClient-xxxxxx
displayName:
comment:
properties:
httpClientConfig:
OIDC Authorization Code / Hybrid Flow
Configures OpenID Connect Authorization Code and optionally Hybrid Flows.
The Authorization Code and Hybrid Flows use the following endpoints:
- /<loginapp-uri>/oauth2/v3/<as-identifier>/authorize - The Authorize Endpoint
- /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/token - The Token Endpoint
authorizationCodeExpiresIn
) pkceCodeChallengeMethod
) Proof Key for Code Exchange by OAuth 2.0 Public Clients (RFC 7636)
It is strongly recommended to use PKCE in setups involving native mobile apps (see the RFC 8252).
PKCE is always performed if the client starts it; however this property defines the minimum challenge hash method necessary and therefore allows to enforce the usage of PKCE.
If PKCE is required, "plain" should only be used if a legacy client doesn't support S256.
The value configured here applies to all clients, however, it's possible to override it in the configuration of each static client.
Background on PKCE:
OAuth 2.0 public clients utilizing the Authorization Code Grant are susceptible to the Authorization Code interception attack. PKCE helps to mitigate this risk through the use of Proof Key for Code Exchange.
This extension utilizes a dynamically created cryptographic random key called "code verifier". A unique code verifier is created for every authentication request, and its transformed value, called "code challenge", is sent to the authorization server to obtain the Authorization Code. The Authorization Code obtained is later sent to the token endpoint with the "code verifier", which allows the server to verify the possession of the "code verifier" before issuing an Access Token.
pushedAuthorizationRequests
) Configures the Pushed Authorization Requests (PAR) endpoint.
If configured, IAM will provide an endpoint that allows starting OpenID Connect Authorization Code and/or Hybrid Flows with PAR.
invalidateOldAccessTokensOnRefresh
) Indicates whether Access Tokens issued together with a Refresh Token should be invalidated when said Refresh Token is used.
Notice that in a Hybrid Flow, the Access Token issued directly via the fragment has no corresponding Refresh Token. Therefore it will never be invalidated when any Refresh Token is used to perform an Access Token refresh.
accessTokenExpiresIn
) singleUseAccessTokens
) Indicates whether an Access Token is valid only for a single request.
When enabled, any Access Token (including Access Tokens issued by a Hybrid Flow) may only be used once for example in resource requests, authentications using one-shot, or when used as bearer tokens in REST calls.
accessTokenFormat
) generateRefreshToken
) refreshTokenExpiresIn
) Security Warning: Only consider infinite Refresh Token validity if this is acceptable from a security perspective.
singleUseRefreshTokens
) When enabled, all other Refresh Tokens of the current OAuth 2.0 session will be invalidated on successful refresh. This ensures that the Refresh Token issued during the current refresh is the only valid Refresh Token for this OAuth 2.0 session.
gracePeriod
) This option has security impact! Configuring a grace period weakens the single use property of Refresh Tokens. If a grace period is not strictly necessary, it is not recommended to use this option.
This is only relevant if 'Single Use Refresh Tokens' is enabled: time in seconds during which a single use Refresh Token can still be used after completing a successful refresh.
This option may be used if the client can be unreachable so that the refresh response never reaches the client (e.g. mobile apps losing connection). Normally, the Refresh Token is invalidated in this case, leaving the client without valid tokens. By configuring a grace period, such a client is able to reuse an already used Refresh Token within the configured time (called grace period) as long as the previously issued new tokens have not been used. If a Refresh Token is used to obtain several new token pairs, only the most recent new token pair is valid.
flowApplicationId
) When left empty, the default authentication flow is started. The Application ID configured here for all clients can be overridden for individual clients in the corresponding client configuration (static clients only).
acrToFlowAppId
) When left empty, the configured "Flow Application ID" authentication flow is always started. The mappings configured here for all clients can be overridden for individual clients in the corresponding client configuration (static clients only).
scopeFiltering
) This filtering takes place after processing the requested scopes (using "Scope Policy" and any allowed scopes of the client).
When not configured explicitly, all requested scopes must be covered by a persistent user role or an acquired flow tag.
loginHintFlowSettings
) login_hint
request parameter. If not configured, the parameter is ignored. openIdConnectTokenExpiresIn
) idToken
) enableHybridFlow
) hybridFlowAccessTokenExpiresIn
) hybridFlowAccessTokenFormat
) Defines the format and structure of the OAuth 2.0 Access Tokens issued in Hybrid Flows.
Tokens will be persisted in the token persister regardless of their format and therefore can be revoked at any time.
Changing the format will not result in an invalidation of existing tokens.
If not defined, no Hybrid Flow Access Tokens will be issued and requests containing 'token' in the 'response_type' parameter will be denied.
hybridFlowOpenIdConnectTokenExpiresIn
) hybridFlowIdToken
) Defines the format and structure of the OpenID Connect ID Tokens issued in Hybrid Flows.
If not defined, no Hybrid Flow ID Tokens will be issued and requests containing 'id_token' in the 'response_type' parameter will be denied.
consent
) If configured, enables displaying a consent page to the user to accept or refuse certain requested scopes.
For "Local Consents", a page is displayed by IAM and only scopes matching the user's roles are offered.
For "Remote Consents", the user is redirected to the configured remote consent URL to confirm OAuth 2.0 scopes at a third party.
If nothing is configured, all requested scopes matching a user role are automatically granted and no page is displayed.
scopeTranslator
) scopePolicy
) The scope policy defines how the requested scopes are validated and processed (before they are used for scope consent or scope filtering).
Notice that the mandatory 'openid' scope requested by the client merely acts as a marker and is ignored when applying the policy (i.e. when requesting only the 'openid' scope, the scope policy treats this as if no scope had been requested at all).
Depending on the selected policy, the following rules apply:
- Scopes Mandatory: It is mandatory for the client to request at least one scope in addition to 'openid', otherwise the request is denied.
- For static clients for which 'Filter Requested Scopes' is enabled: the requested scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the client has not requested any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the requested scopes are not filtered (i.e. all scopes are allowed to be requested).
- For persisted clients, the allowed scopes to request are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
- Empty Scopes Allowed: It is optional for the client to request scopes other than 'openid'.
If scopes are requested:
- For static clients for which 'Filter Requested Scopes' is enabled: the requested scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the client has not requested any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the requested scopes are not filtered (i.e. all scopes are allowed to be requested).
- For persisted clients, the allowed scopes to request are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
- Always Overwrite Scopes: The scopes requested by the client are ignored and replaced by the default scopes of the client. If the client has no default scopes, this is treated as if the client has not requested any scopes at all.
With this policy, the 'Filter Requested Scopes' flag of static clients is ignored. - Empty Scopes Overwritten: When the client does not request any scopes other than 'openid', the request is treated as if the default scopes of this client were requested.
If scopes are requested:
- For static clients for which 'Filter Requested Scopes' is enabled: the requested scopes are filtered against the client's allowed scopes and if the client has no allowed scopes, this is treated as if the client has not requested any scopes at all.
- For static clients for which 'Filter Requested Scopes' is disabled: the requested scopes are not filtered (i.e. all scopes are allowed to be requested).
- For persisted clients, the allowed scopes to request are stored per client and it can be configured there what the effect of an empty list of allowed scopes is.
allowEmptyScope
) Indicates if Access / Refresh Tokens and Authorization Codes with no scopes may be issued. Even though the 'openid' scope is required to be present in the authentication request, it will never be present as granted scopes.
If set to false, no tokens are issued when there are no scopes; instead the authorization server returns an 'access denied' response.
Notice: 'No scopes' can be caused by the client not requesting any scopes, the configured scope policy (especially in combination with 'Filter Requested Scopes' enabled and empty 'Allowed/Default Scopes'), the scope processors or when the user just denies all scopes.
alwaysGrantedScopes
) grantedScopeProcessors
) Allows to further restrict the granted scopes before issuing the tokens.
The processors will be applied in the configured order and only scopes allowed by all processors may be granted.
If not configured, all granted scopes are assigned to all tokens.
Notice: the scope processors are applied after the configured Scope Policy and thus have no influence on whether the requested scopes are allowed.
responseModes
)
type: com.airlock.iam.login.app.misc.configuration.oauth.as.oauth2.OpenIdConnectAuthorizationCodeGrantConfig
id: OpenIdConnectAuthorizationCodeGrantConfig-xxxxxx
displayName:
comment:
properties:
accessTokenExpiresIn: 180
accessTokenFormat:
acrToFlowAppId:
allowEmptyScope: false
alwaysGrantedScopes:
authorizationCodeExpiresIn: 90
consent:
enableHybridFlow: false
flowApplicationId:
generateRefreshToken: true
gracePeriod:
grantedScopeProcessors:
hybridFlowAccessTokenExpiresIn: 180
hybridFlowAccessTokenFormat:
hybridFlowIdToken:
hybridFlowOpenIdConnectTokenExpiresIn: 120
idToken:
invalidateOldAccessTokensOnRefresh: false
loginHintFlowSettings:
openIdConnectTokenExpiresIn: 120
pkceCodeChallengeMethod: PKCE_NOT_ENFORCED
pushedAuthorizationRequests:
refreshTokenExpiresIn: 900
responseModes:
scopeFiltering:
scopePolicy: SCOPES_MANDATORY
scopeTranslator:
singleUseAccessTokens: false
singleUseRefreshTokens: true
OIDC Authorization Request Parameter
parameterName
) parameterValues
) param=value1¶m=value2
).
type: com.airlock.iam.oauth2.application.configuration.OpenIdConnectAuthorizationRequestParameterConfig
id: OpenIdConnectAuthorizationRequestParameterConfig-xxxxxx
displayName:
comment:
properties:
parameterName:
parameterValues:
OIDC Birthdate Standard Claim (Date)
contextDataField
) claimCondition
) This claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the claim will always be added to the issued token.
type: com.airlock.iam.oauth2.application.configuration.openid.claims.OpenIDConnectTypedBirthdateStandardClaimConfig
id: OpenIDConnectTypedBirthdateStandardClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
contextDataField:
OIDC Birthdate Standard Claim (String)
The "birthdate" claim that will be parsed from a string context data field.
This plugin can be used for untyped string context data item (legacy). For typed date context data fields, the OIDC Birthdate Standard Claim (Date) plugin should be used
contextDataField
) dateFormat
) claimCondition
) This claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the claim will always be added to the issued token.
type: com.airlock.iam.oauth2.application.configuration.openid.claims.OpenIDConnectStringBirthdateStandardClaimConfig
id: OpenIDConnectStringBirthdateStandardClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
contextDataField:
dateFormat:
OIDC Discovery Actor Token Validation
Actor token validation based on OpenID Connect discovery.
Requires an actor token to be present in the token exchange request, and checks the signature using the issuer's OIDC endpoints. Tokens are expected to have at least the following claims: iss, sub, exp. The token must not be expired.
allowedTokenIssuers
) httpClient
) cacheRefreshTimeInMinutes
) The JWKS Cache is reloaded as needed. In particular:
- if the Cache Refresh Time is exceeded
- if a key is not yet known
- if the verification of a signature with a previously known key fails
If the data cannot be refreshed because of an error, the previous data will be used.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2OIDCDiscoveryActorTokenValidationConfig
id: OAuth2OIDCDiscoveryActorTokenValidationConfig-xxxxxx
displayName:
comment:
properties:
allowedTokenIssuers:
cacheRefreshTimeInMinutes: 2880
httpClient:
OIDC Discovery Endpoint
issuerValidationMode
) Defines how IAM should behave when a mismatch is detected at runtime between the configured issuer ID and the front-facing URL of the request to this endpoint.
Available options:
- Ignore: Ignore a mismatch and respond with metadata
- Log Only: Log a warning and respond with metadata when there is a mismatch
- Fail: Respond with a server error when there is a mismatch
type: com.airlock.iam.oauth2.application.configuration.openid.OpenIdConnectDiscoveryEndpointConfig
id: OpenIdConnectDiscoveryEndpointConfig-xxxxxx
displayName:
comment:
properties:
issuerValidationMode: IGNORE
OIDC Discovery Flow Client
The information from the discovery and JWKs requests will be lazy loaded and then cached for the configured time (see property 'Cache Refresh Time [minutes]').
The settings define the OIDC handshake and can be referenced in flows through the provider id. When the OpenID Connect authorization was successful, the OAuth 2.0 Access Token and OpenID Connect ID Token is stored in the user session and can be used by the plugin OAuth 2.0 Tokens Map in the ID Propagation to provide the tokens to the backends.httpClient
) discoveryEndpointURL
) cacheRefreshTimeInMinutes
) If the data cannot be refreshed because of an error or incompatibility, the previous data will be used.
The JWKS Cache is reloaded as needed. In particular:
- if the Cache Refresh Time is exceeded
- if a key is not yet known
- if the verification of a signature with a previously known key fails
signatureValidator
) - HMAC based signatures (HS256, HS384, HS512) will be validated using the client secret.
- Asymmetric key based signatures (RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES256K, ES384, ES512) will be validated using the matching public key from the JWKs URL. The JWKs URL included in the discovery data is used.
tokenEndpointAuthentication
) - client_secret_basic
- client_secret_post
For security reasons client authentication must always be used.
callEndSessionEndpoint
) The end session endpoint is not called if not defined by the discovery endpoint, regardless of this property.
preferPushedAuthorizationRequests
) Configures whether the client should enable Pushed Authorization Requests (PAR; RFC 9126) extension if the OIDC Authorization Server supports it as an optional extension.
Note: This property is disregarded if the discovery document has the option require_pushed_authorization_requests
set to true
(PAR is always used if that flag is enabled).
usePkceIfOffered
) Configures whether the client should enable PKCE if it is offered by the OIDC Authorization Server.
Only S256 is allowed as the challenge method. If this setting is active and PKCE is offered without S256 as challenge method, the flow will fail.
scopesToRequest
) Scopes may only contain the following characters: 0-9, A-Z, a-z, !, #, $, %, &, ', (, ), *, +, ',', -, ., /, :, ;, <, >, =, ?, @, [, ], ^, _, `, {, }, |, ~
claimsToRequest
) If the client wants to validate claims (e.g. returned in the ID Token), "Additional Claim Validators" can be configured. Note that the acr claim is validated separately. Refer to the property description of "Validate ACR Claim".
acrValuesClaim
) If the client wants to enforce a certain acr (e.g. to enforce strong authentication), "Additional Claim Validators" can be configured to validate if the requested acr is contained in the ID Token. Otherwise the authorization fails.
includeNonce
) includeLanguageParameter
) maxAuthenticationAge
) prompt
) Available options:
Note: If the setting does not match the authorization server policy the authorization process may fail. For example, if user interaction is suppressed but login is required.
customAuthorizationRequestParameters
) login_hint
or display
as well as non-standard parameters.
Note: If a parameter is set both using the standard functionality and custom authorization request parameter, the standard parameter will take precedence.
customIssuerClaim
) audienceClaimValidationMethod
) Options:
- STANDARD: Standard audience claim validation as defined in the OpenID Connect Core specification.
- REDIRECT_URL: Compatibility option. The audience claim must be a valid URL and the host must match the host of the redirect URL used by Airlock IAM.
- CUSTOM: Compatibility option. The audience claim must exactly match a custom value supplied by 'Custom Audience Claim'.
customAudienceClaim
) enableAcrValidation
) Validation fails if no acr claim is present or the contained value does not match one of the requested acr values.
Validation succeeds if no acr values are requested or the value of the acr claim in the ID Token matches one of the requested acr values.
Disable to not validate the acr claim. In addition, it is possible to define custom acr validation using "Additional Claim Validators".
additionalClaimValidators
) If any of the validators fail, the ID Token is rejected and authorization fails.
idTokenResources
) postLogoutRedirectUrl
) It is recommended to define this property to ensure a seamless application flow. If not configured, the AS defines how to respond to the logout request.
providerId
) clientRedirectURI
) Defines the redirect URI (redirect_uri) parameter value to be included in OAuth 2.0 requests. The authorization response will then be sent to this URI by the authorization server (AS) or OpenID Provider (OP).
For redirects to the default IAM Loginapp UI use the "OAuth 2.0 Default UI Client Redirect URI".
resourceRequests
) Resource requests that will be executed to determine the identity of the user on the provider.
An OAuth 2.0 credential containing data of these resources is instantiated. This credential can then be used by plugins such as OAuth 2.0 Credential Roles Provider and OAuth 2.0 Credential Context Data Map to provide the data from the Authorization Server to the ID Propagation. This enables the ability to propagate the data to the backends.accountLinkingSelfService
) If enabled, this provider is available in the account linking self-service.
Users can link their IAM account with this provider to have an alternative authentication method.The account link management is available for authenticated users under the Loginapp URL: <loginapp-uri>/ui/app/protected/account-links
missingAccountLinkRedFlag
) If configured, the flow will raise the configured red flag and continue in case no user could be identified using an account link.
This red flag can then be used by a following subflow to:- be triggered (by using Account Linking Required Red Flag Condition as condition for the subflow)
- identify the local user with authentication steps
- link the identified user to the provider account and take down the red flag (by using Missing Account Link Step as step in the subflow)
clientId
) Only alphanumeric characters and '-_.' are allowed.
clientSecret
) accessTokenRequestMethod
) loggingSettings
) enableAccountLinking
) - Users using the self-service
- The automated registration
- Auto-link feature
autoLinkExistingUsersContextDataField
) To be able to match the context data value, it is required to add an 'OAuth 2.0 Remote Context Data Resource' with a 'Local Context Data Key' equal to this value to the resource mappings and have a context data column entry equal to this value in the Loginapp's user persister.
If this feature is used in combination with 'Automated Account Registration', no accounts will be registered that have been auto-linked.
Security Warning: For security reasons this should always be a context data field that is globally unique (e.g. email or phone number) and was previously verified by the IAM registration process (channel verification) and the provider's registration process. If this is not guaranteed, an attacker may be able to use this feature to log into a victim's IAM account.
accountRegistrationConfig
) The user must always confirm the account registration.
If this feature is used in combination with 'Auto-link IAM Account Based on Context Data Field', no accounts will be registered that have been auto-linked.
Security Warning: For automated account registration, the provider's data is used without additional validation. In particular:
- Identity verification for mTAN numbers and/or email addresses is currently not supported.
- Data validation (e.g. using regular expressions) is currently not supported.
- The provider's data that is used to create the account is not displayed to the user and the user is not asked to confirm the data, e.g. using transaction approval.
type: com.airlock.iam.oauth2.application.configuration.OpenIDConnectDiscoverySsoFlowClientSettings
id: OpenIDConnectDiscoverySsoFlowClientSettings-xxxxxx
displayName:
comment:
properties:
accessTokenRequestMethod: POST
accountLinkingSelfService:
accountRegistrationConfig:
acrValuesClaim:
additionalClaimValidators:
audienceClaimValidationMethod: STANDARD
autoLinkExistingUsersContextDataField:
cacheRefreshTimeInMinutes: 240
callEndSessionEndpoint: false
claimsToRequest:
clientId:
clientRedirectURI:
clientSecret:
customAudienceClaim:
customAuthorizationRequestParameters:
customIssuerClaim:
discoveryEndpointURL:
enableAccountLinking: false
enableAcrValidation: true
httpClient:
idTokenResources:
includeLanguageParameter: false
includeNonce: true
loggingSettings:
maxAuthenticationAge: 0
missingAccountLinkRedFlag:
postLogoutRedirectUrl:
preferPushedAuthorizationRequests: true
prompt:
providerId:
resourceRequests:
scopesToRequest:
signatureValidator:
tokenEndpointAuthentication:
usePkceIfOffered: true
OIDC Discovery Subject Token Validation
Subject token validation based on OpenID Connect discovery.
The subject token "iss" claim will be checked against the list of allowed token issuers and used to determine the OIDC discovery endpoint (see the OIDC discovery specifications). The JWKS keys obtained through OIDC discovery at that URL will then be used for the subject token signature validation.
allowedTokenIssuers
) httpClient
) cacheRefreshTimeInMinutes
) The JWKS Cache is reloaded as needed. In particular:
- if the Cache Refresh Time (as configured with this property) is exceeded
- if a key is not yet known
- if the verification of a signature with a previously known key fails
If the data cannot be refreshed because of an error, the previous data will be used.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.OAuth2OIDCDiscoverySubjectTokenValidationConfig
id: OAuth2OIDCDiscoverySubjectTokenValidationConfig-xxxxxx
displayName:
comment:
properties:
allowedTokenIssuers:
cacheRefreshTimeInMinutes: 2880
httpClient:
OIDC Email Standard Claim
contextDataField
) claimCondition
) This claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the claim will always be added to the issued token.
type: com.airlock.iam.oauth2.application.configuration.openid.claims.OpenIDConnectEmailStandardClaimConfig
id: OpenIDConnectEmailStandardClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
contextDataField:
OIDC Family Name Standard Claim
contextDataField
) claimCondition
) This claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the claim will always be added to the issued token.
type: com.airlock.iam.oauth2.application.configuration.openid.claims.OpenIDConnectFamilyNameStandardClaimConfig
id: OpenIDConnectFamilyNameStandardClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
contextDataField:
OIDC Flow Client
httpClient
) tokenEndpointAuthentication
) tokenEndpointURL
) authorizationEndpointURL
) pushedAuthorizationRequestEndpointURL
) pkceChallengeMethod
) signatureValidator
) endSessionEndpoint
) Note that the AS must support this feature.
scopesToRequest
) Scopes may only contain the following characters: 0-9, A-Z, a-z, !, #, $, %, &, ', (, ), *, +, ',', -, ., /, :, ;, <, >, =, ?, @, [, ], ^, _, `, {, }, |, ~
claimsToRequest
) If the client wants to validate claims (e.g. returned in the ID Token), "Additional Claim Validators" can be configured. Note that the acr claim is validated separately. Refer to the property description of "Validate ACR Claim".
acrValuesClaim
) If the client wants to enforce a certain acr (e.g. to enforce strong authentication), "Additional Claim Validators" can be configured to validate if the requested acr is contained in the ID Token. Otherwise the authorization fails.
includeNonce
) includeLanguageParameter
) maxAuthenticationAge
) prompt
) Available options:
Note: If the setting does not match the authorization server policy the authorization process may fail. For example, if user interaction is suppressed but login is required.
customAuthorizationRequestParameters
) login_hint
or display
as well as non-standard parameters.
Note: If a parameter is set both using the standard functionality and custom authorization request parameter, the standard parameter will take precedence.
customIssuerClaim
) audienceClaimValidationMethod
) Options:
- STANDARD: Standard audience claim validation as defined in the OpenID Connect Core specification.
- REDIRECT_URL: Compatibility option. The audience claim must be a valid URL and the host must match the host of the redirect URL used by Airlock IAM.
- CUSTOM: Compatibility option. The audience claim must exactly match a custom value supplied by 'Custom Audience Claim'.
customAudienceClaim
) enableAcrValidation
) Validation fails if no acr claim is present or the contained value does not match one of the requested acr values.
Validation succeeds if no acr values are requested or the value of the acr claim in the ID Token matches one of the requested acr values.
Disable to not validate the acr claim. In addition, it is possible to define custom acr validation using "Additional Claim Validators".
additionalClaimValidators
) If any of the validators fail, the ID Token is rejected and authorization fails.
idTokenResources
) postLogoutRedirectUrl
) It is recommended to define this property to ensure a seamless application flow. If not configured, the AS defines how to respond to the logout request.
providerId
) clientRedirectURI
) Defines the redirect URI (redirect_uri) parameter value to be included in OAuth 2.0 requests. The authorization response will then be sent to this URI by the authorization server (AS) or OpenID Provider (OP).
For redirects to the default IAM Loginapp UI use the "OAuth 2.0 Default UI Client Redirect URI".
resourceRequests
) Resource requests that will be executed to determine the identity of the user on the provider.
An OAuth 2.0 credential containing data of these resources is instantiated. This credential can then be used by plugins such as OAuth 2.0 Credential Roles Provider and OAuth 2.0 Credential Context Data Map to provide the data from the Authorization Server to the ID Propagation. This enables the ability to propagate the data to the backends.accountLinkingSelfService
) If enabled, this provider is available in the account linking self-service.
Users can link their IAM account with this provider to have an alternative authentication method.The account link management is available for authenticated users under the Loginapp URL: <loginapp-uri>/ui/app/protected/account-links
missingAccountLinkRedFlag
) If configured, the flow will raise the configured red flag and continue in case no user could be identified using an account link.
This red flag can then be used by a following subflow to:- be triggered (by using Account Linking Required Red Flag Condition as condition for the subflow)
- identify the local user with authentication steps
- link the identified user to the provider account and take down the red flag (by using Missing Account Link Step as step in the subflow)
clientId
) Only alphanumeric characters and '-_.' are allowed.
clientSecret
) accessTokenRequestMethod
) loggingSettings
) enableAccountLinking
) - Users using the self-service
- The automated registration
- Auto-link feature
autoLinkExistingUsersContextDataField
) To be able to match the context data value, it is required to add an 'OAuth 2.0 Remote Context Data Resource' with a 'Local Context Data Key' equal to this value to the resource mappings and have a context data column entry equal to this value in the Loginapp's user persister.
If this feature is used in combination with 'Automated Account Registration', no accounts will be registered that have been auto-linked.
Security Warning: For security reasons this should always be a context data field that is globally unique (e.g. email or phone number) and was previously verified by the IAM registration process (channel verification) and the provider's registration process. If this is not guaranteed, an attacker may be able to use this feature to log into a victim's IAM account.
accountRegistrationConfig
) The user must always confirm the account registration.
If this feature is used in combination with 'Auto-link IAM Account Based on Context Data Field', no accounts will be registered that have been auto-linked.
Security Warning: For automated account registration, the provider's data is used without additional validation. In particular:
- Identity verification for mTAN numbers and/or email addresses is currently not supported.
- Data validation (e.g. using regular expressions) is currently not supported.
- The provider's data that is used to create the account is not displayed to the user and the user is not asked to confirm the data, e.g. using transaction approval.
type: com.airlock.iam.oauth2.application.configuration.OpenIDConnectSsoFlowClientSettings
id: OpenIDConnectSsoFlowClientSettings-xxxxxx
displayName:
comment:
properties:
accessTokenRequestMethod: POST
accountLinkingSelfService:
accountRegistrationConfig:
acrValuesClaim:
additionalClaimValidators:
audienceClaimValidationMethod: STANDARD
authorizationEndpointURL:
autoLinkExistingUsersContextDataField:
claimsToRequest:
clientId:
clientRedirectURI:
clientSecret:
customAudienceClaim:
customAuthorizationRequestParameters:
customIssuerClaim:
enableAccountLinking: false
enableAcrValidation: true
endSessionEndpoint:
httpClient:
idTokenResources:
includeLanguageParameter: false
includeNonce: true
loggingSettings:
maxAuthenticationAge: 0
missingAccountLinkRedFlag:
pkceChallengeMethod: S256
postLogoutRedirectUrl:
prompt:
providerId:
pushedAuthorizationRequestEndpointURL:
resourceRequests:
scopesToRequest:
signatureValidator:
tokenEndpointAuthentication:
tokenEndpointURL:
OIDC Flow Condition To ACR Value Mapping
flowCondition
) acrValue
)
type: com.airlock.iam.oauth2.application.configuration.OpenIdConnectFlowConditionToAcrMappingConfig
id: OpenIdConnectFlowConditionToAcrMappingConfig-xxxxxx
displayName:
comment:
properties:
acrValue:
flowCondition:
OIDC Given Name Standard Claim
contextDataField
) claimCondition
) This claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the claim will always be added to the issued token.
type: com.airlock.iam.oauth2.application.configuration.openid.claims.OpenIDConnectGivenNameStandardClaimConfig
id: OpenIDConnectGivenNameStandardClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
contextDataField:
OIDC HS256 Signature Validator
staticKey
)
type: com.airlock.iam.oauth2.application.configuration.client.OpenIDConnectHS256SignatureValidator
id: OpenIDConnectHS256SignatureValidator-xxxxxx
displayName:
comment:
properties:
staticKey:
OIDC ID Token
claims
) acrClaim
) acr
" value for OpenID Connect handshakes using the flow authentication. signer
)
type: com.airlock.iam.login.app.misc.configuration.oauth.as.oauth2.OpenIdConnectIdTokenConfig
id: OpenIdConnectIdTokenConfig-xxxxxx
displayName:
comment:
properties:
acrClaim:
claims:
signer:
OIDC ID Token Claims
Configuration plugin for the OpenID Connect ID Token Claims.
The 'iss' (issuer) claim is always filled from the issuer configured in the top level configuration.
customClaims
) List of custom claims added to the OpenID Connect ID Token as additional claims.
Multiple claims with the same name can be configured if each has a claim condition which ensures that only one of them will be included at runtime.
The following claims are automatically set by Airlock IAM and therefore will be ignored if defined as custom claim.- auth_time
- nonce
- acr
Note: When "Persist Claims" is disabled, custom claims are collected when the ID Token is requested by an OpenID Connect client and not when the ID Token is issued. Therefore the values of the custom claims may change between issue and request time.
distributedClaims
) Distributed Claims to add to the ID Token.
These claims allow providing a URL to a 3rd party claims provider in the response where additional claims may be obtained.
type: com.airlock.iam.login.app.application.configuration.oauth.as.openid.OpenIDConnectClaimsConfiguration
id: OpenIDConnectClaimsConfiguration-xxxxxx
displayName:
comment:
properties:
customClaims:
distributedClaims:
OIDC ID Token HMAC
Notice that the client secret must have a minimum length depending on the selected algorithm (see property description).
algorithm
) MAC based signature algorithm to use.
Important: The ID Token is signed using the client secret. Therefore, the client must have registered such a secret and it must be long enough for the selected algorithm:
- HS256: 32 characters
- HS384: 48 characters
- HS512: 64 characters
type: com.airlock.iam.oauth2.application.configuration.openid.signature.OpenIDConnectIDTokenMACSignatureSigner
id: OpenIDConnectIDTokenMACSignatureSigner-xxxxxx
displayName:
comment:
properties:
algorithm: HS256
OIDC ID Token No Signature
Security Warning: ID tokens should always be signed. Do not use this plugin unless the client is unable to verify the signature.
type: com.airlock.iam.oauth2.application.configuration.openid.signature.OpenIDConnectIDTokenNoSignatureSigner
id: OpenIDConnectIDTokenNoSignatureSigner-xxxxxx
displayName:
comment:
properties:
OIDC ID Token Private Key Signature
algorithm
) keystoreFile
) keystorePassword
) signingKeyAlias
) signingKeyPassword
)
type: com.airlock.iam.oauth2.application.configuration.openid.signature.OpenIDConnectIDTokenPrivateKeySignatureSigner
id: OpenIDConnectIDTokenPrivateKeySignatureSigner-xxxxxx
displayName:
comment:
properties:
algorithm: RS256
keystoreFile:
keystorePassword:
signingKeyAlias:
signingKeyPassword:
OIDC Name Standard Claim
format
) claimCondition
) This claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the claim will always be added to the issued token.
type: com.airlock.iam.oauth2.application.configuration.openid.claims.OpenIDConnectNameStandardClaimConfig
id: OpenIDConnectNameStandardClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
format:
OIDC No Post Logout Redirect URI
Does not include a post logout redirect URI back to the SPA in a RP-initiated logout.
Possible further user agent redirects are handled by the AS.
type: com.airlock.iam.oauth2.application.configuration.client.OAuth2NoPostLogoutRedirectUriConfig
id: OAuth2NoPostLogoutRedirectUriConfig-xxxxxx
displayName:
comment:
properties:
OIDC No Signature Validator
type: com.airlock.iam.oauth2.application.configuration.client.OpenIDConnectNoSignatureValidator
id: OpenIDConnectNoSignatureValidator-xxxxxx
displayName:
comment:
properties:
OIDC Phone Number Standard Claim
contextDataField
) regionCode
) claimCondition
) This claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the claim will always be added to the issued token.
type: com.airlock.iam.oauth2.application.configuration.openid.claims.OpenIDConnectPhoneNumberStandardClaimConfig
id: OpenIDConnectPhoneNumberStandardClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
contextDataField:
regionCode:
OIDC Private Key JWT Authentication
The subject and issuer claim in the JWT must be equal to the identifier of a client (client_id). The client must have a public key registered in order to verify the signature of the JWT.
Note: JWTs are persisted, the 'jti' claim must be unique during the lifetime of a JWT (i.e. until it expires). If a JWT with a previously seen 'jti' claim is sent, authentication fails. Automatic removal of persisted JWTs (after expiry) can be configured in an OAuth 2.0 Clean-up Task.
sqlDataSource
) logQueries
) tenantId
) Identity added to the database records to distinguish between different tenants.
If left empty, 'no_tenant' is used as the effective value for tenant ID.
type: com.airlock.iam.oauth2.application.configuration.clientauthentication.OpenIdConnectPrivateKeyJwtAuthenticationConfig
id: OpenIdConnectPrivateKeyJwtAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sqlDataSource:
tenantId:
OIDC Private Key JWT Client Authentication
private_key_jwt
client authentication as specified by the OpenID Connect Core Specification. customAudience
) aud
) of the JWT. According to the OpenID Connect Core Specification, the audience SHOULD be the URL of the authorization server's token endpoint. If not configured, the authorization server's token endpoint URL is used as "aud" claim. validityDuration
) exp
of the JWT. validNotBeforeSkew
) nbf
claim value in the JWT, the number of seconds configured in this property are subtracted from the JWT issue time. The motivation to set a time in the past is to avoid clock synchronization problems with the authorization server. includeKid
) If enabled the KID of the public key used to sign a JWT is added to the JWT header. Consumers of the JWT can use the KID to identify the public key that is verifying the signature.
The KID is ignored by some servers but is usually necessary when the client has multiple keys (or wants to rotate them) or when the authorization server needs to look up the corresponding public key on the client's JWKS endpoint.
This property's testlet displays the KID that is included in the JWT header if the property is enabled.
algorithm
) keystoreFile
) keystorePassword
) signingKeyAlias
) signingKeyPassword
)
type: com.airlock.iam.oauth2.application.configuration.signature.OpenIDConnectPrivateKeyJwtClientAuthenticationConfig
id: OpenIDConnectPrivateKeyJwtClientAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
algorithm: RS256
customAudience:
includeKid: true
keystoreFile:
keystorePassword:
signingKeyAlias:
signingKeyPassword:
validNotBeforeSkew: 5
validityDuration: 60
OIDC prompt=none Condition
type: com.airlock.iam.oauth2.application.configuration.authorization.OpenIdConnectPromptNoneConditionConfig
id: OpenIdConnectPromptNoneConditionConfig-xxxxxx
displayName:
comment:
properties:
OIDC RS256 Signature Validator
remoteKeyLocation
) The remote public key should be presented according to the 'JSON Web Key' specification otherwise the parsing may fail.
httpClient
)
type: com.airlock.iam.oauth2.application.configuration.client.OpenIDConnectRS256SignatureValidator
id: OpenIDConnectRS256SignatureValidator-xxxxxx
displayName:
comment:
properties:
httpClient:
remoteKeyLocation:
OIDC Session Management
sameSitePolicy
) Specifies the 'SameSite' cookie attribute of the OP User Agent State cookie.
The correct choice of this property is essential for the correct operation of this feature:
- For same-domain scenarios, 'Lax' should be chosen. In this case, the cookie will only be accessible when the top-level page (which includes the OP iframe) is in the same domain as the OP iframe)
- For cross-domain scenarios, 'None' must be chosen. In this case, 'Secure' is also automatically appended because modern browsers only accept those cookies on a secure connection
- To rely on browser default behavior (not recommended), 'No SameSite Attribute' can be chosen, resulting in cookies usually interpreted as 'Lax' depending on the browser version.
debug
)
type: com.airlock.iam.oauth2.application.configuration.OpenIDConnectSessionManagementConfig
id: OpenIDConnectSessionManagementConfig-xxxxxx
displayName:
comment:
properties:
debug: false
sameSitePolicy: LAX
OIDC SSO Ticket Login Hint Extractor
type: com.airlock.iam.oauth2.application.configuration.sso.OpenIdConnectSsoTicketLoginHintExtractorConfig
id: OpenIdConnectSsoTicketLoginHintExtractorConfig-xxxxxx
displayName:
comment:
properties:
OIDC SSO Ticket Login Hint Flow Settings
login_hint
parameter will be interpreted as SSO ticket. The SSO ticket is stored in the session and can then be used by a "SSO Ticket Authentication Step" using a "OIDC SSO Ticket Login Hint Extractor" in the authentication flow.
type: com.airlock.iam.oauth2.application.configuration.OpenIdConnectSsoTicketLoginHintFlowConfig
id: OpenIdConnectSsoTicketLoginHintFlowConfig-xxxxxx
displayName:
comment:
properties:
OIDC UserInfo Endpoint
OpenID Connect UserInfo Endpoint according to the OpenID Connect Specification.
The endpoint is available under /<loginapp-uri>/rest/oauth2/authorization-servers/<as-identifier>/userinfo
The subject claim "sub" will contain the username and always be present in UserInfo Responses. It is not possible to overwrite the subject claim.
standardClaims
) customClaims
) Custom claims to add to the UserInfo Response.
Multiple claims with the same name can be configured if each has a claim condition which ensures that only one of them will be included at runtime. Configuring a custom claim that results in the same claim name as a standard claim will result in a runtime error.
distributedClaims
) Distributed Claims to add to the UserInfo Response.
These claims allow providing a URL to a 3rd party claims provider in the response where additional claims may be obtained.
type: com.airlock.iam.login.app.misc.configuration.oauth.as.oauth2.OpenIDConnectUserInfoEndpointConfig
id: OpenIDConnectUserInfoEndpointConfig-xxxxxx
displayName:
comment:
properties:
customClaims:
distributedClaims:
standardClaims:
OIDC Username Login Hint Flow Settings
login_hint
parameter and provides it as additional attribute usernameHint
in the authentication flow response if valid. When using the Loginapp UI, a valid login_hint
will be prefilled as the username on the password page. usernamePattern
) login_hint
parameter (username) is validated against this pattern. If the username matches, it is reflected to the client as additional attribute usernameHint
in the flow response. Otherwise, the login_hint
is ignored.
type: com.airlock.iam.oauth2.application.configuration.OpenIdConnectUsernameLoginHintFlowConfig
id: OpenIdConnectUsernameLoginHintFlowConfig-xxxxxx
displayName:
comment:
properties:
usernamePattern:
Old Phone Number Provider
type: com.airlock.iam.common.application.configuration.sms.OldPhoneNumberProviderConfig
id: OldPhoneNumberProviderConfig-xxxxxx
displayName:
comment:
properties:
On Behalf Cookie Authentee Extractor
staticRoles
) contextDataMap
)
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.OnBehalfCookieAuthenteeExtractor
id: OnBehalfCookieAuthenteeExtractor-xxxxxx
displayName:
comment:
properties:
contextDataMap:
staticRoles:
On Behalf Login Identity Propagation Config
This identity propagator performs a login 'on behalf' of the user at a backend web application. It performs the necessary login steps to obtain an authenticated session from login into the backend application. Then it attaches the session cookie to the user's authenticated session, thus enabling access to the backend application.
The login process is configured as a sequence of on behalf login steps. Each on behalf login step performs a HTTP operation and can store newly gathered information in an information storage for the next step.
For example: A first on behalf login step executes a HTTP GET request on the web application's login page and extracts the CSRF protection token. A next on behalf login step submits the login form with username, password and the extracted CSRF token.
On behalf logins are not robust against changes of the web application. Therefore, this identity propagation mechanism is only recommended for legacy application that do not accept another way of identity propagation.
httpClient
) onBehalfLoginSteps
) cookieMappings
) forwardToLastRedirectLocation
) Location
header in the response of the last "On Behalf Login Step", under the conditions that
- a forward location is present in the last response from the backend and
- the forward location matches at least one regex in the "Allowed Forward Location" patterns.
allowedForwardLocations
) This setting is only relevant if "Forward User To Last Redirect Location" is enabled. In that case the forward location must match at least one regex in order to be accepted. If the forward location does not match any regex, the default forward location is used.
- The forward location will always be an absolute URL, relative URLs are not supported.
- The forward location is from the on behalf HTTP clients perspective, which might be different from the users perspective, if Airlock IAM is behind an Airlock Gateway. This is because the Airlock Gateway may rewrite the forward location.
- URLs with any 'User Information' part in front of the host name (for example "https://user@domain.com/") are never accepted.
valueProviders
) condition
)
type: com.airlock.iam.login.application.configuration.idpropagation.OnBehalfLoginIdentityPropagationConfig
id: OnBehalfLoginIdentityPropagationConfig-xxxxxx
displayName:
comment:
properties:
allowedForwardLocations: [^/.*]
condition:
cookieMappings:
forwardToLastRedirectLocation: false
httpClient:
onBehalfLoginSteps:
valueProviders:
On Behalf Login Identity Propagator
The login process is configured as a sequence of on behalf login steps. Each on behalf login step performs a HTTP operation and can store newly gathered information in an information storage for the next step.
For example: A first on behalf login step executes a HTTP GET request on the web application's login page and extracts the CSRF protection token. A next on behalf login step submits the login form with username, password and the extracted CSRF token.
Note that on behalf logins are not robust against changes of the web application. Therefore we recommend this identity propagation mechanism only for legacy application that do not provide another way for identity propagation.
httpClientConfig
) onBehalfLoginSteps
) cookies
) forwardUserToLastRedirectLocation
) Location
header in the response of the last onBehalfLoginStep.Note 1: The URL must match at least one regex in the allowedForwardLocationPatterns (see below).
Note 2: If set, the forward location sent in the response of the last onBehalfLoginStep is not followed.
Note 3: If set and the response to the last onBehalfLoginStep does not contain a Location header, the user is forwarded to the default forward location.
allowedForwardLocationPatterns
) This setting is only relevant if
forwardUserToLastRedirectLocation
is set to true. In that case the forward location must match at least one regex in order to be accepted. If the forward location does not match any regex, the default forward location is used.
- Notice that the forward location will always be an absolute URL, relative URLs are not supported.
- Notice that the forward location is from the on behalf HTTP clients perspective, which might be different from the users perspective, if IAM is behind the Airlock Gateway (WAF). This is because the Airlock Gateway may rewrite the forward location.
- Note that URLs with any 'User Information' part in front of the host name (for example "https://user@domain.com/") are never accepted.
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.OnBehalfLoginIdentityPropagator
id: OnBehalfLoginIdentityPropagator-xxxxxx
displayName:
comment:
properties:
allowedForwardLocationPatterns:
cookies:
forwardUserToLastRedirectLocation: false
httpClientConfig:
onBehalfLoginSteps:
One-Shot Authentication Settings
Configures the end-point used to authenticated HTTP requests with the Airlock Gateway (WAF)'s one-shot flow. It can be used, for example, to authenticate stateless REST calls.
The HTTP header of non-authenticated request are sent to this IAM end-point by the Airlock Gateway.
Make sure to use ".../login-oneshot/" as denied access URL on the corresponding gateway mappings.
This end-point may roughly do the following with the requests:
- Extract a credential from the HTTP header (e.g. a bearer token or a cookie).
- Call an Authenticator plugin with the credential (e.g. verify the bearer token).
- Authenticate the request on the Airlock Gateway and append ID propagation information for the target application/service.
- Respond as expected by the HTTP client in all cases(e.g. use expected HTTP response code).
All settings are configured in the list of target applications/services (see properties).
The target application/service is selected by the original request by the HTTP client (provided to IAM in various environment cookies).
In case no target application/service matches, the default target application/service is used.
defaultTargetApplication
) targetApplications
) List of target applications/services:
One of the target applications/services is selected by matching the "URL Pattern" against URL of the original HTTP request sent by the client (provided to IAM by several environment cookies).
They are matched in the order they are declared and the first matching is used. In case no one matches, the default target application/service is used.
userSpecificRoleTimeouts
)
type: com.airlock.iam.login.app.misc.configuration.oneshot.OneShotAuthenticationConfig
id: OneShotAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
defaultTargetApplication:
targetApplications:
userSpecificRoleTimeouts:
Opaque Access Token Format
type: com.airlock.iam.oauth2.application.configuration.token.OpaqueAccessTokenFormatConfig
id: OpaqueAccessTokenFormatConfig-xxxxxx
displayName:
comment:
properties:
Option UI Element
id
) label
) value
) disabled
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableUiOptionConfig
id: ConfigurableUiOptionConfig-xxxxxx
displayName:
comment:
properties:
disabled: false
id:
label:
value:
Or Claim Condition Config
conditions
)
type: com.airlock.iam.oauth2.application.configuration.claims.conditions.OrClaimConditionConfig
id: OrClaimConditionConfig-xxxxxx
displayName:
comment:
properties:
conditions:
Order Airlock 2FA Device Activation Letters
An order indicates the intention to later create an activation letter for the given user to allow for example the registration of the first Airlock 2FA device.
Compared to "Create Airlock 2FA Device Activation Letters", this plugin does not generate any activation letter. All orders can be batch processed by configuring an "Airlock 2FA Activation Letter Order Task" in the service container which will create the necessary activation letters.
autoOrder
)
type: com.airlock.iam.admin.application.configuration.airlock2fa.Airlock2FAOrderActivationLettersConfig
id: Airlock2FAOrderActivationLettersConfig-xxxxxx
displayName:
comment:
properties:
autoOrder: false
OTP Check Access Challenge Rule
pattern
) authenticationResult
)
type: com.airlock.iam.authentication.application.configuration.radiusotp.OtpCheckAccessChallengeRule
id: OtpCheckAccessChallengeRule-xxxxxx
displayName:
comment:
properties:
authenticationResult:
pattern:
OTP Check Access Reject Rule
pattern
) authenticationResult
)
type: com.airlock.iam.authentication.application.configuration.radiusotp.OtpCheckAccessRejectRule
id: OtpCheckAccessRejectRule-xxxxxx
displayName:
comment:
properties:
authenticationResult:
pattern:
OTP Check via RADIUS Step
Flow step to check an OTP by calling a RADIUS server (e.g. SecurID).
Note that the first request sent to the RADIUS server already contains the token code. It is therefore limited to RADIUS servers accepting the OTP with the first request. OTP authentication schemes that first send the OTP to the user (SMS, Email) are not supported.
The plugin usually works with the default configuration for basic use-cases. To interpret vendor-specific features like "new PIN required", corresponding rules have to be configured.
radiusServers
) logRadiusAttributes
) This is useful during integration and for debugging but it is generally not suitable for productive systems.
accessRejectRules
) Defines a list of rules (processed in order of definition) that define how to map RADIUS access reject response's reply messages to authentication results.
If no rules are defined or no rule matches, an unspecified authentication failure is used for access reject responses.accessChallengeRules
) Defines a list of rules (processed in order of definition) that define how to map RADIUS access challenge response's reply messages to authentication results.
If no rules are defined or no rule matches, an unspecified authentication failure is used for access challenge responses.reportedAuthMethod
) nasIdentifier
) The Network access server identifier (NAS Identifier) to set in all requests.
The NAS Identifier is used to notify the source of a RADIUS access request, enabling the RADIUS server to choose a policy for that request. If set, the RADIUS server does not have to rely on a set of, potentially changing, IP addresses (for example when deploying multiple Airlock IAM servers). Also, different flows may require different policies.
usernameTransformers
) Transforms the user ID to the username that is sent to the RADIUS server.
Note that not all Username Transformer plugins are useful for this purpose since here they are not used to find the user ID, but rather a user alias.
encoding
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.radiusotp.RadiusOtpAuthStepConfig
id: RadiusOtpAuthStepConfig-xxxxxx
displayName:
comment:
properties:
accessChallengeRules:
accessRejectRules:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
encoding: UTF-8
interactiveGotoTargets:
logRadiusAttributes: false
nasIdentifier:
onFailureGotos:
preCondition:
radiusServers:
reportedAuthMethod: RADIUS
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
usernameTransformers:
Parameter-based Target URI
defaultTargetUri
) queryParameterUriExtractor
) uriTransformers
)
type: com.airlock.iam.login.rest.application.configuration.ParameterBasedTargetUriConfig
id: ParameterBasedTargetUriConfig-xxxxxx
displayName:
comment:
properties:
defaultTargetUri:
queryParameterUriExtractor:
uriTransformers:
Password Authenticator
passwordSettings
) userPersister
)
type: com.airlock.iam.core.misc.impl.authen.PasswordServicePasswordAuthenticator
id: PasswordServicePasswordAuthenticator-xxxxxx
displayName:
comment:
properties:
passwordSettings:
userPersister:
Password Batch Task
Generated passwords are rendered (e.g. made a PDF file or printed) using a
userPersister
) userIterator
) deliverySecurityGapDays
) Setting this property to zero (0) disables this feature.
aggregateReport
) credentialSecretGenerator
) tokenCleanupConfigs
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.PasswordBatchTask
id: PasswordBatchTask-xxxxxx
displayName:
comment:
properties:
aggregateReport:
credentialSecretGenerator:
deliverySecurityGapDays: 0
tokenCleanupConfigs:
userIterator:
userPersister:
Password Change Self-Service Step
passwordRepository
) passwordPolicy
) oldPasswordAttempts
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
passwordAttributeKey
) The optional key under which the new password is made available in the identity propagation.
The password can be retrieved from the session using the "User Passwords Map" value map provider.
If no key is configured, the new password will not be made available in the flow attributes, and cannot be used by identity propagators.
Note: This feature will not work together with end-to-end encryption.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.PasswordChangeSelfServiceStepConfig
id: PasswordChangeSelfServiceStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: PASSWORD
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
oldPasswordAttempts:
onFailureGotos:
passwordAttributeKey:
passwordPolicy:
passwordRepository:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Password Changed
Event that is triggered by a password change.
Note: This event is not triggered by a password reset or when an administrator sets the password.
type: com.airlock.iam.login.application.configuration.event.PasswordChangedSubscribedEventConfig
id: PasswordChangedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
Password Generator Config
Configures the password generator facility on the user detail page.
The password generator configuration defines the length and alphabet of generated passwords.
If a password renderer is configured, the new password is printed on a "password letter". If not, it is displayed on the user detail page.
generator
) renderer
) If a renderer plugin is defined, the generated password is rendered using this plugin, i.e. usually printed on a letter.
If no renderer is configured, the generated password is displayed in a pop-up dialog in the Adminapp.
deleteOldPasswordLetters
) Deletes old password letters of a user from the file system when a new one is rendered. Enabling this property results in at most one rendered password letter per user.
If this property is enabled, the application must have permission to delete files from the directory.
workingDirectory
) If this property is defined, the password letters are not directly generated into the output directory (see other property) but they are generated into this working directory and are moved to the output directory once they are done.
This helps to solve problems with processes automatically reading the rendered password letters and reading password letters during the generation process. Make sure that the working directory and the output directory reside in the same file system (if not, the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
outputDirectory
) This property is not required if the renderer plugin (see separate property) does not write on the output stream (e.g. sends it somewhere else). It is required otherwise.
Note: If this property is not defined and the used renderer plugin writes on the output stream, then the result (e.g. a PDF file) is lost.
fileNamePrefix
) fileNameSuffix
)
type: com.airlock.iam.admin.application.configuration.password.PasswordGeneratorConfig
id: PasswordGeneratorConfig-xxxxxx
displayName:
comment:
properties:
deleteOldPasswordLetters: true
fileNamePrefix: pwd
fileNameSuffix:
generator:
outputDirectory:
renderer:
workingDirectory:
Password Hash Configuration
passwordHash
) encoder
)
type: com.airlock.iam.core.misc.util.password.hash.PasswordHashConfiguration
id: PasswordHashConfiguration-xxxxxx
displayName:
comment:
properties:
encoder:
passwordHash:
Password Length Policy
minRequiredLength
) maxAllowedLength
)
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyLengthCheck
id: PwdPolicyLengthCheck-xxxxxx
displayName:
comment:
properties:
maxAllowedLength: 2147483647
minRequiredLength:
Password Letter Order Step (Public Self-Service)
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.PasswordLetterOrderStepConfig
id: PasswordLetterOrderStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Password Repository Mapping
condition
) passwordRepository
)
type: com.airlock.iam.authentication.application.configuration.password.repository.PasswordRepositoryMappingConfig
id: PasswordRepositoryMappingConfig-xxxxxx
displayName:
comment:
properties:
condition:
passwordRepository:
Password Repository Mapping (Request Authentication
pattern
) caseSensitive
) passwordRepository
)
type: com.airlock.iam.common.application.configuration.credential.RequestAuthenticationPasswordRepositoryMappingConfig
id: RequestAuthenticationPasswordRepositoryMappingConfig-xxxxxx
displayName:
comment:
properties:
caseSensitive: true
passwordRepository:
pattern:
Password Reset Step
This step allows the user to set a new password.
Security note: It is important that this step is only configured after a credential check step (e.g. email OTP).
passwordRepository
) passwordPolicy
) The password policy that the new password has to fulfill.
If a UI is configured, the text resource with key 'password-reset.password.requirements' must describe the password policy requirements for the configured policy.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.PasswordResetStepConfig
id: PasswordResetStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
passwordPolicy:
passwordRepository:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Password Service HTTP Parameter
name
) value
)
type: com.airlock.iam.core.misc.impl.authen.HttpParameter
id: HttpParameter-xxxxxx
displayName:
comment:
properties:
name:
value:
Password Settings
passwordService
) Defines the password service plugin to be used for changing, resetting and checking user passwords.
This password service is used for the following:
- in the Adminapp for managing the user passwords
- in the "Password Authenticator" (typically in the RADIUS server)
- in the /<loginapp-uri>/rest/protected/my/password/change protected Loginapp REST endpoint
passwordPolicy
) Defines a password policy that must be passed when a new password is chosen (by the user or the administrator).
This password policy is used for the following:
- in the Adminapp for managing the user passwords
- in the /<loginapp-uri>/rest/public/password/policy/check public Loginapp REST endpoint
- in the RADIUS server
passwordGenerator
) mayBeSelectedAsAuthMethod
) adminMayGeneratePassword
) If enabled, the administrator may generate (and therefore see) new random passwords for the users.
Note that this settings can be overruled in the Password Credential Controller's settings (for backwards compatibility reasons).
adminMaySetPassword
) newPasswordsMustBeChanged
) newPasswordUnlocksUser
)
type: com.airlock.iam.core.misc.authen.PasswordSettings
id: PasswordSettings-xxxxxx
displayName:
comment:
properties:
adminMayGeneratePassword: false
adminMaySetPassword: false
mayBeSelectedAsAuthMethod: false
newPasswordUnlocksUser: false
newPasswordsMustBeChanged: true
passwordGenerator:
passwordPolicy:
passwordService:
Password Token Controller
passwordSettings
) autoOrderPassword
) passwordResetSelfService
) passwordGenerator
) identifier
) Identifier for the password credential. This is used as value in the authentication method field in the persistence layer. Make sure this value is the same (for password credentials) in all Airlock IAM components.
Make sure the identifier is unique among all configured token controllers.
The identifier is also used as key to translate the display name of this token controller. The key is assembled as follows: edituserpage.cred.XYZ.title
(where XYZ is the identifier).
userStore
) The user store is used to read and write password information for each user (order flag, latest password change, information used for policy enforcement, etc.). This is usually the same user store that is used to load and write user detail information.
There are two ways to "store" new passwords:
- Using a password service. This method is chosen if a password service is defined (in the Password Settings).
- Using this user store: This method is chosen if no password service is defined.
showLetterAttributes
)
type: com.airlock.iam.admin.application.configuration.password.PasswordTokenController
id: PasswordTokenController-xxxxxx
displayName:
comment:
properties:
autoOrderPassword: false
identifier: PASSWORD
passwordGenerator:
passwordResetSelfService:
passwordSettings:
showLetterAttributes: true
userStore:
Password User Item
passwordPolicy
) The password policy that the password has to fulfill.
If a UI is configured, the text resource with key registration.data.page.password.requirements must describe the password policy requirements for the configured policy.
If end-to-end encryption is enabled, no policy checks are possible (i.e. the "Null Password Policy" must be used).
required
) passwordAttributeKey
) The optional key under which this password will be available in the flow session, e.g. for identity propagation.
The value can be retrieved from the session using the "User Passwords Map" value map provider.
If no key is configured, the password will not be made available in the flow attributes, and cannot be used by identity propagators.
Important: Multiple password user items with the same value for this property might override each others passwords.
If end-to-end encryption is enabled, the plain password is not available and thus cannot be stored in the flow session.
type: com.airlock.iam.userselfreg.application.configuration.definition.PasswordDefinitionConfig
id: PasswordDefinitionConfig-xxxxxx
displayName:
comment:
properties:
passwordAttributeKey:
passwordPolicy:
required: true
Password-based Encryption
encryptionPassphrase
) CAUTION: Once this is set and the cipher has been used to encrypt data with this passphrase, the passphrase should not be changed!. Otherwise those stored data would not be recoverable.
type: com.airlock.iam.core.misc.util.crypto.PasswordBasedEncryption
id: PasswordBasedEncryption-xxxxxx
displayName:
comment:
properties:
encryptionPassphrase:
Password-only Authentication Step
passwordRepository
) policyToCheckOnLogin
) passwordChangeRedFlag
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
passwordAttributeKey
) The optional key under which this password will be available in the identity propagation.
The value can also be retrieved from the session using the "User Passwords Map" value map provider.
If no key is configured, the password cannot be used by identity propagators.
Important: Multiple Password Authentication steps or Mandatory Password Change steps which have the same value for this property might override each others passwords.
If you have configured a Mandatory Password Change step, you might consider to use the same key.
Note: This feature will not work together with end-to-end encryption.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.password.PasswordAuthenticationStepConfig
id: PasswordAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: PASSWORD
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
passwordAttributeKey:
passwordChangeRedFlag:
passwordRepository:
policyToCheckOnLogin:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Pattern Matching
translationKey
) validationPattern
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.validation.RegexValidationConfig
id: RegexValidationConfig-xxxxxx
displayName:
comment:
properties:
translationKey:
validationPattern:
Pattern-based Random String Generator
- The pattern may consist of multiple parts, where a part is either a fixed string or a random part.
- Random parts are defined by an alphabet and the number of characters.
- Characters are chosen from the alphabet with uniform distribution using a secure PRNG (random generator).
pattern
) Pattern defining how the string is generated.
Syntax:pattern = fix_part | random_part [fix_part | random_part]*
random_part = {alphabet_name:number_of_characters}
fix_part = any_string_without_'{'
Custom alphabets can be configured below; built-in alphabets are:
- "
digits
" all decimal digits (i.e. the characters 0123456790) - "
lower26
" standard alphabet with 26 lower chars (i.e. the characters abcdefghijklmnopqrstuvwxyz) - "
upper26
" standard alphabet with 26 upper chars (i.e. the characters ABCDEFGHIJKLMNOPQRSTUVWXYZ) - "
alpha52
" standard alphabet with 26 upper and 26 lower chars (i.e. the characters ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz) - "
distinct
" distinct standard signs: digits, upper and lower case letter without the hard to distinguish '0,O,1,l,I' (i.e. the characters 23456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ) - "
DISTINCT
" distinct standard uppercase signs: digits and upper case letter without the hard to distinguish '0,O,1,I' (i.e. the characters 23456789ABCDEFGHJKLMNPQRSTUVWXYZ) - "
extended
" contains most of the signs visible on a computer keyboard without the hard to distinguish '0,O,1,l,I' (i.e. the characters +-.,:;$<>()[]{}%&!?/*@#=_23456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ)
NOTE: Characters in this pattern do not pass the input filter for tokens (OTP, SMS, and alike). Choose a different pattern for tokens or relax the corresponding pattern (in the Loginapp's security settings). Characters may be blocked by a WAF deny rule.
alphabets
) passwordPolicy
) A generated string can be checked against the configured password policy. The configured Pattern must generate strings that are accepted by the policies.
If generating a string fails 10'000 times because none of the candidates fulfills the password policies, a runtime exception is thrown. To minimize the probability of such a failure during operations, 100 test strings are generated before the initialization of the plugin to verify the compatibility of the pattern with the policies. During this initial check, only 200 rejections from policies are allowed to further minimize the probability of a failure later.
checkPolicyOnInitialize
)
type: com.airlock.iam.core.misc.impl.authen.ExtendedStringGenerator
id: ExtendedStringGenerator-xxxxxx
displayName:
comment:
properties:
alphabets:
checkPolicyOnInitialize: true
passwordPolicy:
pattern: {distinct:8}
PDF Save Option
fileNameExtension
) fontsPath
) This is mandatory on unix-like operating systems and optional on Windows where the installed Windows fonts will always be included automatically. In order to reflect changes from the file system, reactivating the IAM configuration is required.
pdfA1bCompliance
) Produced PDFs shall be PDF/A-1b compliant (PDF 1.4) instead of default PDF 1.5 files.
PDF/A-1b has the objective of ensuring reliable reproduction of the visual appearance of the document.
All fonts are automatically embedded and must also be legally embeddable for unlimited, universal rendering.
Only set this value if this compliance is explicitly needed or if you need PDF 1.4 documents.
Attention: Please also specify the "Fonts Path" above and add all necessary fonts in order to generate PDF/A-1b compliant files.
type: com.airlock.iam.core.misc.renderer.saveaction.PdfSaveActionConfig
id: PdfSaveActionConfig-xxxxxx
displayName:
comment:
properties:
fileNameExtension: .pdf
fontsPath:
pdfA1bCompliance: false
Persistent Accepted SSO Tickets Repository
Repository that stores accepted SSO tickets in a database.
The tickets are stored to prevent replay attacks.
For cleaning up expired tickets, the Accepted SSO Tickets Clean-up Task has to be configured in the service container.
sqlDataSource
) logQueries
) If enabled, all SQL queries executed on this repository will be written to the module's corresponding log file. This is only effective if the log level is set to at least INFO.
tenantId
) Identity added to the database records to distinguish between different tenants.
If left empty, 'no_tenant' is used as the effective value for tenant ID.
type: com.airlock.iam.common.application.configuration.sso.PersistentAcceptedSsoTicketRepositoryConfig
id: PersistentAcceptedSsoTicketRepositoryConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sqlDataSource:
tenantId:
Persister IAK Verifier
This plugin uses a CredentialPersister plugin to read a hash value of the IAK. The hash value is checked using the configured hash function.
If the IAK is successfully verified, the hash value is cleared (null value set).
credentialPersister
) hashFunction
) NOTE: Some password hashes, such as SHA 256 Password Hash or Scrypt Password Hash, produce binary output. If one of these is used, make sure the persistence layer supports binary data in the hash field and the corresponding persistence plugins (e.g. Database User Store or Ldap Connector) are configured to treat hash values as binary values.
In case the persistence layer expects a string, encode the password hash by wrapping it with an encoder. To achieve this, use the Password Hash Configuration plugin and specify the hash function (such as Scrypt Password Hash) together with the desired encoder. We recommend using the Base64 Password Hash Encoder.
type: com.airlock.iam.core.misc.impl.authen.PersisterIakVerifier
id: PersisterIakVerifier-xxxxxx
displayName:
comment:
properties:
credentialPersister:
hashFunction:
Persister Password Service
This plugin allows the implementation of arbitrary password policies and supports password histories.
If the existing (current) password before the change is not correct, this plugin does increase the number of failed logins if "Maximum Wrong Old Passwords" is not 0.
The existing (current) password can be checked in two ways:
- Using the configured user store by comparing the stored password hash value to the recomputed hash value. This variant requires only the configuration of a hash function plugin (see property "Hash Function").
- Using a separate authenticator plugin called to verify the password. The specified authenticator plugin is called with a new authentication session and with the username and the password as credential. This variant requires the configuration of an authenticator plugin (see property "Password Check Authenticator") and a hash function plugin (see property "Hash Function").
userStore
) The capabilities and the configuration of the user store influence the capabilities of this plugin. If, for example, the user store does not load or store information about the latest password change, this plugin will not be able to use this information.
passwordValidityDays
) If a password is changed, this plugin sets the latest-password-change-timestamp and (if this property is defined) also updates the next-enforced-password-change-timestamp.
If this property is not defined, the next-enforced-password-change-timestamp is not updated.
hashFunction
) Note that the password hash function may or may not support password history checks. If the configured password hash function does not support password history checks but a policy checker requires this capability, the history check is omitted and a log warning is written.
NOTE: Some password hashes, such as SHA 256 Password Hash or Scrypt Password Hash, produce binary output. If one of these is used, make sure the persistence layer supports binary data in the hash field and the corresponding persistence plugins (e.g. Database User Store or Ldap Connector) are configured to treat hash values as binary values.
In case the persistence layer expects a string, encode the password hash by wrapping it with an encoder. To achieve this, use the Password Hash Configuration plugin and specify the hash function (such as Scrypt Password Hash) together with the desired encoder. We recommend using the Base64 Password Hash Encoder.
passwordCheckAuthenticator
) If this property is provided, the specified plugin is called with the username and password to verify the existing (current) password instead of loading the user data and comparing the password hashes (see also plugin description).
legacyHashFunctions
) If the password cannot be verified using the main "Hash Function" above, all hashes in this list are tried as well. If any hash of this list matches, the password is stored using the current main hash function (see property "Hash Function"). In this case, a potential password history is lost.
This feature allows changing the password hash function with automatic migration of all users that log in.
Notice that having a legacy hash function in this list producing the same output length as the main hash function can pose a security risk since it might be possible for an attacker to provoke a match using a weaker hash method.
checkUsingLatin1Encoding
) If enabled, passwords containing special characters stored by IAM earlier than 6.3 are still accepted. This option does not have to be activated if all passwords were set using IAM 6.3 or later or if all passwords were set via webservices or REST.
To support legacy passwords, those with special characters are additionally checked using their legacy encoding in latin1 and if matching, they are rehashed and stored using the current hash function. In this case, a potential password history is lost.
checkTruncatedPassword
) If enabled, all failed checks on passwords longer than 50 characters will lead to a second check using only the first 50 characters. If successful, the full password is stored.
Prior to IAM 7.3 the password input field on JSPs was limited to 50 characters, with overflowing characters being truncated by the browser. This limit has been removed with IAM 7.3, leading to the full password being sent to IAM. For new installations with IAM 7.3 or later, this setting should not be enabled.
maximumWrongOldPasswords
) Warning: Make sure that number of logins is not increased by the calling application, too.
Note: The number of failed logins is increased when providing a wrong password in a password change call. When only checking a wrong password, the number of failed logins is not increased.
type: com.airlock.iam.core.misc.impl.authen.PersisterPasswordService
id: PersisterPasswordService-xxxxxx
displayName:
comment:
properties:
checkTruncatedPassword: false
checkUsingLatin1Encoding: false
hashFunction:
legacyHashFunctions:
maximumWrongOldPasswords: 5
passwordCheckAuthenticator:
passwordValidityDays:
userStore:
Phone Number
translationKey
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.validation.PhoneNumberValidationConfig
id: PhoneNumberValidationConfig-xxxxxx
displayName:
comment:
properties:
translationKey:
Phone Number Validator Config
strictMode
) maximumLength
)
type: com.airlock.iam.common.application.configuration.validation.PhoneNumberValidatorConfig
id: PhoneNumberValidatorConfig-xxxxxx
displayName:
comment:
properties:
maximumLength: 30
strictMode: false
Phone Number Verification Step
User self-registration flow step that verifies the phone number of a user by sending a text message with an OTP that has to be entered correctly for the flow to continue.
Note that channel verification is the only way to ensure the uniqueness of phone numbers while at the same time not revealing already registered phone numbers (if Stealth Mode is enabled).
phoneNumberItem
) smsGateway
) otpGenerator
) messageResourceKey
) The resource key for the SMS message.
The following syntax can be used to include data in the template:
- ${TOKEN} to include the generated OTP.
- ${USERNAME} to include the name of the registering user.
- ${Now,date,format} to include the current date/time, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
- ${contextDataName} to include the value of the context data field "contextDataName". Note that only context data of type "string" can be included.
Note that non-replaced variables result in a failure and no text message is sent. Therefore, only variable names should be used that are guaranteed to be available when the phone number verification is performed.
originator
) maxFailedAttempts
) otpValidity
) otpCaseSensitive
) maxOtpResends
) resendSameOtp
) true
is less secure but helps avoiding erroneous user input when the initial OTP is received before retransmission. defaultCountryCode
) captchaProvider
) - the response of the flow selecting request (when this step is the first interactive step in a flow).
- the step response immediately preceding the protected step (when this step is not the first interactive step in a flow).
Caution: The CAPTCHA only protects the verification of the OTP. The OTP is send to the user before the CAPTCHA is solved.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.userselfreg.application.configuration.step.PhoneNumberVerificationStepConfig
id: PhoneNumberVerificationStepConfig-xxxxxx
displayName:
comment:
properties:
captchaProvider:
customFailureResponseAttributes:
customResponseAttributes:
defaultCountryCode: 41
dynamicStepActivations:
interactiveGotoTargets:
maxFailedAttempts: 1
maxOtpResends: 0
messageResourceKey: user-self-reg.sms.verification.message
onFailureGotos:
originator:
otpCaseSensitive: true
otpGenerator:
otpValidity: 300
phoneNumberItem:
preCondition:
requiresActivation: false
resendSameOtp: false
skipCondition:
smsGateway:
stepId:
tagsOnSuccess:
Plain Base64 Ticket Decoder
For a description of the encoding see class description of type
type: com.airlock.iam.core.misc.util.ticket.codec.PlainBase64TicketDecoder
id: PlainBase64TicketDecoder-xxxxxx
displayName:
comment:
properties:
Plain Base64 Ticket Encoder
The keys/values in the ticket are encoded as configured in the plugin that uses this encoder. The expiry date is then appended as binary (see below) and the resulting byte array is base-64 encoded. Thus, there is no cryptographic protection in place!
Example:
"medusaID=1234;uname=smith;roles=customer,employee;name1=value1;name2=value2;[1444838488]"
All keys and the individual values are URL-encoded with the character set that is specified within the Identity Propagator. The value in square brackets symbolizes the added timestamp.
Important: The expiry date which is appended as binary consists of the milliseconds since midnight of 01.01.1970 and is represented as 64 bit signed integer (MSB first). Please be aware that for the successful decoding of the value, it is important to either use the PlainBase64TicketDecoder plugin or make sure to strip away the last 8 bytes (the added timestamp) of the content, if it is not relevant in your setup.
type: com.airlock.iam.core.misc.util.ticket.codec.PlainBase64TicketEncoder
id: PlainBase64TicketEncoder-xxxxxx
displayName:
comment:
properties:
Plain Cookie Identity Propagator
cookieValue
) Use the special value "${ROLES}" to use the user's roles as the value of the cookie. The roles are represented as comma-separated list (e.g. admin,empoloyee,user).
Use the special value "${USERNAME}" to use the user's username as the value of the cookie.
Use the special value "${AUDIT_TOKEN}" to use the user's audit token (set by IAM) as the value of the cookie.
Use the special value "${context-data-field}" to use the user's context data field as the value of the cookie.
It is possible to use a combination of the special values and some static text that doesn't get replaced. Make sure the static part is not enclosed with ${ and }.
emptyCookieValueBehavior
) cookieName
) cookiePath
) If one single access cookie is used for all applications, the value "/" can be used. If different tickets are used for different applications, the applications path should be used.
Note that only one access cookie per cookie path and name can exist. Make sure that this cookie name does not clash with other cookie's names. For example, do not use session cookie names such as "JSESSIONID".
Make sure the configuration flag Interpret Cookie Domains is set in the Airlock Gateway (WAF) configuration. If not, the cookie path is ignored and cookies in the cookie store are sent to any back-end HTTP request of the same session. This also means that there may be only one cookie per cookie name!
It is best to consult the corresponding documentation of the Airlock Gateway to get more accurate information on cookie handling.
cookieDomain
) Because of security restrictions in browsers (same origin policy) it is usually not possible to set a cookie for a different domain unless the right-most two domain parts (e.g. "ergon.ch") are equal to that of the application setting the cookie.
It is possible that there are further restrictions regarding this in browsers.
If you are using a HTTP reverse proxy that stores the cookie in its session store (and does not send it to the client), make sure to understand the proxies interpretation of the cookie domain and cookie path.
Make sure the configuration flag Interpret Cookie Domains is set in the Airlock Gateway (WAF) configuration. If not, the cookie domain is ignored and cookies in the cookie store are sent to any back-end HTTP request of the same session. The cookie path is also ignored meaning that there may be only one cookie per cookie name!
Airlock also supports the following cookie domain values (if the flag Interpret Cookie Domains is set):
- The value
.*
results in cookies being sent to all back-end servers. This is especially useful if one authentication ticket is used for multiple back-ends. - The value
@<fully-qualified-host>
results in the cookie being treated as if it were set by the host specified by "<fully-qualified-host>". If using this value, make sure the corresponding mapping also uses the fully qualified hostname.
Note that only one cookie per cookie path and name can exist. Make sure that this cookie name does not clash with other cookie's names. For example, do not use session cookie names such as "JSESSIONID".
setSecureFlag
) If the cookie is marked as secure, the browser (and any HTTP proxy behaving like a browser) should send the cookie only over secure connections.
Caution: If you think that setting this flag makes your application more secure, it is in most cases way better to adequately secure the access cookie by encrypting it appropriately. Remember that this flag just "asks" the browser to not transmit the cookie over unencrypted connections.
urlEncodingScheme
) Make sure that the component receiving the ticket uses the same URL encoding scheme.
Specify
NONE
to disable URL-Encoding in case the target system cannot handle URL-Encoded cookies. Notice: This will only work if the username contains nothing but ASCII characters. Other characters like umlauts are never allowed unencoded in cookies and will result in an error. maxAge
) - A positive value indicate that the cookie will expire after that many seconds have passed.
- A negative value means that the cookie is not stored persistently and will usually be deleted when the Web browser exits (however, browsers may keep it for longer).
- A value of 0 (zero) causes the cookie to be deleted by sending an expired cookie with the same name.
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.PlainCookieIdentityPropagator
id: PlainCookieIdentityPropagator-xxxxxx
displayName:
comment:
properties:
cookieDomain:
cookieName: username
cookiePath: /
cookieValue:
emptyCookieValueBehavior: FAIL
maxAge: -1
setSecureFlag: false
urlEncodingScheme: UTF-8
Plain Cookie Value Context Data Extractor
cookieName
)
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.PlainCookieValueContextDataExtractor
id: PlainCookieValueContextDataExtractor-xxxxxx
displayName:
comment:
properties:
cookieName:
Plain Static REST Request Header
headerName
) headerValue
)
type: com.airlock.iam.common.application.configuration.restclient.PlainStaticRestRequestHeaderConfig
id: PlainStaticRestRequestHeaderConfig-xxxxxx
displayName:
comment:
properties:
headerName:
headerValue:
Plain Ticket Decoder
Since no expiry date is encoded in plain-encoded tickets, the decoded tickets expire after 1 year.
type: com.airlock.iam.core.misc.util.ticket.codec.PlainTicketDecoder
id: PlainTicketDecoder-xxxxxx
displayName:
comment:
properties:
Plain Ticket Encoder
All keys and the individual values are URL-encoded with the character set that is specified within the Identity Propagator that uses this encoder.
Does NOT store any expiry date in the ticket!
type: com.airlock.iam.core.misc.util.ticket.codec.PlainTicketEncoder
id: PlainTicketEncoder-xxxxxx
displayName:
comment:
properties:
Plain Token
Be aware that logging token information is detrimental to security.
type: com.airlock.iam.oauth2.application.configuration.logging.PlainTokenLogStrategy
id: PlainTokenLogStrategy-xxxxxx
displayName:
comment:
properties:
Plain User Data Header
name
) Note that for the special value @all-context-data
, the value of this property is ignored because the header name of the context data entries is used.
value
) The values are interpreted as follows:
- The value
@username
refers to the authentee's name. - The value
@roles
refers to the authentee's roles. - The value
@info:key
refers to the element of the additional input data with the given key. - The value
@all-context-data
refers to all context data of the authentee. If used, each context data entry is added as a separate header using its key as header name. The 'Name' propery is ignored.
Be careful with this setting as context-data entries may overwrite important HTTP headers in back-end requests. It is recommended to add multiple explicit headers instead to keep control over the headers set. - All other values are used to reference a value in the context data container of the authentee.
valuePrefix
) mappingNames
) If no mapping name is specified, the HTTP header is used on all Airlock Gateway mappings.
Note: Headers must never be defined globally and on a specific mapping at the same time.
type: com.airlock.iam.core.misc.impl.sso.PlainUserDataHeader
id: PlainUserDataHeader-xxxxxx
displayName:
comment:
properties:
mappingNames:
name:
value:
valuePrefix:
Plain User Data Response Header
name
) value
) The value is based on the authentee including its context data container:
- The value
@username
refers to the authentee's name. - The value
@roles
refers to the authentee's roles. The roles are set as comma-separated string (e.g. role1,role2). If the authentee has no roles, the header is not set. - All other values are used to reference a value in the context data container of the authentee. If the value is not present on the context data container, the header is not set.
encoder
)
type: com.airlock.iam.core.application.configuration.header.PlainUserDataResponseHeader
id: PlainUserDataResponseHeader-xxxxxx
displayName:
comment:
properties:
encoder:
name:
value:
Primary Key Lookup
userStore
)
type: com.airlock.iam.core.misc.impl.authen.PrimaryKeyLookupTransformer
id: PrimaryKeyLookupTransformer-xxxxxx
displayName:
comment:
properties:
userStore:
Print Airlock 2FA Activation Letters
renderer
) The following placeholders can be used in the templates
${User Context Data Name}
- context data of the user.${activationQRCode}
- QR code image for the activation. Image size in document can be adjusted:${activationQRCode,imageSize,width in points,height in points}
${expires}
- expiring date of the activation. Can be used with extended format (e.g.${expires,date,short}
)
workingDirectory
) If this property is defined, activation letters are not directly generated into the output directory (see other property) but they are generated into this working directory and are then moved into the output directory once they are done.
This helps to solve problems with processes that automatically read the rendered activation letters and therefore might not see the fully rendered result. Make sure that the working directory and the output directory reside in the same file system (otherwise the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
outputDirectory
) languageContextDataName
)
type: com.airlock.iam.admin.application.configuration.airlock2fa.Airlock2FAActivationLetterPrintingConfig
id: Airlock2FAActivationLetterPrintingConfig-xxxxxx
displayName:
comment:
properties:
languageContextDataName:
outputDirectory:
renderer:
workingDirectory:
Property Credential Persister
A credential persister plugin that uses a properties file as storage. The plugin is intended for demo and testing.
It is fully functional and can be accessed concurrently, but it is not optimized for performance, and it does not scale to a large number of entries. It keeps everything in memory and reads and writes the whole data file.
The following keys are used:
- cred-active
- cred-ordered
- cred-ordered-user
- cred-ordered-date
- cred-binary-data
- cred-string-data
- cred-delivery-date
- cred-generation-date
- cred-serial
- cred-next-binary-data
- cred-next-string-data
- cred-next-delivery-date
- cred-next-generation-date
- cred-next-serial
The properties are stored in the following format: userid.selector.key = value
file
) Path to the properties file used to store the credential data.
This is either an absolute path, or a path relative to the config directory. If the file does not exist, it is created by the plugin.
isBinaryCredential
) contextDataKeys
) otherCredentialsDeliveryDates
) Comma-separated list of secondary keys pointing to other credential's delivery dates.
Note that if you intend to reference properties from other persisters, you need to store them in the same file.
selector
) A selector string used in the key to store the values of this credential. This is needed to allow storing different credentials in the same file (e.g. the file with all user data).
This selector is not used for context data and other credential delivery dates.
type: com.airlock.iam.core.misc.impl.persistency.property.PropertyCredentialPersister
id: PropertyCredentialPersister-xxxxxx
displayName:
comment:
properties:
contextDataKeys:
file: users.properties
isBinaryCredential: false
otherCredentialsDeliveryDates:
selector:
Property Maintenance Message Persister
A maintenance message persister plugin that uses a properties file as storage. The plugin is intended for demo and testing.
It is fully functional and can be accessed concurrently, but it is not optimized for performance, and does not scale to a large number of entries. It keeps everything in memory and reads and writes the whole data file.
file
) Path to the properties file used to store the maintenance messages.
This is either an absolute path, or a path relative to the IAM installation directory. If the file does not exist, it is created by the plugin.
type: com.airlock.iam.core.misc.impl.persistency.property.PropertyMaintenanceMessagePersister
id: PropertyMaintenanceMessagePersister-xxxxxx
displayName:
comment:
properties:
file: maintenance-messages.properties
Property Token List Persister
A token list (matrix card, grid card TAN-list, etc.) persister plugin that uses a properties file as storage. The plugin is intended for demo and testing.
It is fully functional and can be accessed concurrently, but it is not optimized for performance, and does not scale to a large number of entries. It keeps everything in memory and reads and writes the whole data file.
file
) Path to the properties file used to store the token data.
This is either an absolute path, or a path relative to the config directory. If the file does not exist, it is created by the plugin.
contextDataKeys
) otherCredentialsDeliveryDates
) Comma-separated list of secondary keys pointing to other credential's delivery dates.
Note that if you intend to reference properties from other persisters, you need to store them in the same file.
selector
) A selector string used in the key to store the values of this credential. This is needed to make it possible to store different credentials in the same file (e.g. the file with all user data).
This selector is not used for context data and other credentials delivery dates.
type: com.airlock.iam.core.misc.impl.persistency.property.PropertyTokenListPersister
id: PropertyTokenListPersister-xxxxxx
displayName:
comment:
properties:
contextDataKeys:
file: users.properties
otherCredentialsDeliveryDates:
selector: token-list
Property User Persister
A user persister plugin that uses a properties file as storage. The plugin is intended for demo and testing.
It is fully functional and can be accessed concurrently in a read-only manner, but it is not optimized for performance, and does not scale to a large number of entries. It keeps everything in memory and reads and writes the whole data file.
file
) Path to the properties file used to store the user information.
This is either an absolute path, or a path relative to the config directory. If the file does not exist, it is created by the plugin.
otherCredentialsDeliveryDates
) Comma-separated list of secondary keys pointing to other credential's delivery dates.
Note that if you intend to reference properties from other persisters, you need to store them in the same file.
contextDataKeys
) additionalInsertData
) This property defines a list of name/value pairs used in insert statements when a new user is inserted.
This allows you to add arbitrary fixed or dynamic values when a new user is created. This is useful if some fields may not be NULL but are not inserted by this plugin by default.
type: com.airlock.iam.core.misc.impl.persistency.property.PropertyUserPersister
id: PropertyUserPersister-xxxxxx
displayName:
comment:
properties:
additionalInsertData:
contextDataKeys:
file: users.properties
otherCredentialsDeliveryDates:
Protected Self-Service Flows
Settings for flow-based self-services via protected REST.
Note that self-service flows require an authenticated flow session which can only be obtained by successfully completing an authentication flow. Request credentials and API access control are not applicable here.
flows
) maxFailedFactorAttempts
) legacyResponseBehavior
)
type: com.airlock.iam.selfservice.application.configuration.ProtectedSelfServiceFlowsConfig
id: ProtectedSelfServiceFlowsConfig-xxxxxx
displayName:
comment:
properties:
flows:
legacyResponseBehavior: false
maxFailedFactorAttempts: 5
Protected Self-Service UI
User interface configuration for a protected self-service flow.
The flow can be accessed at /<loginapp-uri>/ui/app/protected/select/flow/<Flow ID> after user authentication.
flowId
) customizedStepUis
) showGotoButtons
) Show Goto buttons for all configured Goto targets on all pages using default UIs of this flow. Clicking a Goto button will redirect to the corresponding Goto target. The Goto targets are configured in the flows themselves, not the UIs.
For customized step UIs, Goto buttons have to be configured explicitly using the "Goto Button UI Element" plugin.
Notice: Goto buttons do not come with pre-defined labels. It is required to add i18n keys and values for each button manually. The key may looks as follows: 'protected.self-service.pages.actions.goto.<currentStepId>.<targetStepId>'.
maintenanceMessageUiSettings
) showConfirmationPage
) completionTarget
) Note: In order to redirect to a target application, redirect to the corresponding "Authentication Flow". If the flow can be skipped due to the obtained tags, the user is forwarded to the target application.
cancellationTarget
) For customized step UIs, cancel buttons have to be configured explicitly using the "Cancel Button UI Element" plugin.
Note: In order to redirect to a target application, redirect to the corresponding "Authentication Flow". If the flow can be skipped due to the obtained tags, the user is forwarded to the target application.
flowFailureTarget
)
type: com.airlock.iam.selfservice.application.configuration.ui.SelfServiceUiConfig
id: SelfServiceUiConfig-xxxxxx
displayName:
comment:
properties:
cancellationTarget:
completionTarget:
customizedStepUis:
flowFailureTarget:
flowId:
maintenanceMessageUiSettings:
showConfirmationPage: true
showGotoButtons: true
Protected Self-Service UIs
flowUis
) airlock2Fa
) mtan
) deviceToken
) cronto
) fido
) applicationPortal
) accountLinkManagement
) oAuth2SessionManagement
) oAuth2ConsentManagement
) rememberMeDeviceManagement
) userRepresentation
)
type: com.airlock.iam.selfservice.application.configuration.ui.SelfServiceUiConfigs
id: SelfServiceUiConfigs-xxxxxx
displayName:
comment:
properties:
accountLinkManagement:
airlock2Fa:
applicationPortal:
cronto:
deviceToken:
fido:
flowUis:
mtan:
oAuth2ConsentManagement:
oAuth2SessionManagement:
rememberMeDeviceManagement:
userRepresentation:
Protected Self-Services
selfServiceFlows
) airlock2FADeviceList
) Additional self-service functionality can be configured in "Protected Self-Service Flows".
mtanNumberList
) Additional self-service functionality can be configured in "Protected Self-Service Flows".
deviceTokenList
) Additional self-service functionality can be configured in "Protected Self-Service Flows".
crontoDeviceList
) Additional self-service functionality can be configured in "Protected Self-Service Flows".
fidoCredentialList
) Additional self-service functionality can be configured in "Protected Self-Service Flows".
accountLinkingLists
) Additional self-service functionality can be configured in "Protected Self-Service Flows".
oAuth2SessionList
) Additional self-service functionality can be configured in "Protected Self-Service Flows".
oAuth2ConsentList
) Additional self-service functionality can be configured in "Protected Self-Service Flows".
rememberMeDeviceList
) Additional self-service functionality can be configured in "Protected Self-Service Flows".
type: com.airlock.iam.selfservice.application.configuration.ProtectedSelfServicesConfig
id: ProtectedSelfServicesConfig-xxxxxx
displayName:
comment:
properties:
accountLinkingLists:
airlock2FADeviceList:
crontoDeviceList:
deviceTokenList:
fidoCredentialList:
mtanNumberList:
oAuth2ConsentList:
oAuth2SessionList:
rememberMeDeviceList:
selfServiceFlows:
Public Self-Service Allowed Condition
type: com.airlock.iam.publicselfservice.application.configuration.selection.condition.PublicSelfServiceAllowedConditionConfig
id: PublicSelfServiceAllowedConditionConfig-xxxxxx
displayName:
comment:
properties:
Public Self-Service Allowed Processor
type: com.airlock.iam.publicselfservice.application.configuration.processors.PublicSelfServiceAllowedProcessorConfig
id: PublicSelfServiceAllowedProcessorConfig-xxxxxx
displayName:
comment:
properties:
Public Self-Service Flow
flowId
) steps
) restrictions
) processors
) usernameTransformers
) The transformation of a username takes place in the first step before the user is loaded. Note that username transformers have no effect on the propagated username value. Transformers can be chained, i.e. a first transformer could normalize the original name, where the next transformer looks up the normalized name in a database for potential transformation matches.
In contrary to the above description of chaining, a transformer can also signal that it already found the final user ID and the chain must stop after it.
For further details please refer to the documentation of the username transformer plugins.
initializeNextAuthFlow
) If enabled, the next authentication flow after completing this public self-service flow will be initialized with the user identity and tags from the public self-service flow. By combining this feature with authentication flows where steps can be skipped based on tags from public self-service, a non-interactive authentication after completed public self-service can be achieved.
Information is propagated only if a user has been identified in the public flow.
type: com.airlock.iam.publicselfservice.application.configuration.flow.PublicSelfServiceFlowConfig
id: PublicSelfServiceFlowConfig-xxxxxx
displayName:
comment:
properties:
flowId:
initializeNextAuthFlow: false
processors:
restrictions:
steps:
usernameTransformers:
Public Self-Service Flow Link
flowId
)
type: com.airlock.iam.flow.ui.application.configuration.PublicSelfServiceFlowLinkConfig
id: PublicSelfServiceFlowLinkConfig-xxxxxx
displayName:
comment:
properties:
flowId:
Public Self-Service Flow Redirect
flowId
)
type: com.airlock.iam.publicselfservice.application.configuration.ui.PublicSelfServiceFlowRedirectTargetConfig
id: PublicSelfServiceFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
flowId:
Public Self-Service Flows
flows
) maxFailedAttempts
) Maximal number of allowed failed factor attempts. The user is locked if the number of failed attempts for any factor exceeds this limit.
Security Warning: The "Locked User Restriction" must be configured in order to disallow public self-services for users that have exceeded the allowed number of factor attempts configured in this property. The "Default Password Reset Restrictions " already include this restriction.
maxNumberOfUnlocks
) - Use the "Default Self-Unlock Restrictions"
- Configure the "Too Many Unlocks Restriction" if using the "Custom Public Self-Service Restrictions"
type: com.airlock.iam.publicselfservice.application.configuration.PublicSelfServiceFlowsConfig
id: PublicSelfServiceFlowsConfig-xxxxxx
displayName:
comment:
properties:
flows:
maxFailedAttempts: 3
maxNumberOfUnlocks:
Public Self-Service UI
Note that the corresponding public self-service flow must also be configured in order for this user interface to be available.
flowId
) customizedStepUis
) showGotoButtons
) Show Goto buttons for all configured Goto targets on all pages using default UIs of this flow. Clicking a Goto button will redirect to the corresponding Goto target. The Goto targets are configured in the flows themselves, not the UIs.
For customized step UIs, Goto buttons have to be configured explicitly using the "Goto Button UI Element" plugin.
Notice: Goto buttons do not come with pre-defined labels. It is required to add i18n keys and values for each button manually. The key may looks as follows: 'public-self-service.pages.actions.goto.<currentStepId>.<targetStepId>'.
maintenanceMessageUiSettings
) completionTarget
) cancellationTarget
) For customized step UIs, cancel buttons have to be configured explicitly using the "Cancel Button UI Element" plugin.
flowFailureTarget
) showCancelButtonOnFirstPage
) Note that even if this flag is disabled, a cancel button on the first page is always shown when the first page is reached again during the flow, e.g. by a Goto.
showConfirmationPage
)
type: com.airlock.iam.publicselfservice.application.configuration.ui.PublicSelfServiceUiConfig
id: PublicSelfServiceUiConfig-xxxxxx
displayName:
comment:
properties:
cancellationTarget:
completionTarget:
customizedStepUis:
flowFailureTarget:
flowId:
maintenanceMessageUiSettings:
showCancelButtonOnFirstPage: false
showConfirmationPage: true
showGotoButtons: true
Public Self-Service UIs
flowUis
)
type: com.airlock.iam.publicselfservice.application.configuration.ui.PublicSelfServiceUiConfigs
id: PublicSelfServiceUiConfigs-xxxxxx
displayName:
comment:
properties:
flowUis:
Public/Private JWK Configuration
keyStore
) keyPairAlias
) privateKeyPassword
)
type: com.airlock.iam.common.application.configuration.jwt.JWKPairFromKeyStoreConfig
id: JWKPairFromKeyStoreConfig-xxxxxx
displayName:
comment:
properties:
keyPairAlias:
keyStore:
privateKeyPassword:
Query Parameter URI Transformation
parameterName
) stopAfterSuccessfulTransformation
)
type: com.airlock.iam.login.application.configuration.location.transform.QueryParameterToURITransformerConfig
id: QueryParameterToURITransformerConfig-xxxxxx
displayName:
comment:
properties:
parameterName:
stopAfterSuccessfulTransformation: false
Query Parameter URI Value Extraction
parameterName
) allowedUriPatterns
) A list of regular expressions defining the allowed URI patterns.
A URI is accepted if at least one of the configured regular expressions matches.
If no patterns are defined, no restrictions apply.
type: com.airlock.iam.login.application.configuration.location.extract.QueryParameterURIValueExtractorConfig
id: QueryParameterURIValueExtractorConfig-xxxxxx
displayName:
comment:
properties:
allowedUriPatterns:
parameterName:
Radio Buttons UI Element
label
) property
) required
) inline
) options
) htmlId
) submitToServer
) initialValueQuery
) See the JSONPath documentation for the full documentation: https://github.com/dchester/jsonpath
Examples:Assume the initial REST call returns the following JSON response:
{ "meta": { "type": "jsonapi.metadata.document", "timestamp": "2023-03-10T13:06:01.294+02:00" }, "data": [ { "type": "user", "id": "user1", "attributes": { "contextData": { "givenname": "User1", "surname": "FSMTest", "roles": "customerA" } } }, { "type": "user", "id": "user2", "attributes": { "contextData": { "givenname": "User2", "surname": "FSMTest", "roles": "customerB" } } } ] }
The following table shows the results of various JSONPath queries given the JSON above:
Description JSONPath Query Extracted Initial Value Static path from the root $.meta.type jsonapi.metadata.document The role of the user whose id equals "user1" $.data[?(@.id == 'user1')].attributes.contextData.roles customer The number of users $.data.length 2 All "givenname" attributesNote:
This query yields multiple results.
The first one is set to the initial value, the rest is discarded. $..givenname User1
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableUiRadioConfig
id: ConfigurableUiRadioConfig-xxxxxx
displayName:
comment:
properties:
htmlId:
initialValueQuery:
inline: true
label:
options:
property:
required:
submitToServer: true
Radius Authentication Service
passwordSettings
) enablePasswordChange
) port
) interfaceIp
) sharedSecret
) authenticator
) temporaryLockingSettings
) If enabling the Temporary Locking settings, either a linear or an exponential factor must be provided or it will have no effect at all. Additionally, a user persister must be specified which must provide the number of failed logins and the last login attempt.
userPersister
) authorizationSettings
) charsetForPassword
) blockingIfAsynchronous
) Certain authenticators support asynchronous authentication requests. That is, instead of a final result like accept or reject, an 'authentication pending' result is returned and the caller (in this case the radius service) must call the authenticator repeatedly to get a final result.
If this flag is enabled, the radius service performs the polling and blocks the response until a final result is available. If the flag is disabled, a response is immediately returned to the radius client, asking for a fake challenge (see property 'asynchronousReplyMessage'). When the challenge is returned (content is ignored), the authenticator is queried again and so on.
Note: If the radius service is blocking, the UDP timeout on the client side must be configured to be at least as long as the authenticator timeout.
authenticatorPollingIntervalMillis
) authenticatorPollingTimeoutSecs
) airlock2FAPasscodeFallback
) ssoAttribute
) The corresponding RADIUS attribute is used to transport the password to the RADIUS client. (The "Class" attribute has id 25, the "Filter-Id" attribute has id 11). Leave this property empty (or do not define the property) to turn this feature off.
CAUTION: If the feature is used, the password is sent in plaintext to the RADIUS client. This may be a security risk depending on the setup.
radiusRolesConfiguration
) logRadiusRequests
) sessionTableSize
) This value should be increased in high-traffic situations if authentication sessions are lost.
retransmissionTableSize
) This value should be increased in high-traffic situations when retransmitted packets are not detected and requests are therefore answered twice.
retransmissionIntervalMillis
) This value should be increased when a Radius client sends retransmissions after more than the indicated time. The value should be lowered if Radius requests are ignored because identical requests are sent within the indicated amount of milliseconds.
packetBufferSize
) This value should be increased if you experience problems because receiving only parts extraodinaryly long Radius packets.
useRsaAceCompatibilityMode
) When this mode is enabled, only authenticators that return ACE-like responses can be used. It can - for example - be used in combination with challenge-response authenticators.
staticRejectedUser
) Allows definition of a static test user for external monitoring of the Radius service. All login attempts with the static test user are rejected immediately without generating logfile entries. Even if the log level is set to DEBUG and option "logRadiusRequests" is enabled, requests with the static test user will not be logged.
Note: The static test user name must not coincide with an existing user name. Otherwise, the corresponding user will not be able to log in.
accessAcceptReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Accept responses.
accessAcceptPasswordChangedReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, property "Access Accept Reply Message" will be included in Access-Accept responses.
accessDeniedReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Denied responses.
userLockedReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, the general access denied message (see separate property) is used.
userTemporarilyLockedReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, the general access denied message (see separate property) is used.
notAuthorizedReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in the responses.
nextTokenModeReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Challenge responses.
newPinReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Challenge responses.
pinAcceptedReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Challenge responses.
tokenRequiredReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Challenge responses.
credentialUnassignedReplyMessage
) indexChallengeReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Challenge responses.
matrixChallengeReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Challenge responses.
changePasswordReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Challenge responses.
confirmPasswordReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Challenge responses.
passwordsDoNotMatchReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Denied responses.
passwordNotAcceptedReplyMessage
) Some RADIUS clients (such as keyboard-interactive authentication) may display this to the user. Other clients may make their behavior dependent on this message. If not set, no reply message will be included in Access-Denied responses.
asynchronousReplyMessage
) usernameTransformers
) The transformation of a username takes place before the authenticator reads the user from persistency layer. Transfomers can be chained, i.e. a first transformer could normalize the original name, after which the next transformer looks up the normalized name in a database for eventual transformation matches.
In addition to the above description of chaining, a transformer can also signal that it already found the final user ID and that the transformation must stop here.
For further details please refer to the documentation of the username transformer plugins.
tokenSelectionChoiceMessage
) usePasswordAsToken
) acceptModifiers
)
type: com.airlock.iam.servicecontainer.app.application.configuration.radius.RadiusServiceConfig
id: RadiusServiceConfig-xxxxxx
displayName:
comment:
properties:
acceptModifiers:
accessAcceptPasswordChangedReplyMessage: Login and password change successful.
accessAcceptReplyMessage: Login successful.
accessDeniedReplyMessage: Login failed.
airlock2FAPasscodeFallback: true
asynchronousReplyMessage: Please proceed authentication on your authentication device and press the login button when finished.
authenticator:
authenticatorPollingIntervalMillis: 5000
authenticatorPollingTimeoutSecs: 60
authorizationSettings:
blockingIfAsynchronous: true
changePasswordReplyMessage: Please choose a new password.
charsetForPassword:
confirmPasswordReplyMessage: Please enter the new password again for confirmation.
credentialUnassignedReplyMessage: No authentication token has been assigned to your account.
enablePasswordChange: false
indexChallengeReplyMessage: Please enter token at position ${INDEX}.
interfaceIp:
logRadiusRequests: false
matrixChallengeReplyMessage: Please enter token(s) ${CHALLENGE_COORDINATES}.
newPinReplyMessage: Please choose a new PIN.
nextTokenModeReplyMessage: Please wait for the NEXT token and enter it.
notAuthorizedReplyMessage: Access denied. Not enough access rights.
packetBufferSize: 8192
passwordNotAcceptedReplyMessage: The new password has not been accepted because it violates the password policy.
passwordSettings:
passwordsDoNotMatchReplyMessage: The passwords do not match. Please login again.
pinAcceptedReplyMessage: PIN accepted. Please wait for the NEXT token and enter it.
port:
radiusRolesConfiguration:
retransmissionIntervalMillis: 30000
retransmissionTableSize: 1024
sessionTableSize: 4096
sharedSecret:
ssoAttribute:
staticRejectedUser:
temporaryLockingSettings:
tokenRequiredReplyMessage: Please enter next token.
tokenSelectionChoiceMessage: Please choose:
usePasswordAsToken: false
useRsaAceCompatibilityMode: false
userLockedReplyMessage: Your user account is locked.
userPersister:
userTemporarilyLockedReplyMessage: Your user account has been locked temporarily. Please try again in a few minutes.
usernameTransformers:
RADIUS Authenticator
Authenticator that calls a RADIUS server to check credentials.
Note: If used as second step in a two-step authentication process, this plugin must ask for a token in the first step (before calling the RADIUS server). Please check the property "If Credential Is Missing" to enable this.
Stealth Mode Support: For unknown users this plugin will always ask for a token (OTP) and never use a different challenge type. Example: The RADIUS server always responds with a matrix challenge. Therefore the expected response would be a matrix challenge and the attacker - knowing the setup - knows that a user id does not exist, if asked for an OTP token.
radiusServers
) If more than one is provided, the list is used for failover.
ifCredentialIsMissing
) - Access-Reject: Rejects all requests with missing credential information.
- Ask for token in first step: If the first credential does not encompass a token, the plugin prompts the user to enter a token before calling the RADIUS server. This is useful if this authenticator is used as second factor in an authentication process.
- Send fixed password to RADIUS server: Sends the username and a fixed password to the RADIUS server. In such a case, the server is expected to respond with an Access-Challenge. This setting is useful if the Radius Authenticator is used as second step of a Main Authenticator.
nasIdentifier
) staticRoles
) accessRejectRules
) Defines a list of rules (processed in order of definition) that define how to map RADIUS access reject response's reply messages to authentication results.
If no rules are defined or no rule matches, an unspecified authentication failure is used for access reject responses.accessChallengeRules
) Defines a list of rules (processed in order of definition) that define how to map RADIUS access challenge response's reply messages to authentication results.
If no rules are defined or no rule matches, an unspecified authentication failure is used for access challenge responses.accessAcceptRules
) Configures rules that influence the authenticationr result in case of successful authentication ("AccessAccept").
This can be used for example to extract roles from the response.
Note: In contrast to the access challenge and access reject rules, all rules in the list are processed as long as the authentication result is successful.
reportedAuthMethod
) If not defined, "RADIUS" will be used as Authentication Method.
logRadiusAttributes
) This is useful during integration and for debugging but it is generally not suitable for productive sytems.
passwordAndTokenUsage
) Example:
password = pass
token = 1234
Result:
PASSWORD_ONLY = pass
TOKEN_ONLY = 1234
CONCATENATE = pass1234
usernameTransformers
) encoding
)
type: com.airlock.iam.core.misc.impl.authen.RadiusAuthenticator
id: RadiusAuthenticator-xxxxxx
displayName:
comment:
properties:
accessAcceptRules:
accessChallengeRules:
accessRejectRules:
encoding: UTF-8
ifCredentialIsMissing: ACCESS_REJECT
logRadiusAttributes: false
nasIdentifier:
passwordAndTokenUsage: TOKEN_ONLY
radiusServers:
reportedAuthMethod: RADIUS
staticRoles:
usernameTransformers:
Radius Authorization Config
Authorization decisions are based on the user's roles granted by the authenticator plugin configured in the RADIUS service. Different target services may be configured and required roles are defined for each target service. The target service is determined based on the "NAS-Identifier" RADIUS attribute (sent by the RADIUS client).
defaultTargetService
) The default target service is used if no information is available about which target service to choose and if none of the other target services matches the NAS-Identifier.
targetServices
)
type: com.airlock.iam.servicecontainer.app.application.configuration.radius.RadiusAuthorizationConfig
id: RadiusAuthorizationConfig-xxxxxx
displayName:
comment:
properties:
defaultTargetService:
targetServices:
Radius Connection Settings
host
) port
) connectionTimeout
) Hint: If failover is used, it is useful to set a low timeout (e.g. 1) for the first RADIUS server and a higher timeout (e.g. 4) for the failover server. This results in fast switching when the first server fails but keeps the system running if the network or the servers are slow.
maxRetries
) Maximum number of retries to send an access request before giving up.
If multiple RADIUS servers are configured (for failover), it makes sense to set this value to zero (no retries) for the first and to a value greater than zero for the failover server(s). A typical value is 2.
sharedSecret
)
type: com.airlock.iam.core.misc.util.radius.RadiusConnectionSettings
id: RadiusConnectionSettings-xxxxxx
displayName:
comment:
properties:
connectionTimeout: 3
host:
maxRetries: 2
port:
sharedSecret:
RADIUS Password Repository
Password repository that verifies the password by calling a RADIUS server.
This repository can only be used for password checks, not for changing or setting a password.
radiusServers
) logRadiusAttributes
) nasIdentifier
) usernameProvider
) rolesAttributeType
) In case of a successful password check, roles can be extracted from the "Access Accept" response. The roles are expected as comma-separated list in this attribute type. If not configured or no attribute of the expected type is present, no roles are extracted.
The configured value can either be one of the predefined attribute types (name and ID) or an attribute ID (number > 0).
encoding
)
type: com.airlock.iam.common.application.configuration.password.repository.radius.RadiusPasswordRepositoryConfig
id: RadiusPasswordRepositoryConfig-xxxxxx
displayName:
comment:
properties:
encoding: UTF-8
logRadiusAttributes: false
nasIdentifier:
radiusServers:
rolesAttributeType:
usernameProvider:
RADIUS Roles As Reply-Message
returnGrantedUserRoles
) staticRoles
) suppressOriginalReplyMessage
) separator
) If a separator is defined, all roles are concatenated using the defined separator. The resulting list of roles is returned in a single ReplyMessage attribute. If no separator is defined, each role is returned in a separate ReplyMessage attribute.
For example, assume a user has roles RA, RB and RC. Defining the separator to be "--" results in the ReplyMessage "RA--RB--RC"
type: com.airlock.iam.servicecontainer.app.application.configuration.radius.RadiusRolesAsReplyMessageConfiguration
id: RadiusRolesAsReplyMessageConfiguration-xxxxxx
displayName:
comment:
properties:
returnGrantedUserRoles: true
separator:
staticRoles:
suppressOriginalReplyMessage: true
Readiness Health Check Endpoint
Configuration of the Readiness endpoint.
The readiness endpoint can be used in Airlock Gateway or Kubernetes to determine whether IAM is ready to handle incoming requests.
The endpoint is available under: /health/ready
checks
)
type: com.airlock.iam.common.application.configuration.health.ModuleReadinessConfig
id: ModuleReadinessConfig-xxxxxx
displayName:
comment:
properties:
checks:
Realm Administration
adminRealmContextDataName
) Note that this context data item must also be configured in the corresponding admin persister.
When using the default database schema the field "realm" is intended for this purpose.
userRealmContextDataName
) Note that this context data item must also be configured in the corresponding user persister.
When using the default database schema the field "realm" is intended for this purpose.
type: com.airlock.iam.admin.application.configuration.realm.RealmAdministrationConfig
id: RealmAdministrationConfig-xxxxxx
displayName:
comment:
properties:
adminRealmContextDataName:
userRealmContextDataName:
Realm Username Validator
usernamePattern
)
type: com.airlock.iam.admin.application.configuration.realm.RealmUsernameValidatorConfig
id: RealmUsernameValidatorConfig-xxxxxx
displayName:
comment:
properties:
usernamePattern:
Realm Value Provider
value
) Note that if the realm of an administrator cannot be determined, an empty string is provided independent of the configured value.
type: com.airlock.iam.admin.application.configuration.realm.RealmValueProviderConfig
id: RealmValueProviderConfig-xxxxxx
displayName:
comment:
properties:
value:
reCAPTCHA
- script-src https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/
- frame-src https://www.google.com/recaptcha/ https://recaptcha.google.com/recaptcha/
siteKey
) The site key can be assumed to be public knowledge and identifies the associated reCAPTCHA account.
The site key can be found on the reCAPTCHA admin page.
secretKey
) The secret is used to validate the CAPTCHA challenge response on the reCAPTCHA server. While a leaked secret key doesn't impact the security or validity of this CAPTCHA method, its misuse can infer costs as it is used for quota calculations at the CAPTCHA provider (similar to an API key).
The secret key can be found on the reCaptcha admin page.
proxyUri
) proxyLoginUser
) proxyLoginPassword
)
type: com.airlock.iam.flow.shared.application.configuration.captcha.ReCaptchaConfig
id: ReCaptchaConfig-xxxxxx
displayName:
comment:
properties:
proxyLoginPassword:
proxyLoginUser:
proxyUri:
secretKey:
siteKey:
Recipient From Context Data
contextDataName
)
type: com.airlock.iam.admin.application.configuration.event.ContextDataRecipientConfig
id: ContextDataRecipientConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
Recipient From Event Value
eventKey
)
type: com.airlock.iam.common.application.configuration.event.EventValueRecipientConfig
id: EventValueRecipientConfig-xxxxxx
displayName:
comment:
properties:
eventKey:
Recipient From String Value Provider
stringProvider
)
type: com.airlock.iam.login.application.configuration.event.StringProviderRecipientConfig
id: StringProviderRecipientConfig-xxxxxx
displayName:
comment:
properties:
stringProvider:
Red Flag
Example: the password check step raises a red flag if a mandatory password change must be performed. A step later in the flow requires the user to change his password if this red flag is raised. If no subsequent step handles the red flag, the flow fails.
name
)
type: com.airlock.iam.flow.application.configuration.redflag.RedFlagConfigImpl
id: RedFlagConfigImpl-xxxxxx
displayName:
comment:
properties:
name:
Red Flag Raised
redFlag
)
type: com.airlock.iam.flow.application.configuration.selection.condition.RedFlagConditionConfig
id: RedFlagConditionConfig-xxxxxx
displayName:
comment:
properties:
redFlag:
Red Flag Raising Step Config
condition
) redFlag
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.application.configuration.step.RedFlagRaisingStepConfig
id: RedFlagRaisingStepConfig-xxxxxx
displayName:
comment:
properties:
condition:
customFailureResponseAttributes:
customResponseAttributes:
preCondition:
redFlag:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Redirect On Logout Config
target
)
type: com.airlock.iam.authentication.application.configuration.ui.RedirectOnLogoutConfig
id: RedirectOnLogoutConfig-xxxxxx
displayName:
comment:
properties:
target:
Redirect to URI
targetUri
) uriTransformers
)
type: com.airlock.iam.login.rest.application.configuration.ExternalTargetUriConfig
id: ExternalTargetUriConfig-xxxxxx
displayName:
comment:
properties:
targetUri:
uriTransformers:
Regex Application Selector Config
uriPattern
)
type: com.airlock.iam.login.application.configuration.targetapp.RegexApplicationSelectorConfig
id: RegexApplicationSelectorConfig-xxxxxx
displayName:
comment:
properties:
uriPattern:
Regex String Transformer
pattern
) replacement
)
type: com.airlock.iam.common.application.configuration.transform.RegexStringTransformerConfig
id: RegexStringTransformerConfig-xxxxxx
displayName:
comment:
properties:
pattern:
replacement:
Regex String Validator Config
validationPattern
) Pattern for validating a string value.
The provided regex is used in Java for server-side validation and potentially in Javascript for client-side validation. The capabilities of these regex interpreters differ. Therefore make sure to only use patterns that are equivalent in both types of interpreters.
validationPatternCaseSensitive
)
type: com.airlock.iam.common.application.configuration.validation.RegexStringValidatorConfig
id: RegexStringValidatorConfig-xxxxxx
displayName:
comment:
properties:
validationPattern:
validationPatternCaseSensitive: true
Regex Ticket Element
transformMatchPattern
) transformReplacePattern
) ticketKey
) Note that for the special valueRef @all-context-data
, the value of this property is ignored because the keys of the context data entries are used.
valueRef
) Some keys have special meanings to add the username, the roles or all additional values.
mandatory
) - @username: only non empty usernames are allowed
- @roles: at least one role must is assigned
- context data key: the corresponding context data must exist and all values of the key must be non-empty
- @all-context-data: the values of all context data must be non-empty
- @all-additional-values: all additional data must have at least one value and all values must be non-empty
- additional value key : the selected additional data must exist, have at least one value and all values must be non-empty
type: com.airlock.iam.core.misc.util.ticket.service.RegexTicketElement
id: RegexTicketElement-xxxxxx
displayName:
comment:
properties:
mandatory: false
ticketKey:
transformMatchPattern:
transformReplacePattern:
valueRef:
Regex Username Transformer
replaceAll(replacement)
). regex
) Regular expression to match the input user name or part of it. The expression '(.+)' matches the whole string and saves it as a group which can be referenced as '$1' in the replacement expression.
Notice: To match any string, always use "(.+)", and never "(.*)" since the latter also matches against the empty string and thus the replacement will be applied twice.
- To add the prefix 'SubjectEmail:', use Regex='^(.+)$' and Replacement='SubjectEmail:$1'.
- To remove all whitespace from the user name, use Regex='\s' and Replacement=''.
- To remove the domain part of an email address, use Regex='@.*$' and Replacement=''.
replacement
) stopAfterSuccessfulTransformation
)
type: com.airlock.iam.core.misc.impl.authen.RegexUsernameTransformer
id: RegexUsernameTransformer-xxxxxx
displayName:
comment:
properties:
regex:
replacement:
stopAfterSuccessfulTransformation: false
Regex-based String Transformer
pattern
) replacement
) stopAfterSuccessfulTransformation
)
type: com.airlock.iam.common.application.configuration.location.transform.RegexStringTransformerConfig
id: RegexStringTransformerConfig-xxxxxx
displayName:
comment:
properties:
pattern:
replacement:
stopAfterSuccessfulTransformation: false
Regex-based URI Transformer
pattern
) replacement
)
type: com.airlock.iam.login.application.configuration.location.transform.RegexURITransformerConfig
id: RegexURITransformerConfig-xxxxxx
displayName:
comment:
properties:
pattern:
replacement:
Regex-based URI Value Extraction
pattern
) The regular expression matched against the URI to extract a target string. It must contain exactly one capturing group.
Note that if the expression matches multiple times, the first match is always returned. Care should therefore be taken while defining this pattern to avoid multiple matches.
type: com.airlock.iam.login.application.configuration.location.extract.RegexURIValueExtractorConfig
id: RegexURIValueExtractorConfig-xxxxxx
displayName:
comment:
properties:
pattern:
Regexp Data Transformer
properties
) Use the asterisk character ("*") to replace all properties.
pattern
) Regular expression pattern containing a group (a region embraced by parentheses) that can be used in conjunction with property "Replacement" in order to transform data. If the string does not match, no transformation is performed.
Example: The pattern "(.*)" and the replacement "user.$1" will transform the string "jdoe" to "user.jdoe".
Example: The pattern "user\.(.*)" and the replacement "$1" will transform the string "user.jdoe" to "jdoe".
replacement
) missingContextDataBehaviour
) The behaviour to adopt when a referenced value in "Replacement" is missing.
Example: The replacement is "email:${email}" but the email context data is not set.
"Unresolved Reference Value": leave the matching pattern as is. In the above example, the resulting string will be "email:${email}" "Empty String": use an empty string. In the above example, the resulting string will be "email:" "Error": missing context data, such as the above example, leads to an error.
type: com.airlock.iam.core.misc.util.datatransformer.RegexpDataTransformer
id: RegexpDataTransformer-xxxxxx
displayName:
comment:
properties:
missingContextDataBehaviour: UNRESOLVED_REFERENCE_VALUE
pattern:
properties:
replacement:
Remember Me Token Cleanup
rememberMeConfig
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.token.RememberMeTokenCleanup
id: RememberMeTokenCleanup-xxxxxx
displayName:
comment:
properties:
rememberMeConfig:
Remember-Me Consistency User Change Listener
- on user deletion: delete associated Remember-Me tokens.
- on user name change: updates all user references for the Remember-Me tokens.
rememberMeSettings
)
type: com.airlock.iam.common.application.configuration.rememberme.RememberMeConsistencyUserChangeListener
id: RememberMeConsistencyUserChangeListener-xxxxxx
displayName:
comment:
properties:
rememberMeSettings:
Remember-Me Database Repository
sqlDataSource
) logQueries
) tenantId
) If no value is configured, then 'no_tenant' is used as value on the database.
type: com.airlock.iam.common.application.configuration.rememberme.RememberMeRepositoryConfig
id: RememberMeRepositoryConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sqlDataSource:
tenantId:
Remember-Me Device List
rememberMeConfig
) includeGeolocation
) includeIpAddress
) userAgentMappings
) The Loginapp UI will use this value if available. Otherwise, the UI tries to display the user-agent header in a compact representation.
accessCondition
) Precondition that must be fulfilled for a user to access the Remember-Me device list.
Note the difference to the "Authorization Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
authorizationCondition
) Precondition that must be fulfilled for the user to be authorized to access the Remember-Me device list without further authentication.
Note the difference to the "Access Condition":- Access Condition: This condition determines whether a user is allowed to access a service at all. If this condition is not fulfilled, there is nothing that can be done (at least not immediately). Typical examples include having a certain authentication token, or a certain static role. This condition is always checked before the Authorization Condition and if it fails, the REST response has status 403 with error code PRECONDITION_NOT_FULFILLED.
- Authorization Condition: This condition determines whether the user is currently authorized to access a service. It is expected that completing another authentication flow (step-up) would enable the user to then fulfill the condition. The typical authorization condition checks whether the user has obtained a certain tag (or combination of tags). If the condition fails, the REST response has status 403 with error code NOT_AUTHORIZED.
type: com.airlock.iam.selfservice.application.configuration.rememberme.RememberMeDeviceListSelfServiceRestConfig
id: RememberMeDeviceListSelfServiceRestConfig-xxxxxx
displayName:
comment:
properties:
accessCondition:
authorizationCondition:
includeGeolocation: false
includeIpAddress: false
rememberMeConfig:
userAgentMappings:
Remember-Me Device Management UI
Depending on the configuration, the user interface allows an authenticated user to view and delete Remember-Me devices.
The Remember-Me device management is accessible at /<loginapp-uri>/ui/app/protected/remember-me/devices after user authentication.
flowToDeleteDevice
) pageExitTarget
) If configured, an additional button is displayed on the Remember-Me device management to exit the page. On click, this button redirects the user to the configured target.
To redirect to a target application, redirect to the corresponding "Authentication Flow". If the flow can be skipped due to the obtained tags, the user is directly forwarded to the target application.
type: com.airlock.iam.selfservice.application.configuration.ui.rememberme.RememberMeDeviceManagementUiConfig
id: RememberMeDeviceManagementUiConfig-xxxxxx
displayName:
comment:
properties:
flowToDeleteDevice:
pageExitTarget:
Remember-Me Device Management UI Redirect
type: com.airlock.iam.selfservice.application.configuration.ui.rememberme.RememberMeDeviceManagementFlowRedirectTargetConfig
id: RememberMeDeviceManagementFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
Remember-Me Reset Step
repository
) jspCredentialPersister
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.rememberme.RememberMeResetStepConfig
id: RememberMeResetStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
jspCredentialPersister:
onFailureGotos:
preCondition:
repository:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Remember-Me Settings
Settings for the Remember-Me feature that allows to skip certain authentication steps if a valid token is present in the request.
When using this feature, the Remember-Me cookie must be configured as an encrypted pass-through cookie on the Airlock Gateway.
repository
) logoutBehavior
) removeRememberMeTokensOnPasswordChanges
) removeRememberMeTokensOnUserLocked
) lifetime
) Duration must be specified like "2d 4h 10m 5s" or any part thereof.
idleTimeout
) Duration must be specified like "2d 4h 10m 5s" or any part thereof.
cookieName
) If this name is changed, the Airlock Gateway has to be reconfigured to pass-through and encrypt this cookie.
cookieDomain
) cookiePath
) Use the variable "%ENTRYPATH%" to automatically set the correct path even if used behind an Airlock Gateway.
type: com.airlock.iam.common.application.configuration.rememberme.RememberMeConfig
id: RememberMeConfig-xxxxxx
displayName:
comment:
properties:
cookieDomain:
cookieName: RememberMe
cookiePath: %ENTRYPATH%
idleTimeout:
lifetime: 7d
logoutBehavior: REMOVE_COOKIE
removeRememberMeTokensOnPasswordChanges: true
removeRememberMeTokensOnUserLocked: true
repository:
Remember-Me Token Clean-up Task
Task to clean up either lifetime or idle timeout expired Remember-Me tokens. Idle timeout expired tokens will only be removed when renewed once.
In order to minimize database locks, the task doesn't delete all expired tokens in one transaction but deletes the tokens in configurable batches.
It is recommended to schedule this task with a daily interval during a time with little traffic. Depending on the total number of tokens and the number of deletable Remember-Me tokens, the task might take some time but a proper "Batch Size" will keep row locks at a minimum.
rememberMeConfig
) batchSize
) During clean-up, tokens are deleted in batches of this size. This makes sure that any row locks on the database are very short-lived, not affecting parallel token modifications. This value should not be set too high to prevent very long running transactions.
Token clean-up will repeat deleting this number of tokens until all expired tokens have been cleaned up. Therefore, this task can take some time when a lot of expired tokens are present.
This size should be chosen so that every batch does not take longer than 5 seconds. The average runtime of the batches can be found in the task's logs.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.rememberme.RememberMeTokenCleanupTaskConfig
id: RememberMeTokenCleanupTaskConfig-xxxxxx
displayName:
comment:
properties:
batchSize: 1000
rememberMeConfig:
Remember-Me Token Generating Step
Step that generates a 'Remember-Me' token and adds it to the response as cookie.
In most use cases this step must be activated by the end-user and configured accordingly. If the step does not have to be activated, valid Remember-Me cookies are issued automatically. Depending on their usage, this may impose a security risk.
requiresActivation
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.rememberme.RememberMeTokenGeneratingStepConfig
id: RememberMeTokenGeneratingStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: true
skipCondition:
stepId:
tagsOnSuccess:
Remember-Me User Identifying Step
The step is skipped if no valid token is found in the request.
migrateJspRememberMeCookies
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.rememberme.RememberMeUserIdentifyingStepConfig
id: RememberMeUserIdentifyingStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: REMEMBER_ME
customFailureResponseAttributes:
customResponseAttributes:
migrateJspRememberMeCookies:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Remote Event Subscriber (Adminapp)
remoteUrl
) bodyTemplate
) - ${contextDataName} for the value of contextDataName in the context-data of the managed user.
- ${event.createdAt,date,format} for the date/time at which the event was created, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
- event.createdAt
- event.data.addedRoles (list of strings)
- event.data.airlock2FAAccountId
- event.data.airlock2FADeviceId
- event.data.activeAuthenticationMethod
- event.data.contextDataChanged.%s.newValue (where "%s" is replaced by the context-data field name).
- event.data.contextDataChanged.%s.oldValue (where "%s" is replaced by the context-data field name).
- event.data.crontoDeviceId
- event.data.fidoCredentialId
- event.data.lockReason
- event.data.mtanNewPhoneNumber
- event.data.mtanNumberId
- event.data.mtanOldPhoneNumber
- event.data.newEmailAddress
- event.data.newRoles (list of strings)
- event.data.oldEmailAddress
- event.data.oldRoles (list of strings)
- event.data.previousAuthenticationMethod
- event.data.removedRoles (list of strings)
- event.data.userId
- event.id
- event.metadata.requestIp
- event.metadata.userAgent
- event.source.adminId
valueEncoding
) The encoding/escaping to be applied to all string values before they are inserted into the request body template.
Security warning: using no encoding allows unvalidated user input to be sent in the request body.
The JSON encoder also transforms string lists into (escaped) JSON arrays.
httpClient
) httpMethod
) contentType
) event
)
type: com.airlock.iam.admin.application.configuration.event.AdminappRemoteEventSubscriberConfig
id: AdminappRemoteEventSubscriberConfig-xxxxxx
displayName:
comment:
properties:
bodyTemplate:
contentType: application/json
event:
httpClient:
httpMethod: POST
remoteUrl:
valueEncoding: JSON
Remote Event Subscriber (Loginapp)
url
) bodyTemplate
) - ${valueMapKey} for the value of valueMapKey provided by any of the configured Value Map Providers.
- ${event.createdAt,date,format} to include the date/time at which the event was created, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
- event.createdAt
- event.data.airlock2FAAccountId
- event.data.airlock2FADeviceId
- event.data.activeAuthenticationMethod
- event.data.authenticationMethods
- event.data.browser
- event.data.city
- event.data.contextDataChanged.%s.newValue (where "%s" is replaced by the context-data field name).
- event.data.contextDataChanged.%s.oldValue (where "%s" is replaced by the context-data field name).
- event.data.countryCode
- event.data.crontoDeviceId
- event.data.device
- event.data.deviceTokenId
- event.data.fidoCredentialId
- event.data.fidoPublicKeyCredentialId
- event.data.fidoRelyingPartyId
- event.data.lockReason
- event.data.mtanNewPhoneNumber
- event.data.mtanNumberId
- event.data.mtanOldPhoneNumber
- event.data.newEmailAddress
- event.data.oldEmailAddress
- event.data.operatingSystem
- event.data.previousAuthenticationMethod
- event.data.stepResult.attributes.<attribute-name> (where <attribute-name> ist the name of the additional attribute, could be nested.)
- event.data.stepResult.errorCode
- event.data.stepResult.nextAction
- event.data.stepResult.type
- event.data.userId
- event.id
- event.metadata.requestIp
- event.metadata.userAgent
- event.source.applicationId
- event.source.configurationContext
- event.source.flowId
- event.source.stepId
valueEncoding
) The encoding/escaping to be applied to string all values before they are inserted into the request body template.
Security warning: using no encoding allows unvalidated user input to be sent in the request body.
The JSON encoder also transforms string lists into (escaped) JSON arrays.
httpClient
) httpMethod
) contentType
) event
) valueMapProviders
)
type: com.airlock.iam.login.application.configuration.event.LoginappRemoteEventSubscriberConfig
id: LoginappRemoteEventSubscriberConfig-xxxxxx
displayName:
comment:
properties:
bodyTemplate:
contentType: application/json
event:
httpClient:
httpMethod: POST
url:
valueEncoding: JSON
valueMapProviders:
Removed Roles Mapping
roleName
) tags
)
type: com.airlock.iam.flow.shared.application.configuration.RemovedRolesMapping
id: RemovedRolesMapping-xxxxxx
displayName:
comment:
properties:
roleName:
tags:
Rename Cronto Device Step
crontoHandler
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.CrontoDeviceRenamingStepConfig
id: CrontoDeviceRenamingStepConfig-xxxxxx
displayName:
comment:
properties:
crontoHandler:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Renew Session ID Processor
type: com.airlock.iam.flow.shared.application.configuration.processor.RenewSessionIdProcessorConfig
id: RenewSessionIdProcessorConfig-xxxxxx
displayName:
comment:
properties:
Reply Message Access Challenge Rule
pattern
) The regular expression matched against the reply message of the RADIUS access challenge response.
To extract challenges from the reply messages, exactly one regular expression capture group must be present in the pattern.
Example reply message: "Challenge: G4"
Example pattern with capture group: "Challenge: (.+)"
authenticationResult
) AccessAccept
packets. Interpreting a challenge message as successful authentication result is a shortcut not usually intended by the RADIUS server.However this can be useful especially when using an RSA ACE Server which requests another authentication step after successfully changing the PIN, which can be ignored by treating the "PIN Accepted." challenge as successful authentication.
type: com.airlock.iam.core.misc.impl.authen.radius.ReplyMessageAccessChallengeRule
id: ReplyMessageAccessChallengeRule-xxxxxx
displayName:
comment:
properties:
authenticationResult:
pattern:
Reply Message Access Reject Rule
pattern
) authenticationResult
)
type: com.airlock.iam.core.misc.impl.authen.radius.ReplyMessageAccessRejectRule
id: ReplyMessageAccessRejectRule-xxxxxx
displayName:
comment:
properties:
authenticationResult:
pattern:
Report Exec Task
The task can for example be used to send PDFs to a printer.
directory
) This may be either an absolute path or relative to the current directory of the running VM.
The directory must be writable (if files are deleted after processing).
command
) The command may contain the following variables:
- "${FILE}" is substituted by the file name (no path) being processed.
- "${DIR}" is substituted by the file path of the directory the file is in (relative to the JVMs current directory). This corresponds to the path of the directory specified by configuration property "directory".
- "${ABSOLUTE_DIR}" is substituted by the absolute file path of the directory the file is in. This corresponds to the path of the directory specified by configuration property "directory".
The command is executed in the directory denoted by the configuration property "directory".
filenameSuffix
) The suffix is NOT case-sensitive.
filenamePrefix
) The prefix matched against the filename only, i.e. without the path to the folder it is in.
The prefix is NOT case-sensitive.
deleteProcessedFiles
) Note: Not deleting the file usually means that it gets executed again and again. Setting this property to "false" makes sense if the OS-command removes the file from the directory.
successReturnCodes
) Multiple return codes may be specified as comma-separted list.
If more than one return code is specified, they are all compared to the result code.
If the return code from the OS command does not match any of the specified return codes, it is considered to be a failure.
The elements must be integers.
outputPattern
) The pattern is compared against the whole output, i.e. including line breaks. The "." also matches line breaks ("DOTALL" is enabled).
If defined, this check is done after the result code has been checked (see property "success-return-code".
Multiple patterns may be defined using the group/selector notation.
If the output from the OS command does not match any of the patterns, it is considered to be a failure.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.ReportExecTask
id: ReportExecTask-xxxxxx
displayName:
comment:
properties:
command:
deleteProcessedFiles: true
directory:
filenamePrefix:
filenameSuffix:
outputPattern:
successReturnCodes: [0]
Report Mailer Task
The task can for example be used to send generated PDFs to administrators.
directory
) This may be either an absolute path or relative to the current directory of the running VM.
The directory must be writable (if processed files must be deleted).
filenameSuffix
) The suffix is NOT case-sensitive. If the property is not configured all files are considered.
filenamePrefix
) The prefix matched against the filename only, i.e. without the path to the folder it is in.
The prefix is NOT case-sensitive. If the property is not configured all files are considered.
deleteProcessedFiles
) Note: Not deleting the file usually means that it gets mailed again and again.
mailText
) The attached file has been generated by Airlock IAM and should be taken care of.
Best RegardsYour Airlock IAM Server
mailTextIsHtml
) mailSubject
) emailService
) recipients
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.ReportMailerTask
id: ReportMailerTask-xxxxxx
displayName:
comment:
properties:
deleteProcessedFiles: true
directory:
emailService:
filenamePrefix:
filenameSuffix:
mailSubject:
mailText:
mailTextIsHtml: true
recipients:
Representation SSO Ticket Identifying Step
allowLockedUsers
) If enabled, locked users are allowed to be represented.
Security note: This disables the regular checks whether a user is locked.
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
ticketExtractors
) ticketDecoder
) acceptedSsoTicketRepository
) Configures the repository used to store accepted SSO tickets and reject previously accepted ones.
The in-memory repository cannot be used if multiple instances of IAM are deployed in parallel (failover, horizontal scaling). Furthermore, the in-memory repository does not preserve previously accepted SSO tickets across IAM restarts.
usernameTicketKey
) ticketTagExtractors
) ticketRoleExtractors
) ticketContextDataExtractors
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.sso.RepresentationSsoTicketIdentifyingStepConfig
id: RepresentationSsoTicketIdentifyingStepConfig-xxxxxx
displayName:
comment:
properties:
acceptedSsoTicketRepository:
allowLockedUsers: false
authenticationMethodId: SSO_REPRESENT_TICKET
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
ticketContextDataExtractors:
ticketDecoder:
ticketExtractors:
ticketRoleExtractors:
ticketTagExtractors:
usernameTicketKey: username
Representer ID SAML 2.0 Attribute
samlAttributeName
) nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.RepresenterIdAttributeConfig
id: RepresenterIdAttributeConfig-xxxxxx
displayName:
comment:
properties:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
samlAttributeName:
Request Attribute
attributeName
) valueValidatorPattern
) maxValueLength
)
type: com.airlock.iam.flow.shared.application.configuration.HttpParameterSpec
id: HttpParameterSpec-xxxxxx
displayName:
comment:
properties:
attributeName:
maxValueLength: 30
valueValidatorPattern: [a-zA-Z0-9.,:_ -]*
Request Context Retention Policy
type: com.airlock.iam.flow.shared.application.configuration.context.policy.RequestContextRetentionPolicy
id: RequestContextRetentionPolicy-xxxxxx
displayName:
comment:
properties:
Request Has SSO Ticket
ticketExtractors
)
type: com.airlock.iam.authentication.application.configuration.selection.condition.SsoTicketConditionConfig
id: SsoTicketConditionConfig-xxxxxx
displayName:
comment:
properties:
ticketExtractors:
Request Header
name
) value
)
type: com.airlock.iam.core.misc.impl.sso.onbehalflogin.HttpRequestHeaderConfig
id: HttpRequestHeaderConfig-xxxxxx
displayName:
comment:
properties:
name:
value:
Request Header Ticket Adder Config
headerName
) contentPrefix
) mappingNames
)
type: com.airlock.iam.login.application.configuration.idpropagation.RequestHeaderTicketAdderConfig
id: RequestHeaderTicketAdderConfig-xxxxxx
displayName:
comment:
properties:
contentPrefix:
headerName:
mappingNames:
Request Target HTTP Signature Header
type: com.airlock.iam.login.app.misc.oneshot.impl.RequestTargetHttpSignatureHeader
id: RequestTargetHttpSignatureHeader-xxxxxx
displayName:
comment:
properties:
Request URL Pattern UI Resource Set Rule
requestUrlPattern
) If the request URL to a UI resource matches this pattern, then the resource is retrieved from the resource set specified in the "UI Resource Set File Name" property.
Note that each request for a resource has its URL matched separately.
The request URL checked against this pattern includes the protocol, host, port and path, but excludes query parameters.
This feature is intended to be used to set a custom UI resource set for a particular domain. Changing the UI resource set, e.g. between different flows with the same domain, is not supported. Therefore it is not advised to define a "Request URL Pattern" matching specific request paths.
uiResourceSetFileName
) Name of the UI resource set zip file that contains the Loginapp Design Kit customization.
If the request URL matches the pattern configured in the "Request URL Pattern" property, the resource is retrieved from this zip file instead of the default UI resource set.
The zip file is required to be located in the directory specified in the instance.properties file under iam.loginapp.ui.resource-sets.dir. It can also be located in a subfolder if necessary.
It must be ensured that the zip file names only occur once, regardless of the file path.
It is possible to add new zip files or replace existing zip files while the application is running. Note that it is important to use an atomic file operation so that the zip files are recognized correctly.
Changing the folder structure by adding, renaming or removing folders as well as moving, renaming or deleting existing zip files is not supported. A restart is required for this to work properly.
Note that "UI Resource Set File Name" must only contain the file name without the file extension and only the characters A-Z, a-z, 0-9 as well as the special characters '-' and '_' are allowed as zip file names.
If there are zip files with duplicate names in the iam.loginapp.ui.resource-sets.dir directory, an exception is thrown during startup. If a duplicate zip file is added while the application is running, an error message is displayed in the console.
type: com.airlock.iam.login.application.configuration.uiresource.RequestUrlPatternUiResourceSetRuleConfig
id: RequestUrlPatternUiResourceSetRuleConfig-xxxxxx
displayName:
comment:
properties:
requestUrlPattern:
uiResourceSetFileName:
Request URL Pattern UI Tenant ID Rule
requestUrlPattern
) If the request URL matches this pattern, the UI Tenant ID is set to the value configured in UI Tenant ID Value.
The request URL considered here is the URL of the first request made to the IAM backend to start the flow, not the URL entered into the end-client browser.
The request URL checked against this pattern includes the protocol, host, port and path, but excludes query parameters.
uiTenantIdValue
)
type: com.airlock.iam.flow.shared.application.configuration.uitenantid.RequestUrlPatternUiTenantIdRuleConfig
id: RequestUrlPatternUiTenantIdRuleConfig-xxxxxx
displayName:
comment:
properties:
requestUrlPattern:
uiTenantIdValue:
Requested Authentication Context Mapping
requestedAuthnContextValue
) flowApplicationId
)
type: com.airlock.iam.saml2.application.configuration.Saml2RequestedAuthnContextToApplicationIdConfig
id: Saml2RequestedAuthnContextToApplicationIdConfig-xxxxxx
displayName:
comment:
properties:
flowApplicationId:
requestedAuthnContextValue:
Requested Resource Or Audience Condition
requestedResource
) Matches the "resource" parameter(s) from the token exchange request. Matches only if configured.
Notice that ".*" even matches when there is no resource parameter in the request.
requestedAudience
) Matches the "audience" parameter(s) from the token exchange request. Matches only if configured.
Notice that ".*" even matches when there is no audience parameter in the request.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.condition.TargetOAuth2TokenExchangeRuleConditionConfig
id: TargetOAuth2TokenExchangeRuleConditionConfig-xxxxxx
displayName:
comment:
properties:
requestedAudience:
requestedResource:
Required Characters Password Policy
This plugin can - for example - be used to assure that a password contains at least one letter and one digit.
patterns
) Every character of the password is matched against this pattern.
For details about regular expression syntax, please refer to the class description of the Java JDK class java.util.regex.Pattern of the used Java JDK.
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyRequiredCharsCheck
id: PwdPolicyRequiredCharsCheck-xxxxxx
displayName:
comment:
properties:
patterns:
Required Checkbox State
translationKey
) checkedExpected
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.validation.CheckboxStateValidationConfig
id: CheckboxStateValidationConfig-xxxxxx
displayName:
comment:
properties:
checkedExpected: true
translationKey:
Required Field
translationKey
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.validation.RequiredValidationConfig
id: RequiredValidationConfig-xxxxxx
displayName:
comment:
properties:
translationKey:
Required Scopes Claim Condition Config
scopes
)
type: com.airlock.iam.oauth2.application.configuration.claims.conditions.RequiredScopesClaimConditionConfig
id: RequiredScopesClaimConditionConfig-xxxxxx
displayName:
comment:
properties:
scopes:
Resource Access Controller
allowRules
)
type: com.airlock.iam.common.application.configuration.authorization.ResourceAccessController
id: ResourceAccessController-xxxxxx
displayName:
comment:
properties:
allowRules:
Resource Access Rule
pathPattern
) methodPattern
) roles
)
type: com.airlock.iam.common.application.configuration.authorization.ResourceAccessControllerAccessRule
id: ResourceAccessControllerAccessRule-xxxxxx
displayName:
comment:
properties:
methodPattern:
pathPattern:
roles:
Response Header Ticket Adder Config
headerName
)
type: com.airlock.iam.login.application.configuration.idpropagation.ResponseHeaderTicketAdderConfig
id: ResponseHeaderTicketAdderConfig-xxxxxx
displayName:
comment:
properties:
headerName:
REST API Invocation
url
) method
) withoutPayload
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.RestApiInvocationConfig
id: RestApiInvocationConfig-xxxxxx
displayName:
comment:
properties:
method: POST
url:
withoutPayload: false
REST Client Config
Note that this REST client does not support cookies.
serverUrls
) retryPolicy
) timeout
) connectionPoolMaxSize
) trustStorePath
) trustStorePassword
) keyStorePath
) keyStorePassword
) basicAuthCredentials
) requestEntityProcessing
) The options are:
- BUFFERED: the entity will be buffered and the content length will be sent in the Content-Length header.
- CHUNKED: chunked encoding will be used and the entity will be streamed.
connectionManagerTimeout
) proxyUri
) proxyLoginUser
) proxyLoginPassword
) staticRestRequestHeaders
) staticRestRequestHeaderStrategy
) The options are:
- OVERWRITE_EXISTING: if there is already a value for the configured header name it is overwritten with the configured value.
- KEEP_ORIGINAL: the already existing header value is kept and the configured value is ignored.
type: com.airlock.iam.common.infrastructure.restclient.RestClientConfig
id: RestClientConfig-xxxxxx
displayName:
comment:
properties:
basicAuthCredentials:
connectionManagerTimeout: 10000
connectionPoolMaxSize: 50
keyStorePassword:
keyStorePath:
proxyLoginPassword:
proxyLoginUser:
proxyUri:
requestEntityProcessing: CHUNKED
retryPolicy:
serverUrls:
staticRestRequestHeaderStrategy: OVERWRITE_EXISTING
staticRestRequestHeaders:
timeout: 10000
trustStorePassword:
trustStorePath:
Retry If Server Not Reachable Policy
type: com.airlock.iam.common.infrastructure.restclient.RetryIfServerNotReachablePolicy
id: RetryIfServerNotReachablePolicy-xxxxxx
displayName:
comment:
properties:
Risk Assessment Step
riskExtractorConfigs
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.risk.RiskAssessmentStepConfig
id: RiskAssessmentStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
riskExtractorConfigs:
skipCondition:
stepId:
tagsOnSuccess:
Risk Tag Plugin
name
)
type: com.airlock.iam.authentication.application.configuration.risk.RiskTagPlugin
id: RiskTagPlugin-xxxxxx
displayName:
comment:
properties:
name:
Role Timeout Rule Config
timeoutIdentifier
) idleTimeout
) lifeTime
)
type: com.airlock.iam.login.application.configuration.targetapp.RoleTimeoutRuleConfig
id: RoleTimeoutRuleConfig-xxxxxx
displayName:
comment:
properties:
idleTimeout:
lifeTime:
timeoutIdentifier:
Role Transformation Rule
pattern
) If no substring of the input matches the expression then an empty role name is returned which effectively deletes it.
template
)
type: com.airlock.iam.login.app.misc.configuration.targetapps.RoleTransformationRule
id: RoleTransformationRule-xxxxxx
displayName:
comment:
properties:
pattern:
template:
Role Transformation Rule (Radius)
pattern
) template
)
type: com.airlock.iam.servicecontainer.app.application.configuration.RoleTransformationRuleConfig
id: RoleTransformationRuleConfig-xxxxxx
displayName:
comment:
properties:
pattern:
template:
Role-based Access Control
restServiceAccessController
) listUsers
) viewUser
) viewUserLogs
) viewContextData
) detailedViewContextData
) displayUserManagementExtensions
) The JavaScript file that contains the User Management Extensions always has the same accessibility as the rest of the Adminapp UI and can be accessed by unauthenticated users/administrators.
At least one of the listed, comma-separated roles are sufficient. Without a value, access is always denied. The special value 'NO RESTRICTION' allows access for any authenticated admin, without role restrictions.
detailedDisplayUserManagementExtensions
) This setting does not influence the delivered JavaScript for the User Management Extension. It will always contain the code for all User Management Extensions.
editUser
) detailedEditContextData
) editUsername
) deleteUser
) createUser
) lockUser
) unlockUser
) manageOAuth2Consents
) orderPassword
) unorderPassword
) deletePassword
) generatePassword
) triggerPasswordReset
) viewToken
) editToken
) orderNewToken
) unorderNewToken
) deleteToken
) activateToken
) deactivateToken
) generateTokenIak
) manageTokens
) viewOathOtpTokenSecret
) viewAirlock2FAActivationSecret
) viewCrontoActivationSecret
) viewTechnicalClients
) createEditTechnicalClient
) deleteTechnicalClient
) lockTechnicalClient
) unlockTechnicalClient
) listMaintenanceMessages
) editMaintenanceMessage
) deleteMaintenanceMessage
) listAdministrators
) viewAdministrator
) editAdministrator
) Roles required to edit administrators. At least one of the listed, comma-separated roles are sufficient. Without a value, access is always denied. The special value 'NO RESTRICTION' allows access for any authenticated admin, without role restrictions.
CAUTION: Editing administrators includes assigning roles to administrators. Thus, an administrator with this privilege is able to assign this privilege also to other administrators.
deleteAdministrator
) createAdministrator
) lockAdministrator
) unlockAdministrator
) deleteAdministratorPassword
) changeAdministratorPassword
) generateAdministratorPassword
) editConfig
) applyConfig
) Roles required to apply configurations. At least one of the listed, comma-separated roles are sufficient. Without a value, access is always denied. The special value 'NO RESTRICTION' allows access for any authenticated admin, without role restrictions.
CAUTION: Because administrator access control is also part of the configuration, an administrator with this privilege can possibly gain all possible administrator rights.
viewLog
) viewLicense
) accessServiceContainer
)
type: com.airlock.iam.admin.application.configuration.RoleBasedAccessControllerConfig
id: RoleBasedAccessControllerConfig-xxxxxx
displayName:
comment:
properties:
accessServiceContainer:
activateToken:
applyConfig:
changeAdministratorPassword:
createAdministrator:
createEditTechnicalClient:
createUser:
deactivateToken:
deleteAdministrator:
deleteAdministratorPassword:
deleteMaintenanceMessage:
deletePassword:
deleteTechnicalClient:
deleteToken:
deleteUser:
detailedDisplayUserManagementExtensions:
detailedEditContextData:
detailedViewContextData:
displayUserManagementExtensions:
editAdministrator:
editConfig:
editMaintenanceMessage:
editToken:
editUser:
editUsername:
generateAdministratorPassword:
generatePassword:
generateTokenIak:
listAdministrators:
listMaintenanceMessages:
listUsers:
lockAdministrator:
lockTechnicalClient:
lockUser:
manageOAuth2Consents:
manageTokens:
orderNewToken:
orderPassword:
restServiceAccessController:
triggerPasswordReset:
unlockAdministrator:
unlockTechnicalClient:
unlockUser:
unorderNewToken:
unorderPassword:
viewAdministrator:
viewAirlock2FAActivationSecret:
viewContextData:
viewCrontoActivationSecret:
viewLicense:
viewLog:
viewOathOtpTokenSecret:
viewTechnicalClients:
viewToken:
viewUser:
viewUserLogs:
Role-based Access Controller
rules
)
type: com.airlock.iam.core.misc.impl.authorization.RoleBasedAccessController
id: RoleBasedAccessController-xxxxxx
displayName:
comment:
properties:
rules:
Role-based Access Rule
requiredRoles
) action
)
type: com.airlock.iam.core.misc.impl.authorization.RoleBasedAccessControllerAccessRule
id: RoleBasedAccessControllerAccessRule-xxxxxx
displayName:
comment:
properties:
action:
requiredRoles:
Role-based Authenticator Selector
Authenticator plugin that selects one of several configured authenticators depending on the user roles granted before the authentication process. The user roles are compared against a list of mappings. One mapping consists of a list of roles and an authenticator. The first mapping containing a role of the user defines the authenticator to be used for the rest of the authentication process.
If no mapping matches, the default authenticator is used.
Note: This plugin does not check the status of the user account (locked, invalid) and does not update login statistics (failed logins, etc.). It can therefore only be used in conjunction with another authenticator (e.g. Main Authenticator or Meta Authenticator).
mappings
) defaultAuthenticator
) userPersister
)
type: com.airlock.iam.core.misc.impl.authen.RoleBasedAuthenticatorSelector
id: RoleBasedAuthenticatorSelector-xxxxxx
displayName:
comment:
properties:
defaultAuthenticator:
mappings:
userPersister:
Role-based Gateway Role
userRoleName
) - If the "Gateway Mapping Role" is not defined, the user role name is used as Airlock Gateway role. In this case, the role name must not include special characters.
- Otherwise, the "Gateway Mapping Role" is used as Airlock Gateway role.
wafCredentialName
) idleTimeout
) lifetime
)
type: com.airlock.iam.login.application.configuration.targetapp.UserRoleWafCredentialProviderConfig
id: UserRoleWafCredentialProviderConfig-xxxxxx
displayName:
comment:
properties:
idleTimeout:
lifetime:
userRoleName:
wafCredentialName:
Role-based OAuth 2.0 Scope Condition
Configures a OAuth 2.0 scope condition.
The scope is matched against the "Scope Matcher" pattern. A scope is allowed if it matches the regex and it is covered by a matching role.
scopeMatcher
) roleProvider
)
type: com.airlock.iam.oauth2.application.configuration.scope.RoleBasedOAuth2ScopeConditionConfig
id: RoleBasedOAuth2ScopeConditionConfig-xxxxxx
displayName:
comment:
properties:
roleProvider:
scopeMatcher:
Role-based Tag Acquisition Step
Note that this step must be preceded by a user-identifying step.
roleProviders
) roleToTagMappings
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.step.RoleBasedTagAcquisitionStepConfig
id: RoleBasedTagAcquisitionStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
roleProviders:
roleToTagMappings:
skipCondition:
stepId:
tagsOnSuccess:
Roles from Attribute
attributeType
) The RADIUS attribute type of the attribute to look at.
Either one of the suggested attributes or the number (not the name) of any other attribute can be chosen. The attribute type must be String.
representation
)
type: com.airlock.iam.core.misc.impl.authen.radius.RadiusAttributeRoleExtractor
id: RadiusAttributeRoleExtractor-xxxxxx
displayName:
comment:
properties:
attributeType:
representation: Comma-separated
Roles from Password Check
type: com.airlock.iam.login.application.configuration.targetapp.PasswordCheckRolesProviderConfig
id: PasswordCheckRolesProviderConfig-xxxxxx
displayName:
comment:
properties:
Roles Provider Config
The following values are provided:
- roles: a string with the concatenated roles (including timeout and lifetime if present).
- roles-list: the roles as a list (including timeout and lifetime if present).
- role-names: a string with the concatenated role names (without timeout and lifetime).
- role-names-list: the role names as a list (without timeout and lifetime).
roleProviders
) separator
) encoders
)
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.RolesProviderConfig
id: RolesProviderConfig-xxxxxx
displayName:
comment:
properties:
encoders:
roleProviders:
separator: ,
Roles SAML 2.0 Attribute
samlAttributeName
) roleProviders
) nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.RolesFlowAttributeConfig
id: RolesFlowAttributeConfig-xxxxxx
displayName:
comment:
properties:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
roleProviders:
samlAttributeName:
Roles-to-Authenticator Mapping
rolesBeforeAuthentication
) authenticator
)
type: com.airlock.iam.core.misc.impl.authen.RoleBasedAuthenticatorSelectorMapping
id: RoleBasedAuthenticatorSelectorMapping-xxxxxx
displayName:
comment:
properties:
authenticator:
rolesBeforeAuthentication:
RSA Encryption
publicKeyFile
) privateKeyFile
) openssl genrsa -des3 -out newkey.pem
openssl pkcs8 -topk8 -in newkey.pem -out encryptedprivatekey.key -outform der
privateKeyPassphrase
)
type: com.airlock.iam.core.misc.util.crypto.RsaEncryption
id: RsaEncryption-xxxxxx
displayName:
comment:
properties:
privateKeyFile:
privateKeyPassphrase:
publicKeyFile:
RSA Sign Ticket Decoder
For a description of the encoding see class description
verificationKeyFile
)
type: com.airlock.iam.core.misc.util.ticket.codec.sign.RSASignTicketDecoder
id: RSASignTicketDecoder-xxxxxx
displayName:
comment:
properties:
verificationKeyFile:
RSA Sign Ticket Encoder
The ticket value syntax is as follows:
{name=[value{,value}];}
where the names, values and rolenames are UTF-8 encoded.
Example:medusaID=1234;uname=smith;roles=customer,employee;name1=value1;name2=value2;
The ticket string (as above) is interpreted as byte array (ASCII encoding) from here on. The expiry date is appended to the ticket string: The milliseconds since midnight 01.01.1970 appended as 64 bit signed integer (MSB first).
An RSA signature is calculated over the result from above and preprended to the result from above.
Useopenssl
to produce the key files like this:openssl genrsa -out signkey.pem 4096
openssl pkcs8 -topk8 -nocrypt -in signkey.pem -outform der -out signkey.pkcs8
openssl rsa -in signkey.pem -pubout -outform der -out verifykey.x509
signingKeyFile
) compress
)
type: com.airlock.iam.core.misc.util.ticket.codec.sign.RSASignTicketEncoder
id: RSASignTicketEncoder-xxxxxx
displayName:
comment:
properties:
compress: false
signingKeyFile:
RSA v1.5 Key Transport Algorithm
type: com.airlock.iam.saml2.application.configuration.SamlRsa15KeyTransportAlgorithmConfig
id: SamlRsa15KeyTransportAlgorithmConfig-xxxxxx
displayName:
comment:
properties:
RSA-OAEP Key Transport Algorithm
oaepParams
) Encoding parameters P as described in RFC 2437.
Must be a Base64 encoded value.
type: com.airlock.iam.saml2.application.configuration.SamlRsaOaepKeyTransportAlgorithmConfig
id: SamlRsaOaepKeyTransportAlgorithmConfig-xxxxxx
displayName:
comment:
properties:
oaepParams:
Same Flow Redirect Target Config
Redirects to the same flow the user is currently on. This is effectively a restart of the same flow.
This plugin cannot be used outside of flows (e.g. on portal or token management pages).
type: com.airlock.iam.flow.ui.application.configuration.SameFlowRedirectTargetConfig
id: SameFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
SAML 2.0 Assertion String Attribute Importer
Import a single-value String attribute from a SAML 2.0 assertion into a flow session.
If the provided attribute is multi-valued, the last value is used (for backward compatibility) and a warning is logged (if there are multiple attributes with the same name, the last value of the last attribute is used).
An imported attribute can be used afterwards in any plugin that uses a String value provider by configuring a 'Generic Session Attribute String Provider'.
attributeName
) key
) failIfEmpty
)
type: com.airlock.iam.saml2.application.configuration.sp.Saml2SpAssertionStringAttributeImportConfig
id: Saml2SpAssertionStringAttributeImportConfig-xxxxxx
displayName:
comment:
properties:
attributeName:
failIfEmpty: false
key:
SAML 2.0 Config
samlFlowIdpSettings
) samlFlowSpSettings
) enableSingleLogoutOnSps
) customSpSsoInitializationUri
) The URI to start or continue the correct authentication flow after receiving an assertion from the Identity Provider (either using IdP- or SP-initiated SSO).
Must only be configured when using a custom SPA.
Relative URIs not starting with a slash are resolved against the current context path.
When customized and behind an Airlock Gateway (WAF), a "URL Encryption Exception" must be configured.
customLogoutUri
) The URI to start the logout process in the UI.
This is used during IdP-initiated Single-Logout (the logout is started by an Identity Provider). In this case, the browser must first be redirected to the UI in order to start the regular logout before being able to finish the SAML 2.0 Single-Logout.
Must only be configured when using a custom SPA.
Relative URIs not starting with a slash are resolved against the current context path.
When customized and behind an Airlock Gateway (WAF), a "URL Encryption Exception" must be configured.
customLogoutResumeUriPattern
) During SP-Initiated Single-Logout (SLO), the SPA has to send the location where to resume the logout process after SAML 2.0 Single-Logout has been finished using a "Location" URL parameter.
If not configured, the standard URL for logout resume in the Loginapp UI (ui/app/auth/logout/resume) will be used.
That absolute location will be validated against this pattern.Must only be configured when using a custom SPA.
If behind an Airlock Gateway (WAF), a "URL Encryption Exception" must also be configured for this URL.
samlFederationConfig
)
type: com.airlock.iam.saml2.application.configuration.SamlConfig
id: SamlConfig-xxxxxx
displayName:
comment:
properties:
customLogoutResumeUriPattern:
customLogoutUri:
customSpSsoInitializationUri:
enableSingleLogoutOnSps: true
samlFederationConfig:
samlFlowIdpSettings:
samlFlowSpSettings:
SAML 2.0 Flow IdP
Enables and configures the SAML 2.0 Identity Provider (IdP) for use in the flow-based authentication.
The IdP provides assertions to receiving applications called "SAML Service Providers".
idpEntitySettings
) serviceProviders
) authnContextMappings
) Assertions contain an 'Authentication Context Class Reference' referencing the type or strength of the performed authentication of the user. This can be used by a Service Provider (SP) in order to assess the level of confidence it can put in the assertion.
If configured, the first fulfilled condition defines the final 'Authentication Context Class Reference'. If left empty (or no condition is fulfilled), the logic of the "Default Authentication Context" takes place. (See property description)
defaultAuthnContextUri
) Assertions contain an 'Authentication Context Class Reference' referencing the type or strength of the performed authentication of the user. This can be used by a Service Provider (SP) in order to assess the level of confidence it can put in the assertion.
This property defines the default 'Authentication Context Class Reference' used if no URI can be determined based on the 'Authentication Context Mappings'.
If left empty, the SAML default resolution is used which also honors the requested URI of an SP in the SP-initiated SSO scenario. For IdP-initiated SSO or if no requested 'Authentication Context Class Reference' can be met in SP-initiated SSO, the first URI defined in the IdP extended metadata file is used (see the "Extended Metadata File" property in the IdP entity settings).
The available context classes are configured in the IdP extended metadata attribute "idpAuthncontextClassrefMapping". Only URIs defined by the attribute are valid to be set here.
customAuthenticationUri
) The URI to start authentication in case of SP-Initiated SSO.
Must only be configured when using a custom SPA.
Relative URIs not starting with a slash are resolved against the current context path.
When customized and behind an Airlock Gateway (WAF), a "URL Encryption Exception" must be configured.
customLogoutUri
) The URI to start the logout process in the UI.
This is mainly used in SP-initiated Single-Logout (the logout is started by a Service Provider). In this case, the browser must first be redirected to the UI in order to start the regular logout before being able to finish the SAML 2.0 Single-Logout (SLO).
It is also used in certain error cases where a logout must be performed.
Must only be configured when using a custom SPA.
Relative URIs not starting with a slash are resolved against the current context path.
When customized and behind an Airlock Gateway (WAF), a "URL Encryption Exception" must be configured.
customLogoutResumeUriPattern
) During IdP-Initiated Single-Logout (SLO), the SPA has to send the location where to resume the logout process after SAML 2.0 Single-Logout has been finished using a "Location" URL parameter.
If not configured, the standard URL for logout resume in the Loginapp UI (ui/app/auth/logout/resume) is used.
That absolute location will be validated against this pattern.Must only be configured when using a custom SPA.
If behind an Airlock Gateway (WAF), a "URL Encryption Exception" must also be configured for this URL.
temporarySloCredentialProvider
) The Airlock Gateway (WAF) role granted to a user on IdP logout before performing the SP logout requests.
Allows requests to temporarily access protected logout endpoints during single-logout if the SP is protected by the same Airlock Gateway (WAF). Without a temporary credential, the logout might not work properly on the SP.
The temporary credential should only be used to protect the logout URLs of the SPs in their corresponding mapping configuration in Airlock Gateway (WAF).
For the sake of security, it is recommended to set an Idle Timeout and a Lifetime as low as possible. In order to guarantee that the SLO flow terminates even with slow connections (e.g. mobile connections), a value of 60 seconds is recommended for both properties.
clearGatewaySessionOnSlo
) - SPs which are behind the same Airlock Gateway (WAF) as Airlock IAM to which the logout is propagated, will not recognize the session because the session-cookie has already been deleted at that point.
- Logout propagation configured on the Airlock Gateway (WAF) does not work, because the session cookie of the corresponding backend will have been deleted at this point.
Regardless of this setting, the Airlock Gateway (WAF) session will be terminated at the end of a single-logout, which means that all cookies and credentials will be deleted.
protocol
) (see the "Metadata File" and "Extended Metadata File" properties in the IdP entity settings. Together with the other values, this must match one of the entries in 'Server List'.
host
) (see the "Metadata File" and "Extended Metadata File" properties in the IdP entity settings. Together with the other values, this must match one of the entries in 'Server List'.
port
) (see the "Metadata File" and "Extended Metadata File" properties in the IdP entity settings. Together with the other values, this must match one of the entries in 'Server List'.
contextPath
) (see the "Metadata File" and "Extended Metadata File" properties in the IdP entity settings. Together with the other values, this must match one of the entries in 'Server List'.
serverList
) For load balancing, specify all participating servers in the form "<protocol>://<hostname>:<port>/<path>".
This list must be specified on ALL participating load balanced servers for all servers identically.
This setting is only used if more than one server is involved.
type: com.airlock.iam.saml2.application.configuration.Saml2FlowIdpConfig
id: Saml2FlowIdpConfig-xxxxxx
displayName:
comment:
properties:
authnContextMappings:
clearGatewaySessionOnSlo: false
contextPath:
customAuthenticationUri:
customLogoutResumeUriPattern:
customLogoutUri:
defaultAuthnContextUri:
host:
idpEntitySettings:
port:
protocol: https
serverList:
serviceProviders:
temporarySloCredentialProvider:
SAML 2.0 Flow SP
Configures a local SAML Service Provider (SP).
The SAML SP receives assertions from other SAML Identity Providers (IdPs). The Airlock IAM Loginapp can also act as identity provider, i.e. issue SAML assertions for other SPs. See separate configuration section for further details.
spEntityConfig
) remoteIdpEntitySettings
) usernameTransformers
) authnRequestBinding
) The binding to be used for the authentication request in SP-Initiated SSO.
Important: if an explicit binding type is configured, the same binding must also be enabled in the IdP's standard metadata.
- Automatic: Automatically selects the first enabled binding in the IdP standard metadata.
- HTTP Redirect Binding: The authentication request is carried directly in the URL query string of an HTTP GET request. Since the length of URLs is limited in practice, the HTTP Redirect binding is only suitable for short messages. Longer messages (e.g. signed requests or if large extensions are added) should be transmitted via the POST binding.
- HTTP POST Binding: The authentication request is sent by the user's browser as a POST parameter via a self-posting form using JavaScript. This binding is recommended for long authentication requests or when there is no direct communication between the IdP and the SP. It requires that JavaScript is enabled in the user's browser.
customAuthnRequestExtensions
) With this property any custom extensions can be added to the AuthnRequest. This can e.g. be used to request additional attributes from the IdP. The extensions must be given as valid XML string, without the surrounding <Extension>
tag.
defaultFlowApplicationId
) If this property is not configured, the "Default Application" defined in "Authentication Flows" will be used.
attributeToImportAsUserId
) attributeToImportAsLanguage
) Valid language values from the IdP should conform to the format specified by ISO 639-1 (two characters).
attributeToImportAsAuditToken
) Note that the audit token cannot be overwritten. This means if it was previously already set (e.g. upon successful completion of a previous authentication flow), the value imported here will be ignored.
attributeToImportAsAuthTokenId
) attributeNameToTagMappingConfigs
) attributesToImport
)
type: com.airlock.iam.saml2.application.configuration.sp.Saml2FlowSpConfig
id: Saml2FlowSpConfig-xxxxxx
displayName:
comment:
properties:
attributeNameToTagMappingConfigs:
attributeToImportAsAuditToken:
attributeToImportAsAuthTokenId:
attributeToImportAsLanguage:
attributeToImportAsUserId:
attributesToImport:
authnRequestBinding: AUTOMATIC
customAuthnRequestExtensions:
defaultFlowApplicationId:
remoteIdpEntitySettings:
spEntityConfig:
usernameTransformers:
SAML 2.0 Identity Propagator
serviceProviderId
) headerURIPropagationConfig
)
type: com.airlock.iam.saml2.application.configuration.Saml2IdentityPropagatorConfig
id: Saml2IdentityPropagatorConfig-xxxxxx
displayName:
comment:
properties:
headerURIPropagationConfig:
serviceProviderId:
SAML 2.0 Identity Provider Entity
entityId
) metaDataFile
) The name of the file containing the standard metadata of this entity.
Can either be relative to the config root or absolute.
NOTE: When the metadata is changed, the login application needs to be restarted.
extendedMetaDataFile
) The name of the file containing the extended metadata of this entity.
Can either be relative to the config root or absolute.
NOTE: When the metadata is changed, the login application needs to be restarted.
type: com.airlock.iam.saml2.application.configuration.Saml2IDPEntityConfig
id: Saml2IDPEntityConfig-xxxxxx
displayName:
comment:
properties:
entityId:
extendedMetaDataFile:
metaDataFile:
SAML 2.0 Service Provider
Configures a SAML 2.0 Service Provider (SP) for use in the Flow-Based Authentication.
spEntityConfig
) defaultFlowApplicationId
) requestedAuthnContextToFlowAppId
) The mappings are applied in the order in which they are configured. When left empty, the configured "Default Flow Application ID" authentication flow is started.
idpInitiatedRelayStateUri
) attributes
)
type: com.airlock.iam.saml2.application.configuration.Saml2ServiceProviderAccessConfig
id: Saml2ServiceProviderAccessConfig-xxxxxx
displayName:
comment:
properties:
attributes:
defaultFlowApplicationId:
idpInitiatedRelayStateUri:
requestedAuthnContextToFlowAppId:
spEntityConfig:
SAML 2.0 Service Provider Entity
Configures a specific SAML 2.0 Service Provider (SP).
entityId
) metaDataFile
) The name of the file containing the standard metadata of this entity.
Can either be relative to the config root or absolute.
NOTE: When the metadata is changed, the login application needs to be restarted.
extendedMetaDataFile
) The name of the file containing the extended metadata of this entity.
Can either be relative to the config root or absolute.
NOTE: When the metadata is changed, the login application needs to be restarted.
type: com.airlock.iam.saml2.application.configuration.Saml2SPEntityConfig
id: Saml2SPEntityConfig-xxxxxx
displayName:
comment:
properties:
entityId:
extendedMetaDataFile:
metaDataFile:
SAML 2.0 Service Provider Entity ID
spEntityId
)
type: com.airlock.iam.saml2.application.configuration.Saml2ServiceProviderIdConfig
id: Saml2ServiceProviderIdConfig-xxxxxx
displayName:
comment:
properties:
spEntityId:
SAML 2.0 SP Entity ID Pattern UI Tenant ID Rule
spEntityIdPattern
) uiTenantIdValue
)
type: com.airlock.iam.saml2.application.configuration.idp.Saml2SpEntityIdPatternUiTenantIdRuleConfig
id: Saml2SpEntityIdPatternUiTenantIdRuleConfig-xxxxxx
displayName:
comment:
properties:
spEntityIdPattern:
uiTenantIdValue:
SAML 2.0 SP Entity ID UI Tenant ID Rule
type: com.airlock.iam.saml2.application.configuration.idp.Saml2SpEntityIdUiTenantIdRuleConfig
id: Saml2SpEntityIdUiTenantIdRuleConfig-xxxxxx
displayName:
comment:
properties:
SAML 2.0 SP User Identifying Step
User identifying step for SAML 2.0 single sign-on (SSO) on IAM as service provider (SP).
If the SAML 2.0 handshake was already initiated by the identity provider (IdP), this step consumes the assertion. If no handshake took place yet, this step first initiates an SP-Initiated SSO (and redirects to the IdP) and when returning consumes the assertion.
entityId
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.saml2.application.configuration.sp.Saml2UserIdentifyingStepConfig
id: Saml2UserIdentifyingStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: SAML2
customFailureResponseAttributes:
customResponseAttributes:
entityId:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
SAML Access Cookie Identity Propagator
This plugin performs a HTTP POST request with a SAML 2.0 assertion to an application and expects this application to set one or more access cookies. Those cookies are then added to the current response.
accessCookieSourceUrl
) httpParamSaml
) httpParams
) In many cases, the submit button value must be sent to an application to make it think that the button has been pressed.
allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- In keystores like JKS, the keystore can be opened and used but the integrity of the keystore is not checked.
- In keystores like PKCS12, the keystore cannot be opened an an error occurs.
connectTimeout
) correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) cookies
) issuer
) subjectTemplate
) subjectConfirmationMethod
) nameIdFormat
) spProvidedId
) attributes
) assertionValidityMillis
) assertionNotBeforeSkewMillis
) xmlSignatureAlgorithm
) The (deprecated) value "SHA1 (automatic RSA/DSA)" automatically chooses "http://www.w3.org/2000/09/xmldsig#rsa-sha1" or "http://www.w3.org/2000/09/xmldsig#dsa-sha1" depending on the type of the key found in the keystore. However please use a more secure hash instead, as SHA-1 is not considered to be secure.
xmlSignatureDigestMethod
) keystoreFile
) keystorePassword
) signingKeyAlias
) signingKeyPassword
) audienceRestrictions
) If set, adds the given audiences to an AudienceRestriction element. This is usually not required. Each element of this list is included in the AudienceRestriction as a separate Audience.
e.g. If this list contains the Strings:{"https://1.airlock.com","https://2.airlock.com"}
the resulting condition contains:
<saml:Conditions ...>
<saml:AudienceRestriction>
<saml:Audience>https://1.airlock.com</saml:Audience>
<saml:Audience>https://2.airlock.com</saml:Audience>
</saml:AudienceRestriction>
</saml:Conditions>
enableSubjectConfirmation
) enableAuthnStatement
)
type: com.airlock.iam.saml2.application.configuration.SamlAccessCookieIdentityPropagator
id: SamlAccessCookieIdentityPropagator-xxxxxx
displayName:
comment:
properties:
accessCookieSourceUrl:
allowOnlyTrustedCerts: true
assertionNotBeforeSkewMillis: 5000
assertionValidityMillis: 30000
attributes:
audienceRestrictions:
connectTimeout: 10
cookies:
correlationIdHeaderName:
enableAuthnStatement: true
enableSubjectConfirmation: true
httpParamSaml:
httpParams:
issuer:
keystoreFile:
keystorePassword:
nameIdFormat: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
signingKeyAlias:
signingKeyPassword:
spProvidedId:
subjectConfirmationMethod: urn:oasis:names:tc:SAML:2.0:cm:sender-vouches
subjectTemplate: ${userId}
trustStorePassword:
trustStorePath:
trustStoreType: JKS
verifyServerHostname: true
xmlSignatureAlgorithm: http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
xmlSignatureDigestMethod: http://www.w3.org/2001/04/xmlenc#sha256
SAML Assertion Cookie Identity Propagator
cookieName
) Note that only one cookie per cookie path and name can exist. Make sure that this cookie name does not clash with other cookie's names. For example, do not use session cookie names such as "JSESSIONID".
cookiePath
) If one single assertion cookie is used for all applications, the value "/" can be used. If different tickets are used for different applications, the application's path should be used.
Note that only one cookie per cookie path and name can exist. Make sure that this cookie name does not clash with other cookie's names. For example, do not use session cookie names such as "JSESSIONID".
Make sure the configuration flag Interpret Cookie Domains is set in the Airlock Gateway (WAF) configuration. If not, the cookie path is ignored and cookies in the cookie store are sent to any back-end HTTP request of the same session. This also means that there may be only one cookie per cookie name!
It is best to consult the corresponding documentation of the web entry server or reverse proxy to get more accurate information on cookie handling.
cookieDomain
) Because of security restrictions in browsers (same origin policy) it is usually not possible to set a cookie for a different domain unless the right-most two domain parts (e.g. "ergon.ch") are equal to that of the application setting the cookie.
It is possible that there are further restrictions regarding this in browsers.
If you are using a HTTP reverse proxy that stores the cookie in its session store (and does not send it to the client), make sure to understand the proxies interpretation of the cookie domain and cookie path.
Make sure the configuration flag Interpret Cookie Domains is set in the Airlock Gateway (WAF) configuration. If not the cookie domain is ignored and cookies in the cookie store are sent to any back-end HTTP request of the same session. The cookie path is also ignored meaning that there may be only one cookie per cookie name!
Airlock also supports the following cookie domain values (if the flag Interpret Cookie Domains is set):
- The value
.*
results in cookies being sent to all back-end servers. This is especially useful if one authentication ticket is used for multiple back-ends. - The value
@<fully-qualified-host>
results in the cookie being treated as if it were set by the host specified by "<fully-qualified-host>". If using this value, make sure the corresponding mapping also uses the fully qualified hostname.
If one single assertion cookie is used for all applications, the value "/" can be used. If different cookies are used for different applications, the applications path should be used.
cookieSecureFlag
) If the cookie is marked as secure, the browser (and any HTTP proxy behaving like a browser) should send the cookie only over secure connections.
Caution: If you think that setting this flag makes your application more secure, remember that this flag just "asks" the browser to not transmit the cookie over unencrypted connections.
cookieEncodingScheme
) Make sure that the component receiving the ticket uses the same URL encoding scheme.
issuer
) subjectTemplate
) subjectConfirmationMethod
) nameIdFormat
) spProvidedId
) attributes
) assertionValidityMillis
) assertionNotBeforeSkewMillis
) xmlSignatureAlgorithm
) The (deprecated) value "SHA1 (automatic RSA/DSA)" automatically chooses "http://www.w3.org/2000/09/xmldsig#rsa-sha1" or "http://www.w3.org/2000/09/xmldsig#dsa-sha1" depending on the type of the key found in the keystore. However please use a more secure hash instead, as SHA-1 is not considered to be secure.
xmlSignatureDigestMethod
) keystoreFile
) keystorePassword
) signingKeyAlias
) signingKeyPassword
) audienceRestrictions
) If set, adds the given audiences to an AudienceRestriction element. This is usually not required. Each element of this list is included in the AudienceRestriction as a separate Audience.
e.g. If this list contains the Strings:{"https://1.airlock.com","https://2.airlock.com"}
the resulting condition contains:
<saml:Conditions ...>
<saml:AudienceRestriction>
<saml:Audience>https://1.airlock.com</saml:Audience>
<saml:Audience>https://2.airlock.com</saml:Audience>
</saml:AudienceRestriction>
</saml:Conditions>
enableSubjectConfirmation
) enableAuthnStatement
)
type: com.airlock.iam.saml2.application.configuration.SamlAssertionCookieIdentityPropagator
id: SamlAssertionCookieIdentityPropagator-xxxxxx
displayName:
comment:
properties:
assertionNotBeforeSkewMillis: 5000
assertionValidityMillis: 30000
attributes:
audienceRestrictions:
cookieDomain:
cookieEncodingScheme: UTF-8
cookieName:
cookiePath: /
cookieSecureFlag: false
enableAuthnStatement: true
enableSubjectConfirmation: true
issuer:
keystoreFile:
keystorePassword:
nameIdFormat: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
signingKeyAlias:
signingKeyPassword:
spProvidedId:
subjectConfirmationMethod: urn:oasis:names:tc:SAML:2.0:cm:sender-vouches
subjectTemplate: ${userId}
xmlSignatureAlgorithm: http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
xmlSignatureDigestMethod: http://www.w3.org/2001/04/xmlenc#sha256
SAML Federation Config
errorpageUrl
) - ui/app/error/message for Flow-based SAML2
Relative URIs not starting with a slash are resolved against the current context path.
When customized and behind an Airlock Gateway (WAF), a "URL Encryption Exception" must be configured.
maxContentLength
) This avoids unnecessary parsing of very long payloads, avoiding DoS attacks. Set to 0 (zero) to disable this check.
xmlSignatureKeystoreProvider
) If this IAM instance is only used as a service provider and does not make use of any signature nor encryption, the special "SAML No Cert Key Provider" can be used which does not require any keystores. Notice though that even a simple service provider should make use of signatures, especially with SP-initiated SSO and with Single-Logout (SLO).
xmlCanonicalizationAlgorithm
) xmlSignatureAlgorithm
) The (deprecated) value "SHA1 (automatic RSA/DSA)" automatically chooses "http://www.w3.org/2000/09/xmldsig#rsa-sha1" or "http://www.w3.org/2000/09/xmldsig#dsa-sha1" depending on the type of the key found in the keystore. However please use a more secure hash instead, as SHA-1 is not considered to be secure.
allowedXmlSignatureAlgorithms
) xmlSignatureDigestMethod
) xmlTransformationAlgorithm
) keyTransportAlgorithm
) passwordDecoder
) The default implementation also supports encrypted passwords using the "[ENC]" prefix.
debugProvider
) logProvider
) configurationProvider
) datastoreProvider
) sessionProvider
) idpAuthnContextMapper
) idpAccountMapper
) idpAttributeMapper
) spAdapter
) spAuthnContextMapper
)
type: com.airlock.iam.saml2.application.configuration.SamlFederationConfig
id: SamlFederationConfig-xxxxxx
displayName:
comment:
properties:
allowedXmlSignatureAlgorithms: [http://www.w3.org/2001/04/xmldsig-more#rsa-sha512, http://www.w3.org/2001/04/xmldsig-more#rsa-sha384, http://www.w3.org/2001/04/xmldsig-more#rsa-sha256]
configurationProvider: com.airlock.iam.saml2.infrastructure.plugin.configuration.ConfigurationInstanceImpl
datastoreProvider: com.airlock.iam.saml2.infrastructure.plugin.DataStoreProviderImpl
debugProvider: com.airlock.iam.saml2.infrastructure.plugin.DebugProviderImpl
errorpageUrl: ui/app/error/message
idpAccountMapper: com.airlock.iam.saml2.infrastructure.plugin.IDPAccountMapperImpl
idpAttributeMapper: com.airlock.iam.saml2.infrastructure.plugin.IDPAttributeMapperImpl
idpAuthnContextMapper: com.airlock.iam.saml2.infrastructure.plugin.IDPAuthnContextMapperImpl
keyTransportAlgorithm:
logProvider: com.airlock.iam.saml2.infrastructure.plugin.LoggerImpl
maxContentLength: 16384
passwordDecoder: com.airlock.iam.saml2.infrastructure.plugin.Saml2PasswordDecoder
sessionProvider: com.airlock.iam.saml2.infrastructure.plugin.SessionProviderImpl
spAdapter: com.airlock.iam.saml2.infrastructure.plugin.Saml2ServiceProviderAdapter
spAuthnContextMapper: com.airlock.iam.saml2.infrastructure.plugin.SPAuthnContextMapper
xmlCanonicalizationAlgorithm: http://www.w3.org/2001/10/xml-exc-c14n#
xmlSignatureAlgorithm: http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
xmlSignatureDigestMethod: http://www.w3.org/2001/04/xmlenc#sha256
xmlSignatureKeystoreProvider:
xmlTransformationAlgorithm: http://www.w3.org/2001/10/xml-exc-c14n#
SAML No Cert Key Provider
This means that no keystore needs to be created in such a minimal setup.
type: com.airlock.iam.saml2.application.configuration.SamlNoCertKeyProvider
id: SamlNoCertKeyProvider-xxxxxx
displayName:
comment:
properties:
SAML XML Signature Provider
keystore
) keystoreType
) keystorePasswordFile
) The contents are decoded using the "Password Decoder" in the "SAML Federation Config".
keystorePrivateKeyPasswordFile
) The contents are decoded using the "Password Decoder" in the "SAML Federation Config".
type: com.airlock.iam.login.app.misc.configuration.saml.SamlXmlSignatureProvider
id: SamlXmlSignatureProvider-xxxxxx
displayName:
comment:
properties:
keystore:
keystorePasswordFile:
keystorePrivateKeyPasswordFile:
keystoreType: jks
SAML2 Single-Logout Config
defaultTargetUri
) - No Location parameter is present on the request to the UI logout URI
- The Location parameter does not conform to the expected format for 'SP-initiated Single-Logout' or 'IdP-initiated Single-Logout'
As a consequence, this URI will be redirected to in all scenarios except an 'SP-initiated Single-Logout' or 'IdP-initiated Single-Logout' on a valid SAML session.
type: com.airlock.iam.login.rest.application.configuration.ui.authentication.logout.Saml2SingleLogoutConfig
id: Saml2SingleLogoutConfig-xxxxxx
displayName:
comment:
properties:
defaultTargetUri:
Scope Processor
allowedScopes
) The default value makes sure the scopes do not include characters outside the set %x20-21 / %x23-5B / %x5D-7E
(NQCHAR). For more information see RFC 6749.
type: com.airlock.iam.techclientreg.application.configuration.registration.ScopeProcessorConfig
id: ScopeProcessorConfig-xxxxxx
displayName:
comment:
properties:
allowedScopes: [[\x21\x23-\x5B\x5D-\x7E]+]
Script Execution Result Value Map Provider
namespaceConfig
) The script namespace from which to provide the values. If left empty, the values from scriptable steps with no configured namespace are provided.
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.ScriptExecutionResultValueMapProviderConfig
id: ScriptExecutionResultValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
namespaceConfig:
Script Namespace Config
identifier
)
type: com.airlock.iam.flow.shared.application.configuration.script.ScriptNamespaceConfig
id: ScriptNamespaceConfig-xxxxxx
displayName:
comment:
properties:
identifier:
Script Output Declaration
outputValueType
) - String: Can be any variable-length UTF-8 character sequence.
- Boolean: Required to be either "true" or "false" (i.e. not a binary digit).
- Number: Required to be an integer between -263 and 263-1. Non-integer numbers are currently not supported.
- Date-Time: Required to be a positive integer between 0 and 263-1, representing a Unix timestamp in milliseconds.
- Date: Required to be a valid date string in the format "yyyy-MM-dd" (e.g. 2021-06-04).
required
)
type: com.airlock.iam.flow.shared.application.configuration.script.ScriptExpectedOutputTypeConfig
id: ScriptExpectedOutputTypeConfig-xxxxxx
displayName:
comment:
properties:
outputValueType:
required: true
Script Secret Config
Reference this secret in the script by calling the API method iam.secrets:get(identifier)
with the here configured identifier.
identifier
) Must only contain alphanumeric characters and underscores.
secret
) Secrets are always passed in plaintext to the IAM script even if referenced here by external storage ID.
type: com.airlock.iam.flow.shared.application.configuration.script.ScriptSecretConfig
id: ScriptSecretConfig-xxxxxx
displayName:
comment:
properties:
identifier:
secret:
Scriptable Step
IAM uses Lua as its scripting engine. Please refer to official documentation on https://www.lua.org/ for more information about the Lua language and its features.
inputs
) Defines a mapping of input values that are made available to the lua script. The inputs can be accessed as a table through the "iam" API object: iam.input_map
If a value cannot be provided by the configured map, its corresponding key will not exist in the resulting mapping. When writing a script, one should always first check if the key is present before trying to operate on its value.
If two value providers contain an entry with the same key, then only the entry of the provider that appears last in the list will be available within the script.
Note that simple date values without a specific time (i.e. LocalDate) are passed as string arguments in the format "yyyy-MM-dd"
, while more specific date-time values are provided as epoch time with millisecond precision.
script
) The Lua script that will be run when the step is initialized.
Each script must define the following function:
function iam_on_step_init ()
return <output_map>
end
The values returned by this function can be accessed using the "Script Execution Result Value Map Provider" with matching namespace. Note that the outputs returned by the script must be declared in the "Outputs" property. If no outputs are expected, then the function's return statement can either be removed, or return an empty mapping.
outputs
) Declares the mapping of key-value pairs that are expected to be returned by the Lua script. The outputs are made available under the namespace configured for the step.
The script's outputs are required to match the expected output exactly. If the script's output contains additional results, this will also produce an error.
Individual key-value pairs may be tagged as optional, in which case they are not required to be in the script's output. Note that the order in which the key-value pairs are listed does not matter.
If left undefined, then the output map is expected to be empty.
inputSecrets
) The script is always executed on the server and therefore no secrets are transmitted to an external client, e.g. browser.
An example are HTTP basic authentication credentials for the configuration of a REST client.
Secrets must only be referenced in the script by calling the API method iam.secrets:get(identifier)
with their configured string identifier.
Secrets must be handled with care, e.g. they must never be passed on to a logger.
namespace
) The namespace under which the output of the step is stored. If left empty, it is stored under the default namespace.
To retrieve the output values of this step, configure the same namespace in the corresponding Script Execution Result Value Map Provider.
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.step.ScriptableStepConfig
id: ScriptableStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
inputSecrets:
inputs:
namespace:
onFailureGotos:
outputs:
preCondition:
requiresActivation: false
script:
skipCondition:
stepId:
tagsOnSuccess:
Scrypt Password Hash
Returns 'iterations' + '|' + 'salt' + 'hash'
as hash value.
iterationsExponent
) blockSize
) parallelizationParameter
)
type: com.airlock.iam.core.misc.util.password.hash.ScryptPasswordHash
id: ScryptPasswordHash-xxxxxx
displayName:
comment:
properties:
blockSize: 8
iterationsExponent: 14
parallelizationParameter: 1
Secret Letter Renderer
outputDirectoryPath
) This property is not required if the renderer plugin (see separate property) does not write on the outputstream (e.g. sends it somewhere else). It is required otherwise.
Note: If this property is not defined and the used renderer plugin writes on the output stream, then the result (e.g. a PDF file) is lost.
workingDirectoryPath
) If this property is defined, the passwords are not directly generated into the output directory (see other property) but they are generated into this working directory and are moved to the output directory once they are done.
This helps to solve problems with processes automatically reading the rendered passwords and reading partial reports during the generation process. Make sure that the working directory and the output directory reside in the same file system (if not the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
fileNamePrefix
) Do not use the empty prefixes if token-list reports are stored in the same directory. The empty prefix is the default for token list letters (and not configurable in older plugin versions).
This property is optional to be backwards compatible. The prefix "pwd-" is used if none is defined.
configuredFileNameSuffix
) reportTypeShortDesc
) The text is used in the user trail log written when a report is rendered. Please specify a text like in the examples below, so it suits the structure of the log statement it is used in.
If this property is not specified, a general statement will be logged.
passwordRenderer
) languageAttributeName
) deleteOldPasswords
) barcodeGenerator
) - BarcodeImage: placeholder for the barcode image.
- BarcodeContent: placeholder for the barcode content.
- BarcodeContentDisplay: placeholder for the barcode content in a human-readable format.
type: com.airlock.iam.core.misc.renderer.SecretLetterRenderer
id: SecretLetterRenderer-xxxxxx
displayName:
comment:
properties:
barcodeGenerator:
configuredFileNameSuffix:
deleteOldPasswords: false
fileNamePrefix: pwd-
languageAttributeName:
outputDirectoryPath:
passwordRenderer:
reportTypeShortDesc:
workingDirectoryPath:
Secret Questions Identity Verification Step
Public self-service flow step that verifies the user identity by asking secret questions that the user has to answer correctly for the flow to continue.
This is an identity verification step that differs from an "approval" step in the following ways:
- It doesn't fail with non-existing users or users without provisioned secret questions.
- It implements stealth mode: if a user does not exist or cannot do public self-services for whatever reason, no error is returned, but any answers entered are rejected, so that the step can never be completed successfully.
secretQuestionsSettings
) maxFailedAttempts
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.SecretQuestionsIdentityVerificationStepConfig
id: SecretQuestionsIdentityVerificationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: SECRET_QUESTIONS
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
maxFailedAttempts: 1
onFailureGotos:
preCondition:
requiresActivation: false
secretQuestionsSettings:
skipCondition:
stepId:
tagsOnSuccess:
Secret Questions Provisioning Step
Note: This step is only interactive for users that have secret questions enabled.
secretQuestionsSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.secretquestions.SecretQuestionsProvisioningStepConfig
id: SecretQuestionsProvisioningStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
secretQuestionsSettings:
skipCondition:
stepId:
tagsOnSuccess:
Secret Questions Settings
The 'questions' are part of this configuration, represented as resource keys. Their translation – the question as displayed to the user – are in the string resource files, like other translations.
In the set-up or provisioning phase a user answers some of the predefined 'secret questions'. These secret answers are persisted as secret-answer tokens in the IAM persistency model, so they can be verified later.
questionResourceKeys
) Ensure that no new question with the same key is introduced later. Any user's answer to the previous question would not match the new question.
The keys must contain a period "." somewhere to avoid name clashes in the REST API.
tokenDataProvider
) hashFunctionPlugin
) NOTE: Some password hashes, such as SHA 256 Password Hash or Scrypt Password Hash, produce binary output. If one of these is used, make sure the persistence layer supports binary data in the hash field and the corresponding persistence plugins (e.g. Database User Store or Ldap Connector) are configured to treat hash values as binary values.
In case the persistence layer expects a string, encode the password hash by wrapping it with an encoder. To achieve this, use the Password Hash Configuration plugin and specify the hash function (such as Scrypt Password Hash) together with the desired encoder. We recommend using the Base64 Password Hash Encoder.
requiredNumberOfProvisionedAnswers
) allowedNumberOfAttempts
) normalization
) - OFF:
No normalization. Provisioned and challenged answers must match exactly. - TRIM:
Removes whitespaces at the beginning and end of the answer string. - TRIM_CASEINSENSITIVE:
Does the same as TRIM and additionally converts all characters to lower case. - TRIM_CASEINSENSITIVE_NOWHITESPACE:
Does the same as CASEINSENSITIVE_TRIM and additionally removes all whitespace. - TRIM_CASEINSENSITIVE_NOWHITESPACE_NOSPECIALCHARS:
Does the same as CASEINSENSITIVE_TRIM_NOWHITESPACE and additionally removes all non-word characters (all characters except letters, digits and the underscore).
minLength
) maxLength
) numberOfChallengeQuestions
) - Display some of the questions to the user (challenge).
- Check the user's answers to these questions.
numberOfChallengeAnswers
) Example: Show two questions to the user, but only one has to be answered.
answerRegexPattern
) allowAdminAnswerCheck
) duplicateAnswersForbidden
) checkUsingLatin1Encoding
) If enabled, answers containing special characters stored by IAM earlier than 6.3 are still accepted. This option does not have to be activated if all answers were set using IAM 6.3 or later or if all answers were set via webservices or REST.
To support legacy answers, those with special characters are additionally checked using their legacy encoding in latin1.
type: com.airlock.iam.common.application.configuration.secretquestion.SecretQuestionsSettings
id: SecretQuestionsSettings-xxxxxx
displayName:
comment:
properties:
allowAdminAnswerCheck: false
allowedNumberOfAttempts: 2
answerRegexPattern:
checkUsingLatin1Encoding: false
duplicateAnswersForbidden: true
hashFunctionPlugin:
maxLength: 100
minLength: 2
normalization: TRIM_CASEINSENSITIVE
numberOfChallengeAnswers:
numberOfChallengeQuestions:
questionResourceKeys:
requiredNumberOfProvisionedAnswers: 2
tokenDataProvider:
Secret Questions Token Controller
secretQuestionsSettings
) userStoreProvider
)
type: com.airlock.iam.admin.application.configuration.secretquestion.SecretQuestionsTokenController
id: SecretQuestionsTokenController-xxxxxx
displayName:
comment:
properties:
secretQuestionsSettings:
userStoreProvider:
Security Settings
encryptionKey
) The encryption key (encoded in base64) is required to encrypt sensitive data in cookies or in REST responses.
The openssl tool can be used to generate a random base64 string with 256 bits (32 bytes): openssl rand -base64 32
hmacKey
) The HMAC Key (encoded in base64) is required to sign sensitive data that is stored in cookies or REST responses.
The openssl tool can be used to generate a random base64 string with 512 bits (64 bytes): openssl rand -base64 64
corsSettings
) csrfProtection
) If enabled, REST endpoints are protected against CSRF attacks.
With this protection, the REST API only accepts requests that contain the custom header X-Same-Domain with an arbitrary non-empty value. In cross-origin resource sharing (CORS), such requests are not considered simple requests and thus must always be preceded by a preflight request, which prevents cross-site request forgery (CSRF) attacks.
Security warning: Disabling this feature may allow CSRF attacks. Only do so if the REST client is unable to comply with the aforementioned restrictions.
To be RFC-compliant, the endpoint /<loginapp-uri>/rest/public/tech-client-registration/oauth2/<as-identifier>/register never requires the X-Same-Domain header.
Requests to this endpoint are guaranteed to be non-simple, because of the enforced non-simple content type application/json
fixedResponseDuration
) Defines how long it takes (in milliseconds) until IAM answers an unsuccessful request in the public part of the API. Faster answers are delayed until the configured duration is reached. This helps to avoid timing attacks. Successful or slower responses are not affected by this property. Protection against timing attacks is only provided if IAM is able to process 'unsuccessful' requests within the configured duration.
The endpoints for the password policy check, application access check, and the user self-registration are excluded from response delaying.
usernameFilterPattern
) sameSitePolicy
) Specifies the 'SameSite' cookie attribute of the IAM session cookie 'iam-session-id'. The 'Secure' attribute is automatically set based on whether the request was performed using http or https (see exception for 'None' below).
- Strict: The cookie is not sent in cross-origin requests.
- Lax: The cookie is sent in some cross-origin requests, such as GET requests.
- None: The cookie is sent in cross-origin requests. In this case, the 'Secure' Cookie-Attribute is always set, regardless of whether the request was performed using http or https.Use this setting when using SAML2 in combination with cross-domain POST Bindings.
- No SameSite Attribute: No attribute is set. Browsers apply their default behaviour, usually 'Lax'.
type: com.airlock.iam.login.app.application.configuration.SecurityConfig
id: SecurityConfig-xxxxxx
displayName:
comment:
properties:
corsSettings:
csrfProtection: true
encryptionKey:
fixedResponseDuration: 2000
hmacKey:
sameSitePolicy: LAX
usernameFilterPattern: [a-zA-Z0-9@._+-]{1,100}
Select mTAN Token Step
mtanSettings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.MtanTokenSelectionStepConfig
id: MtanTokenSelectionStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
mtanSettings:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Selection Authenticator
selectableAuthenticators
) A map of selectable authenticators. An authenticator is only presented to the user as an option if the user actually has suitable credentials. E.g., if an SMS Authenticator is configured here but the user does not have a phone number registered, they will not be able to select SMS authentication.
On the choice page, a translated string is displayed for each option (or the key itself if no translation is available). Translation strings use the prefix "userchoicepage.option." followed by the key in lowercase as the resource name. E.g. for "MTAN" the resource name is userchoicepage.option.mtan
.
alwaysSelectableAuthenticators
) Authenticators that are always selectable, i.e. they are always among the options presented to the user. These authenticators cannot determine whether a user has a suitable credential or not. Therefore, they must be able to handle users that have no such credential.
See the description of "Selectable Authenticators" on how the options are displayed on the choice page.
autoSelectIfOneOption
) userPersister
) contextDataColumnLastSelectedAuthMethod
) - The last selected authentication method is persisted in this context data column in the database as soon as a user continues the login process from the choice page.
- If the last selected authentication method can be retrieved from the database upon displaying the choice page, and this method is a selectable choice, it is pre-selected for the user.
- If a choice is pre-selected, the button on the choice page to continue the login process automatically receives the focus.
- Persistance and pre-selection of the last selected authentication method are performed only if both the user persister and this context data column are configured.
- The last selected authentication method in the database is represented by the corresponding selectable authenticator key.
type: com.airlock.iam.core.misc.impl.authen.SelectionAuthenticator
id: SelectionAuthenticator-xxxxxx
displayName:
comment:
properties:
alwaysSelectableAuthenticators:
autoSelectIfOneOption: true
contextDataColumnLastSelectedAuthMethod:
selectableAuthenticators:
userPersister:
Selection Option
name
) Name of this option.
This name appears in the list of available options (POST /<loginapp-uri>/rest/public/authentication/selection/options/retrieve) and is used as the "id" parameter to select an option (POST /<loginapp-uri>/rest/public/authentication/selection/options/<id>/select).
The name is also used in the UI (single-page application) as "id" of the options string resource key "authentication.selection.options.<id>".
Note that the name is converted to lowercase and underscores "_" are replaced by a hyphen "-", e.g. the resource key for AIRLOCK_2FA would be "authentication.selection.options.airlock-2fa".
steps
) condition
)
type: com.airlock.iam.flow.application.configuration.selection.step.SelectionOptionConfig
id: SelectionOptionConfig-xxxxxx
displayName:
comment:
properties:
condition:
name:
steps:
Selection Option For Public Self-Service
name
) Name of this option.
This name appears in the list of available options (POST /<loginapp-uri>/rest/public/self-service/selection/options/retrieve) and is used as the "id" parameter to select an option (POST /<loginapp-uri>/rest/public/self-service/selection/options/{id}/select).
The name is also used in the UI (single-page application) as "id" of the options string resource key "public-self-service.selection.options.<id>".
Note that the name is converted to lowercase and underscores "_" are replaced by a hyphen "-", e.g. the resource key for AIRLOCK_2FA would be "public-self-service.selection.options.airlock-2fa".
steps
) condition
)
type: com.airlock.iam.publicselfservice.application.configuration.selection.SelectionOptionConfigForPublicSelfServiceFlows
id: SelectionOptionConfigForPublicSelfServiceFlows-xxxxxx
displayName:
comment:
properties:
condition:
name:
steps:
Selection Option For Self-Service
name
) Name of this option.
This name appears in the list of available options (POST /<loginapp-uri>/rest/protected/self-service/selection/options/retrieve) and is used as the "id" parameter to select an option (POST /<loginapp-uri>/rest/protected/self-service/selection/options/<id>/select).
The name is also used in the UI (single-page application) as "id" of the options string resource key "protected.self-service.selection.options.<id>".
Note that the name is converted to lowercase and underscores "_" are replaced by a hyphen "-", e.g. the resource key for AIRLOCK_2FA would be "protected.self-service.selection.options.airlock-2fa".
steps
) condition
)
type: com.airlock.iam.selfservice.application.configuration.selection.SelectionOptionConfigForSelfServiceFlows
id: SelectionOptionConfigForSelfServiceFlows-xxxxxx
displayName:
comment:
properties:
condition:
name:
steps:
Selection Option For User Self-Registration
name
) Name of this option.
This name appears in the list of available options (POST /<loginapp-uri>/rest/public/user-self-registration/selection/options/retrieve) and is used as the "id" parameter to select an option (POST /<loginapp-uri>/rest/public/user-self-registration/selection/options/<id>/select).
The name is also used in the UI (single-page application) as "id" of the options string resource key "registration.selection.options.<id>".
Note that the name is converted to lowercase and underscores "_" are replaced by a hyphen "-", e.g. the resource key for AIRLOCK_2FA would be "registration.selection.options.airlock-2fa".
steps
) condition
)
type: com.airlock.iam.userselfreg.application.configuration.selection.SelectionOptionConfigForUserSelfRegFlows
id: SelectionOptionConfigForUserSelfRegFlows-xxxxxx
displayName:
comment:
properties:
condition:
name:
steps:
Selection Password Repository
passwordRepositoryMappings
) defaultPasswordRepository
)
type: com.airlock.iam.authentication.application.configuration.password.repository.SelectionPasswordRepositoryConfig
id: SelectionPasswordRepositoryConfig-xxxxxx
displayName:
comment:
properties:
defaultPasswordRepository:
passwordRepositoryMappings:
Selection Password Repository (Request Authentication)
repositoryMappings
) defaultRepository
)
type: com.airlock.iam.common.application.configuration.credential.RequestAuthenticationSelectionPasswordRepositoryConfig
id: RequestAuthenticationSelectionPasswordRepositoryConfig-xxxxxx
displayName:
comment:
properties:
defaultRepository:
repositoryMappings:
Selection Step
availableOptions
) autoSelectOnlyOption
) fallbackFlow
) lastSelectionRepository
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.selection.SelectionStepConfig
id: SelectionStepConfig-xxxxxx
displayName:
comment:
properties:
autoSelectOnlyOption: true
availableOptions:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fallbackFlow:
interactiveGotoTargets:
lastSelectionRepository:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
Selection Step for Public Self-Service
Selection between different subflows depending on configurable options.
Note that most selection conditions can only work once the user's identity is verified to exist, i.e. after an identity verification step has successfully been completed.
availableOptions
) autoSelectOnlyOption
) fallbackFlow
) lastSelectionRepository
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.SelectionStepConfigForPublicSelfServiceFlows
id: SelectionStepConfigForPublicSelfServiceFlows-xxxxxx
displayName:
comment:
properties:
autoSelectOnlyOption: true
availableOptions:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fallbackFlow:
interactiveGotoTargets:
lastSelectionRepository:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
Selection Step for Self-Service
availableOptions
) autoSelectOnlyOption
) fallbackFlow
) lastSelectionRepository
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.SelectionStepConfigForSelfServiceFlows
id: SelectionStepConfigForSelfServiceFlows-xxxxxx
displayName:
comment:
properties:
autoSelectOnlyOption: true
availableOptions:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fallbackFlow:
interactiveGotoTargets:
lastSelectionRepository:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
Selection Step for User Self-Registration
availableOptions
) autoSelectOnlyOption
) fallbackFlow
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.userselfreg.application.configuration.step.SelectionStepConfigForUserSelfRegFlows
id: SelectionStepConfigForUserSelfRegFlows-xxxxxx
displayName:
comment:
properties:
autoSelectOnlyOption: true
availableOptions:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
fallbackFlow:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
Self Reg Users Clean Up Task
userPersister
) userIterator
) Usually this is the same as the UserPersister.
neverLoggedInMinutes
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.SelfRegUsersCleanUpTask
id: SelfRegUsersCleanUpTask-xxxxxx
displayName:
comment:
properties:
neverLoggedInMinutes:
userIterator:
userPersister:
Self Reg Users Reminder Task
emailService
) emailPropertyName
) Name of the context data field that contains the user's email address. Used to send an email if the user did never login.
alreadySentPropertyName
) Name of the context data field where it is remembered that a reminder email has been sent already. If this is not configured, an email will be sent every time the task is executed. Make sure to also configure this field in the user persister.
languagePropertyName
) Name of the context data field that contains the user language. Used when sending a reminder email if the user did never login.
defaultLanguage
) Default language to be used if none is defined for the user.
notLoggedInReminderEmailSubjectKey
) notLoggedInReminderEmailBodyKey
) resourcesFilePrefix
) Example: If the value of this property is strings, the language dependent files must be "strings_de.properties", "strings_en.properties" and so on and the default file must be "strings.properties".
userPersister
) userIterator
) Usually this is the same as the UserPersister.
neverLoggedInMinutes
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.SelfRegUsersReminderTask
id: SelfRegUsersReminderTask-xxxxxx
displayName:
comment:
properties:
alreadySentPropertyName:
defaultLanguage: de
emailPropertyName: email
emailService:
languagePropertyName: language
neverLoggedInMinutes:
notLoggedInReminderEmailBodyKey: selfregistration.reminder-email-body
notLoggedInReminderEmailSubjectKey: selfregistration.reminder-email-subject
resourcesFilePrefix: strings
userIterator:
userPersister:
Self-Service Flow Redirect
flowId
)
type: com.airlock.iam.selfservice.application.configuration.ui.SelfServiceFlowRedirectTargetConfig
id: SelfServiceFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
flowId:
Send Email Link Step
Flow step that sends an email with a link to the current user. This link allows the user to perform further steps in a specified public self-service flow. Because the link contains an unguessable token, no further identity verification is necessary in the target flow.
Typical use-cases:
- Password reset with identity verification using email link: Flow 1: public self-service flow with user identification step, followed by email link step. Flow 2: flow continuation step followed by password reset set.
- Email address verification after self-registration: Flow 1: user self-registration flow that locks the user, email link step at the end of the flow. Flow 2: Flow 2: flow continuation step followed by unlock step.
targetFlowId
) recipientAddress
) emailService
) subjectResourceKey
) bodyResourceKey
) repository
) continuationUrl
) ${token}
- the random continuation token${flowId}
- the ID of the target flow to continue${language}
- the current language used in the flow
valueProviders
) List of value map providers that are used to replace the variables in the localized template. The values providers are called in the configured order and their values are added to a map. Later providers can overwrite values from earlier providers. If no value providers are configured, the localized template should not contain any variables, since all of them would be replaced by empty strings. The link to continue the process is always added as ${TOKEN} and doesn't have to be configured here.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
If a more fine-grained control is required, use a 'Transforming Value Map Provider' with an 'HTML String Escaper' to transform all values of the map. (Alternatively, if you want to transform only individual values of a map, use a 'Value Provider Map' with 'Transforming String Value Providers'.)
sendAsHtml
) If enabled, the verification email will be sent as an HTML mail. Otherwise it will be sent as plain text.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
If a more fine-grained control is required, use a 'Transforming Value Map Provider' with an 'HTML String Escaper' to transform all values of the map. (Alternatively, if you want to transform only individual values of a map, use a 'Value Provider Map' with 'Transforming String Value Providers'.)
tokenValidity
) The duration must be specified in the format "2d 4h 10m 5s" (any part can be omitted).
storeForwardUrl
) escapeHtmlValues
) HTML-escape all provided values if property Send As HTML is enabled.
Security Warning: If e-mails are sent as HTML, make sure to properly escape values originating from untrusted sources (such as user input during self-registration). This can be achieved by enabling the property 'Escape Values in HTML'.
If a more fine-grained control is required, use a 'Transforming Value Map Provider' with an 'HTML String Escaper' to transform all values of the map. (Alternatively, if you want to transform only individual values of a map, use a 'Value Provider Map' with 'Transforming String Value Providers'.)
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.continuation.SendEmailLinkStepConfig
id: SendEmailLinkStepConfig-xxxxxx
displayName:
comment:
properties:
bodyResourceKey:
continuationUrl:
customFailureResponseAttributes:
customResponseAttributes:
emailService:
escapeHtmlValues: true
onFailureGotos:
preCondition:
recipientAddress:
repository:
requiresActivation: false
sendAsHtml: false
skipCondition:
stepId:
storeForwardUrl: true
subjectResourceKey:
tagsOnSuccess:
targetFlowId:
tokenValidity: 24h
valueProviders:
Sensitive HTTP Parameter
name
) value
)
type: com.airlock.iam.core.misc.impl.sms.StaticSensitiveHttpParameter
id: StaticSensitiveHttpParameter-xxxxxx
displayName:
comment:
properties:
name:
value:
Sensitive Static REST Request Header
headerName
) headerValue
)
type: com.airlock.iam.common.application.configuration.restclient.SensitiveStaticRestRequestHeaderConfig
id: SensitiveStaticRestRequestHeaderConfig-xxxxxx
displayName:
comment:
properties:
headerName:
headerValue:
Service Config
service
) autoStart
)
type: com.airlock.iam.servicecontainer.app.application.configuration.ServiceConfig
id: ServiceConfig-xxxxxx
displayName:
comment:
properties:
autoStart: true
service:
Service Container
services
) acceptedSsoTicketRepository
) Configures the repository used to store accepted SSO tickets and reject previously accepted ones.
The in-memory repository cannot be used if multiple instances of IAM are deployed in parallel (failover, horizontal scaling). Furthermore, the in-memory repository does not preserve previously accepted SSO tickets across IAM restarts.
sessionTimeout
) statisticLogInterval
) minimumThreads
) maximumThreads
) serviceContainerSharedSecret
) logUserTrailToDatabase
) Configures the database settings to use when persisting user trail log entries.
If this value is defined, then all user trail log messages generated by the Service Container App module will additionally be forwarded to the database configured within the referenced repository plugin.
All forwarded log entries are stored inside the table "USER_TRAIL_LOG". Note that setting this value does not disable writing log messages to the Service Container App log file.
correlationIdSettings
) Defines settings for correlation ID transfer and logging inside the Service Container module.
If undefined, no correlation ID will be logged for this module.
type: com.airlock.iam.servicecontainer.app.application.configuration.Server
id: Server-xxxxxx
displayName:
comment:
properties:
acceptedSsoTicketRepository:
correlationIdSettings:
logUserTrailToDatabase:
maximumThreads: 100
minimumThreads: 10
serviceContainerSharedSecret:
services:
sessionTimeout: 30
statisticLogInterval: 60
Session Context Retention Policy
With this context retention policy, the configuration context is evaluated once for every session.
The context is determined during the first request in the session and is re-used for subsequent requests.
allowChange
) If this option is enabled, the context is allowed to change and therefore is re-evaluated for each request.
If the context extractor determines a new context for a request, the context is changed. Otherwise, the session context will be re-used. For this to work, the context extractor must be configured without a fallback context, otherwise the fallback context will always be used instead of the session context.
type: com.airlock.iam.flow.shared.application.configuration.context.policy.SessionContextRetentionPolicy
id: SessionContextRetentionPolicy-xxxxxx
displayName:
comment:
properties:
allowChange: false
Session Hijacking Notification Risk Extractor Config
tagsOnDetectedSessionHijacking
) tagsOnSessionWithoutHijacking
)
type: com.airlock.iam.authentication.application.configuration.risk.extractor.clientfingerprinting.SessionHijackingNotificationRiskExtractorConfig
id: SessionHijackingNotificationRiskExtractorConfig-xxxxxx
displayName:
comment:
properties:
tagsOnDetectedSessionHijacking:
tagsOnSessionWithoutHijacking:
Session ID Custom Claim
claimName
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.claims.CustomSessionIdClaimConfig
id: CustomSessionIdClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
Session-less REST Endpoints
Configures protected session-less endpoints of the Loginapp REST API. These endpoints require authentication credentials attached to each request, but don't require previous authentication with a flow.
These REST endpoints begin with the resource path /<loginapp-uri>/rest/protected/my/
.
For most of the session-less protected REST APIs, there is a corresponding flow-based API in the protected self-service REST APIs. Whenever possible, prefer the flow-based variant over the session-less configured here.
userSelfServiceSettings
) Configures session-less user self-service REST endpoints.
These REST endpoints begin with the resource path /<loginapp-uri>/rest/protected/my/
.
userTokenSettings
) Configures session-less token REST endpoints related to user tokens.
These REST endpoints begin with the resource path /<loginapp-uri>/rest/protected/my/tokens/
.
requestAuthentication
) This property is only effective for the protected Loginapp REST API outside of the "self-service" sub-path.
accessController
) This property is only effective for the protected Loginapp REST API outside of the "self-service" sub-path.
usernameTransformers
) Transformation is done for:
- Resource URLs: the user id in the REST resource URL (e.g. in self-registration) is transformed before further processing is done.
- Authentication: for protected calls, the username of the provided credential (request credential policy) is transformed before passing it to the configured authenticator.
linkResponseRewritingEnabled
) If a 'Base URI' is configured, links are rewritten according to the configured value. Otherwise, links are rewritten according to the external view provided by the WAF (if configured an a WAF environment cookie is present).
baseUri
) This property is useful in test environments where you want links contained in REST responses to be relative to the configured base URI. Note that configuring this property will take precedence over link rewriting based on the WAF environment cookie.
In order to produce correct links, the property must be configured up to and including the /rest subpath. IAM will automatically append public
to the configured value for calls to the public API and protected
for calls to the protected API of the Loginapp (or oauth2
for OAuth 2.0/OpenId Connect endpoints).
Example:
- Property value:
http://myhost:8090/test/rest
- The response from the REST call to
/<loginapp-uri>/rest/public/users/register
will contain a link tohttp://myhost:8090/test/rest/protected/my/self
type: com.airlock.iam.login.rest.application.configuration.LoginappRestConfig
id: LoginappRestConfig-xxxxxx
displayName:
comment:
properties:
accessController:
baseUri:
linkResponseRewritingEnabled: true
requestAuthentication:
userSelfServiceSettings:
userTokenSettings:
usernameTransformers:
Set Authentication Method Migration Step
Non-interactive step to set the user's authentication method migration and optionally a migration deadline.
Any authentication method set in previous steps is overwritten by this step.
authenticationMethod
) migrationDeadline
) The migration date is set to this period of time after the step is executed. If no period is defined, no migration date is set.
The duration must be specified in the format "(d)ays (h)ours (m)inutes (s)econds" e.g. "2d 4h 10m 5s" (any part can be omitted).
For the usage of the migration date, please refer to the documentation of the "Migration Selection Step".
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.userselfreg.application.configuration.step.NonInteractiveAuthMethodMigrationStepConfig
id: NonInteractiveAuthMethodMigrationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethod:
customFailureResponseAttributes:
customResponseAttributes:
migrationDeadline:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Set Authentication Method Step
Non-interactive step to set the default authentication method for the user.
Any authentication method which has been set in previous steps will be overwritten by this step.
userAuthMethod
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.userselfreg.application.configuration.step.NonInteractiveSetAuthMethodStepConfig
id: NonInteractiveSetAuthMethodStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
userAuthMethod:
Set Context Data Step
Non-interactive step to set user data that is provided by the system and not by the user.
User Data Items which were provided in previous steps can be overwritten by this step.
Security Notice: This step should be configured as late as possible and after the user is sufficiently authenticated. Otherwise data might be set too early.
userDataItems
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.step.user.data.NonInteractiveSetContextDataStepConfig
id: NonInteractiveSetContextDataStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
userDataItems:
Set Password Expiry Date
attributeType
) The RADIUS attribute type of the attribute to look at.
If providing a different than the suggested attributes, the type identifier (a number) must be specified and not the attribute name!
representation
)
type: com.airlock.iam.core.misc.impl.authen.radius.RadiusAttributePasswordExpiry
id: RadiusAttributePasswordExpiry-xxxxxx
displayName:
comment:
properties:
attributeType:
representation:
Set Password Step Config
passwordAttributeKey
) The optional key under which the new password is made available in the identity propagation.
The value can also be retrieved from the session using the "User Passwords Map" value map provider.
If no key is configured, the new password will not be made available in the flow attributes, and cannot be used by identity propagators.
Note: This feature will not work together with end-to-end encryption.
policyToCheckOnSetPassword
) passwordRepository
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.password.SetPasswordStepConfig
id: SetPasswordStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
passwordAttributeKey:
passwordRepository:
policyToCheckOnSetPassword:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Set UI Tenant ID Processor
type: com.airlock.iam.flow.shared.application.configuration.uitenantid.SetUiTenantIdProcessorConfig
id: SetUiTenantIdProcessorConfig-xxxxxx
displayName:
comment:
properties:
Set UUID For New Users
uuidAttributeName
) condition
)
type: com.airlock.iam.core.misc.impl.persistency.usereventbus.SetUuidForNewUsers
id: SetUuidForNewUsers-xxxxxx
displayName:
comment:
properties:
condition:
uuidAttributeName:
SHA-256 HTTP Instance Digest Algorithm
type: com.airlock.iam.login.app.misc.oneshot.impl.SHA256HttpInstanceDigestAlgorithmConfig
id: SHA256HttpInstanceDigestAlgorithmConfig-xxxxxx
displayName:
comment:
properties:
SHA-512 HTTP Instance Digest Algorithm
type: com.airlock.iam.login.app.misc.oneshot.impl.SHA512HttpInstanceDigestAlgorithmConfig
id: SHA512HttpInstanceDigestAlgorithmConfig-xxxxxx
displayName:
comment:
properties:
SHA1 Base64 Password Hash
Returns the base-64 encoded version of salt|SHA1(salt|password)
as hash value. Both the salt and the hash values are each 20 bytes long and together result in 56 bytes after base-64 encoding.
type: com.airlock.iam.core.misc.util.password.hash.SHA1Base64PasswordHash
id: SHA1Base64PasswordHash-xxxxxx
displayName:
comment:
properties:
SHA1 Hex Password Hash
Password hash plug-in that uses SHA1 for hashing and HEX-encoding for the result.
Returns the HEX-encoded version of SHA1(salt|password)
as hash value. Both the salt and the hash value are each 20 bytes (160 bits) long and together result in 80 bytes after HEX-encoding.
type: com.airlock.iam.core.misc.util.password.hash.SHA1HexPasswordHash
id: SHA1HexPasswordHash-xxxxxx
displayName:
comment:
properties:
SHA1 Password Hash
Returns salt|SHA1(salt|password)
as hash value. Both the salt and the hash values are each 20 bytes long.
type: com.airlock.iam.core.misc.util.password.hash.SHA1PasswordHash
id: SHA1PasswordHash-xxxxxx
displayName:
comment:
properties:
SHA256 Base64 Password Hash
Returns the base-64 encoded version of SHA256(salt|password)
as hash value. Both the salt and the hash values are each 32 bytes long and together result in 88 bytes after base-64 encoding.
Security Warning: The use of this plugin is discouraged due to security reasons. Consider using Scrypt Password Hash instead (within a PasswordHashConfiguration for Encoded Hash Values).
type: com.airlock.iam.core.misc.util.password.hash.SHA256Base64PasswordHash
id: SHA256Base64PasswordHash-xxxxxx
displayName:
comment:
properties:
SHA256 Hex Password Hash
Returns the hex-encoded version of SHA256(salt|password)
as hash value. Both the salt and the hash values are each 32 bytes long and together result in 128 bytes after hex encoding.
Security Warning: The use of this plugin is discouraged due to security reasons. Consider using Scrypt Password Hash instead (within a PasswordHashConfiguration for Encoded Hash Values).
type: com.airlock.iam.core.misc.util.password.hash.SHA256HexPasswordHash
id: SHA256HexPasswordHash-xxxxxx
displayName:
comment:
properties:
SHA256 Password Hash
Returns salt|SHA256(salt|password)
as hash value. Both the salt and the hash values are each 32 bytes long.
Security Warning: The use of this plugin is discouraged due to security reasons. Consider using Scrypt Password Hash instead (within a PasswordHashConfiguration for Encoded Hash Values).
type: com.airlock.iam.core.misc.util.password.hash.SHA256PasswordHash
id: SHA256PasswordHash-xxxxxx
displayName:
comment:
properties:
Show Logout Disclaimer Page Config
targetOnContinue
)
type: com.airlock.iam.flow.ui.application.configuration.ShowLogoutDisclaimerPageConfig
id: ShowLogoutDisclaimerPageConfig-xxxxxx
displayName:
comment:
properties:
targetOnContinue:
Silly Password Policy
Each test can be enabled or disabled in the configuration. See configuration properties to learn more about the specific tests.
detectEmptyPassword
) A password is considered to be empty, if it only consists of whitespace.
detectSequences
) A password is considered to consist of a sequence, if - after converting it to lowercase characters - the ASCII-code-difference between any two adjacent characters is either 1 or -1. The sign of the difference is ignored, i.e. the sequence "abcdefedce" is also considered such a sequence.
detectSingleCharacterPasswords
) A password matches, if - after converting it to lowercase characters - the ASCII-code of all characters is the same.
Example: "aaaaaaa" or "AaaAa"
detectKeyboardLayoutBasedPasswords
) A password is considered to be based on the keyboard-layout if it can be typed by pressing keys on a computer keyboard from left to right or from right to left.
Case of characters is not considered.
Example on a Swiss-German keyboard, starting with the letter "k" and going left is: "kjhgfd".
The plugin supports the following keyboard layouts: QWERTY, QWERTZ, AZERTY, QZERTY. For these layouts several subvariants regarding special characters such as umlauts and other special characters are implemented.
type: com.airlock.iam.core.misc.impl.authen.PwdPolicySillyCheck
id: PwdPolicySillyCheck-xxxxxx
displayName:
comment:
properties:
detectEmptyPassword: true
detectKeyboardLayoutBasedPasswords: true
detectSequences: true
detectSingleCharacterPasswords: true
Simple File Renderer Config
reportRenderer
) languageAttributeName
) outputDirectory
) fileNamePrefix
) fileNameSuffix
)
type: com.airlock.iam.core.misc.util.report.SimpleFileRendererConfig
id: SimpleFileRendererConfig-xxxxxx
displayName:
comment:
properties:
fileNamePrefix:
fileNameSuffix:
languageAttributeName: language
outputDirectory:
reportRenderer:
Simple Latest Login Attempt Filter
defaultValue
)
type: com.airlock.iam.admin.application.configuration.usersearch.filter.SimpleLatestLoginAttemptFilter
id: SimpleLatestLoginAttemptFilter-xxxxxx
displayName:
comment:
properties:
defaultValue: LAST_WEEK
Simple Latest Successful Login Filter
defaultValue
)
type: com.airlock.iam.admin.application.configuration.usersearch.filter.SimpleLatestSuccessfulLoginFilter
id: SimpleLatestSuccessfulLoginFilter-xxxxxx
displayName:
comment:
properties:
defaultValue: LAST_WEEK
Simple Location Interpreter Config
defaultValue
) fromQueryParam
) withUrlRegex
) transformToLowercase
)
type: com.airlock.iam.login.application.configuration.location.interpret.SimpleLocationInterpreterConfig
id: SimpleLocationInterpreterConfig-xxxxxx
displayName:
comment:
properties:
defaultValue:
fromQueryParam:
transformToLowercase: false
withUrlRegex:
Simple Migration Selection Option Config
Simplified configuration of a migration subflow.
Essentially equivalent to an "Advanced Migration Selection Option" with a "Next Authentication Method-based Migration Condition" condition and an implicit "Complete Migration Step" as the last step. Only the credential activation step needs to be configured.
targetAuthMethod
) - As ID in the list of available options (for POST /<loginapp-uri>/rest/public/authentication/migration/options/retrieve and POST /<loginapp-uri>/rest/public/authentication/migration/options/<id>/select)
- As the "Target Auth Method" in the automatically generated "Next Authentication Method-based Migration Condition" condition
- As the "Target Auth Method" in the automatically generated "Complete Migration Step"
hintPeriod
) Ask the user to migrate during this period before the migration becomes mandatory. Any immediate period (e.g. 0d) leads to the users always being forced to migrate at the migration date and the users not being asked to migrate before the migration date.
To always ask the user to migrate as soon as a migration date is set for the user, set this property to a very high value. This setting has no effect if the user has a "Next Auth Method" but no migration date set; in this case the user is always asked to migrate and never forced to migrate.
This property is used to configure the hint period in the automatically created "Next Authentication Method-based Migration Condition" condition.
The duration must be specified in the format "(d)ays (h)ours (m)inutes (s)econds" e.g. "2d 4h 10m 5s" (any part can be omitted).
steps
)
type: com.airlock.iam.authentication.application.configuration.migration.SimpleMigrationSelectionOptionConfig
id: SimpleMigrationSelectionOptionConfig-xxxxxx
displayName:
comment:
properties:
hintPeriod: 10d
steps:
targetAuthMethod:
Simple Password Policy
requiredCharacters
) For example, "Characters and digits" assures that at least one character and one digit is used.
In addition, the following character classes include:- "Normal characters" include a-z (case insensitive)
- "Special characters" include
. , ; : - _ ! $ ( ) { } [ ] < > = ? + * & % \ / | @ # ^ ` ~
minRequiredLength
) maxAllowedLength
) noSillyPasswords
) - Character sequences such as "abcde" or "1234321"
- Passwords consisting of a single character such as "AaAaaaaAa"
- Passwords constructed by typing a sequence on keyboard such as "asdfgh". A variety of keyboard layouts are supported.
noPreviouslyUsedPasswords
) The number of "forbidden" used passwords (= the password history length) is defined by the password hash plugin passed to this plugin when performing the check.
Note: The check requires that the used password hash function supports password histories (i.e. implements "PasswordHashWithHistory"). If not, an error occurs.
allowedCharacters
) Every character of the password is matched against this pattern and must match or the password is not allowed.
forbiddenCharacters
) If the pattern matches the whole password or only a part of it, the password is rejected.
type: com.airlock.iam.core.misc.impl.authen.SimplePasswordPolicy
id: SimplePasswordPolicy-xxxxxx
displayName:
comment:
properties:
allowedCharacters:
forbiddenCharacters:
maxAllowedLength: 100
minRequiredLength: 8
noPreviouslyUsedPasswords: false
noSillyPasswords: true
requiredCharacters: CHARS_AND_DIGITS
Simple Risk-based Role Derivation
requiredRoles
) mandatoryRiskTags
) excludingRiskTags
) targetRole
)
type: com.airlock.iam.authentication.application.configuration.risk.accesspolicy.SimpleRiskBasedRoleDerivationConfig
id: SimpleRiskBasedRoleDerivationConfig-xxxxxx
displayName:
comment:
properties:
excludingRiskTags:
mandatoryRiskTags:
requiredRoles:
targetRole:
Simple Text Renderer
defaultText
) Multiple templates for different languages can be specified with the property template. A default template has always to be specified.
text
) Selectors must be choosen according to the ISO-2-letter language codes, i.e. "fr" for french.
See also description of default-text.
type: com.airlock.iam.core.misc.renderer.SimpleTextRenderer
id: SimpleTextRenderer-xxxxxx
displayName:
comment:
properties:
defaultText:
text:
Single Mode Redis State Repository Config
State repository that stores all values in a single Redis instance.
redisUri
) - For TLS, use rediss://host:port (double 's' in 'rediss:', recommended)
- For an unencrypted connection, use redis://host:port (not recommended for production setups)
username
) password
) minimumIdleConnections
) maximumPoolSize
) idleTimeoutInMs
) connectionTimeoutInMs
) responseTimeoutInMs
) pingConnectionIntervalInMs
) trustStorePath
) trustStorePassword
) The password must be provided if a trust store is configured.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
keyStorePath
) keyStorePassword
) The password must be provided if a keystore is configured.
encryption
) Encryption settings defining whether and how state information in Redis is encrypted. IAM state contains sensitive information. State encryption prevents other systems from reading and modifying IAM state information.
To enable state encryption with non-encrypted state already present, use the "Migrating State Encryption" plugin.
legacyKeyFormat
) When changing this setting after state has already been stored in Redis, that state will be lost and the corresponding sessions will be terminated.
namespace
) A string that will be used as a namespace for the keys in Redis.
This is useful if, for example, multiple IAM instances share the same Redis instance and one must ensure that their Redis keys don't interfere with each other
When changing this setting after state has already been stored in Redis, that state will be lost and the corresponding sessions will be terminated.
type: com.airlock.iam.common.application.configuration.state.SingleModeRedisStateRepositoryConfig
id: SingleModeRedisStateRepositoryConfig-xxxxxx
displayName:
comment:
properties:
connectionTimeoutInMs: 10000
encryption:
idleTimeoutInMs: 10000
keyStorePassword:
keyStorePath:
legacyKeyFormat: false
maximumPoolSize: 64
minimumIdleConnections: 24
namespace: default
password:
pingConnectionIntervalInMs: 30000
redisUri:
responseTimeoutInMs: 10000
trustStorePassword:
trustStorePath:
username:
verifyServerHostname: true
SMPP SMS Gateway
serverWithPort
) accountUsername
) accountPassword
) smppBindType
) SMPP supports:
- Transceiver: send and receive SMS
- Transmitter: send SMS
- Receiver: receive SMS
messageEncodingCharset
) The charset to encode messages. This parameter is specified by the SMSC Server and must correlate with the "Data Coding Scheme" below. Notice that some charsets use more bytes than others to encode (certain) characters and thus reduce the maximum size of the message.
dataCodingScheme
) The DCS or Data Coding Scheme indicates to the SMSC Server how the binary message shall be interpreted. A value of 0x00 (the default) leaves the decision to the server. Unless it is configurable on the server, a more specific DCS should be chosen based on the charset above.
maxNumberOfSessions
) windowSize
) The number of unacknowledged requests is called a window; for the best performance both communicating sides must be configured with the same window size.
connectionAndSendTimeout
) The time how long to wait while trying to connect to the SMPP provider.
The send timeout in milliseconds.
The time how long to wait for a response when sending an SMS.
The timeout value includes both waiting for a "window" slot, the time it takes to transmit the actual bytes on the socket, and for the remote endpoint to send a response back.
sourceTon
) sourceNpi
) destTon
) destNpi
) flashMode
) When sending a message as flash message (Message Class 0), there are multiple ways of marking the message as such.
- DCS code 0xF0: Use 0xF0 as DCS code (SMPP 3.4 default)
- DCS code 0x10: Use 0x10 as DCS code (legacy GSM mode supported by some providers)
- dest_addr_subunit code: Use the optional parameter 'dest_addr_subunit' (as suggested as the recommended way by SMPP 3.4 standard)
- Ignore Flash: In case flash doesn't work correctly or isn't able to display special characters, send flash messages as normal messages instead
sessionName
) If you need to give them a specific name you can do this here. Otherwise just keep the default name.
enableDebugging
) useSsl
) trustStorePath
) trustStorePassword
)
type: com.airlock.iam.common.application.configuration.sms.SmppSmsGatewaySettings
id: SmppSmsGatewaySettings-xxxxxx
displayName:
comment:
properties:
accountPassword:
accountUsername:
connectionAndSendTimeout: 10000
dataCodingScheme: DEFAULT
destNpi: UNKNOWN
destTon: UNKNOWN
enableDebugging: false
flashMode: DCS_CODE_F0
maxNumberOfSessions: 1
messageEncodingCharset: ISO_8859_1
serverWithPort:
sessionName: IAM-SmppSmsGateway
smppBindType: TRANSCEIVER
sourceNpi: UNKNOWN
sourceTon: UNKNOWN
trustStorePassword:
trustStorePath:
useSsl: false
windowSize: 1
SMS Event Subscriber (Adminapp)
smsSettings
) phoneNumberProviders
) messageResourceKey
) - ${contextDataName} for the value of contextDataName in the context-data of the managed user.
- ${event.createdAt,date,format} for the date/time at which the event was created, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
- event.createdAt
- event.data.addedRoles (list of strings)
- event.data.airlock2FAAccountId
- event.data.airlock2FADeviceId
- event.data.activeAuthenticationMethod
- event.data.contextDataChanged.%s.newValue (where "%s" is replaced by the context-data field name).
- event.data.contextDataChanged.%s.oldValue (where "%s" is replaced by the context-data field name).
- event.data.crontoDeviceId
- event.data.fidoCredentialId
- event.data.lockReason
- event.data.mtanNewPhoneNumber
- event.data.mtanNumberId
- event.data.mtanOldPhoneNumber
- event.data.newEmailAddress
- event.data.newRoles (list of strings)
- event.data.oldEmailAddress
- event.data.oldRoles (list of strings)
- event.data.previousAuthenticationMethod
- event.data.removedRoles (list of strings)
- event.data.userId
- event.id
- event.metadata.requestIp
- event.metadata.userAgent
- event.source.adminId
languageContextDataName
) defaultLanguage
) event
)
type: com.airlock.iam.admin.application.configuration.event.AdminappSmsEventSubscriberConfig
id: AdminappSmsEventSubscriberConfig-xxxxxx
displayName:
comment:
properties:
defaultLanguage: de
event:
languageContextDataName:
messageResourceKey: sms.notification.message
phoneNumberProviders:
smsSettings:
SMS Event Subscriber (Loginapp)
smsSettings
) phoneNumberProviders
) messageResourceKey
) - ${valueMapKey} for the value of valueMapKey provided by any of the configured Value Map Providers.
- ${event.createdAt,date,format} to include the date/time at which the event was created, where "format" is a date pattern like "yyyy-MM-dd HH:mm:ss".
- event.createdAt
- event.data.airlock2FAAccountId
- event.data.airlock2FADeviceId
- event.data.activeAuthenticationMethod
- event.data.authenticationMethods
- event.data.browser
- event.data.city
- event.data.contextDataChanged.%s.newValue (where "%s" is replaced by the context-data field name).
- event.data.contextDataChanged.%s.oldValue (where "%s" is replaced by the context-data field name).
- event.data.countryCode
- event.data.crontoDeviceId
- event.data.device
- event.data.deviceTokenId
- event.data.fidoCredentialId
- event.data.fidoPublicKeyCredentialId
- event.data.fidoRelyingPartyId
- event.data.lockReason
- event.data.mtanNewPhoneNumber
- event.data.mtanNumberId
- event.data.mtanOldPhoneNumber
- event.data.newEmailAddress
- event.data.oldEmailAddress
- event.data.operatingSystem
- event.data.previousAuthenticationMethod
- event.data.stepResult.attributes.<attribute-name> (where <attribute-name> ist the name of the additional attribute, could be nested.)
- event.data.stepResult.errorCode
- event.data.stepResult.nextAction
- event.data.stepResult.type
- event.data.userId
- event.id
- event.metadata.requestIp
- event.metadata.userAgent
- event.source.applicationId
- event.source.configurationContext
- event.source.flowId
- event.source.stepId
language
) event
) valueMapProviders
)
type: com.airlock.iam.login.application.configuration.event.LoginappSmsEventSubscriberConfig
id: LoginappSmsEventSubscriberConfig-xxxxxx
displayName:
comment:
properties:
event:
language:
messageResourceKey: sms.notification.message
phoneNumberProviders:
smsSettings:
valueMapProviders:
SMS Finder Gateway
Note:
- As the appliance uses an internal GSM modem to send SMS messages, the originator name is configured in the device itself and cannot be set by this plugin, i.e. the originator set by Airlock IAM will be ignored.
- The appliance supports querying the delivery status of SMS messages.
username
) password
) serviceUrl
) modemIndex
) silentlyHandledErrorCodes
) proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
connectTimeout
) Therefore, a connection may take a maximum of twice this time until it is aborted.
correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
visiblePhoneNumberDigitsInLog
) Defines the number of phone number digits visible in log statements.
Thus, if the value is zero, all digits are masked, if it is large enough, all digits are visible. If set to 3, for example, the logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.core.misc.impl.sms.SmsFinderGateway
id: SmsFinderGateway-xxxxxx
displayName:
comment:
properties:
allowOnlyTrustedCerts: true
connectTimeout: 10
correlationIdHeaderName:
modemIndex:
password:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
serviceUrl:
silentlyHandledErrorCodes:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
username:
verifyServerHostname: true
visiblePhoneNumberDigitsInLog: 100
SMS Gateway Selection Option
SMS gateway selection option based on phone number regex matching.
Allows to use a specific SMS gateway for phone numbers matching a regex pattern. If the phone number matches the pattern, the configured gateway is then used to send the SMS.
pattern
) The phone number will be checked against this pattern.
Note that the phone number is always normalized before checking it against the configured regex patterns meaning all whitespace is removed and the country code is added if it is missing, e.g. "+411234567".
gateway
)
type: com.airlock.iam.core.misc.impl.sms.SmsGatewaySelectionRegexOption
id: SmsGatewaySelectionRegexOption-xxxxxx
displayName:
comment:
properties:
gateway:
pattern:
SMS Identity Verification Step
Public self-service flow step that verifies the user identity by sending an SMS with an OTP that the user has to enter correctly for the flow to continue.
This is an identity verification step that differs from a general "factor check" step in the following ways:
- It doesn't fail with non-existing users or users without a phone number.
- It never presents a phone number selection, but automatically selects the last used number.
- It implements stealth mode: if a user does not exist or cannot do public self-services for whatever reason, no error is returned, but any OTP entered is rejected, so that the step can never be completed successfully.
mtanSettings
) messageProvider
) otpGenerator
) maxFailedAttempts
) otpValidity
) otpCaseSensitive
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.SmsIdentityVerificationStepConfig
id: SmsIdentityVerificationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: MTAN
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
maxFailedAttempts: 1
messageProvider:
mtanSettings:
onFailureGotos:
otpCaseSensitive: true
otpGenerator:
otpValidity: 300
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
SMS Notifier
smsGateway
) userPersister
) originatorName
) mobileNumberContextDataField
) smsBody
)
type: com.airlock.iam.core.misc.impl.notification.SmsNotifier
id: SmsNotifier-xxxxxx
displayName:
comment:
properties:
mobileNumberContextDataField:
originatorName:
smsBody:
smsGateway:
userPersister:
SMS Service
originator
) smsGateway
)
type: com.airlock.iam.common.application.configuration.SmsServiceConfig
id: SmsServiceConfig-xxxxxx
displayName:
comment:
properties:
originator:
smsGateway:
SMTP Email Server
host
) port
) protocol
) For SMTPS the trust store has to be added as a Java system property:
-Djavax.net.ssl.trustStore=trustStoreFile
useStarttls
) If enabled, STARTTLS is triggered by the client when using plain SMTP transport to switch to encrypted communication.
This setting isn't relevant when using SMTPS (SMTP over SSL/TLS), or when STARTTLS is enforced by the server.
user
) password
) connectionTimeout
) For SMTPS, a timeout of 7000ms is recommended.
readTimeout
)
type: com.airlock.iam.core.misc.impl.email.SmtpServerConfig
id: SmtpServerConfig-xxxxxx
displayName:
comment:
properties:
connectionTimeout: 5000
host:
password:
port: 25
protocol: SMTP
readTimeout: 10000
useStarttls: false
user:
SMTP Email Service
emailServers
) An email is generally sent using the last known working server. Initially, the first server in the list is used. If a server fails, an automatic failover to the next server is triggered. If the end of the list is reached, a rollover to the beginning of the list occurs. The failover process is repeated until all servers have been tried at most once.
fromAddress
) contentTransferEncoding
) contentCharset
) enableSmimeSign
) TRUE
, sign the emails using SMIME. keystoreFile
) Note: If the keystore file name is relative, it is loaded relative to the current directory of the JVM process.
keystorePassword
) keyAlias
) keyPassword
) enableSmimeEncryption
) TRUE
, emails are sent encrypted using SMIME. encryptionErrorMessage
) Only needed when encryption is enabled.
encryptionAlgorithm
) Only needed when encryption is enabled.
emailCertificateProvider
) Only needed when encryption is enabled.
recipientWhitelist
)
type: com.airlock.iam.core.misc.impl.email.SmtpEmailService
id: SmtpEmailService-xxxxxx
displayName:
comment:
properties:
contentCharset: UTF-8
contentTransferEncoding:
emailCertificateProvider:
emailServers:
enableSmimeEncryption: false
enableSmimeSign: false
encryptionAlgorithm: AES256_CBC
encryptionErrorMessage:
fromAddress:
keyAlias:
keyPassword:
keystoreFile:
keystorePassword:
recipientWhitelist:
Software ID and Software Version Processor
allowedIds
) allowedVersions
) mandatory
)
type: com.airlock.iam.techclientreg.application.configuration.registration.SoftwareIdAndVersionProcessorConfig
id: SoftwareIdAndVersionProcessorConfig-xxxxxx
displayName:
comment:
properties:
allowedIds: [a-zA-Z0-9_.-]+
allowedVersions: [a-zA-Z0-9_.-]+
mandatory: true
Sql Executor Task
sqlDataSource
) sqlStatement
) logExecutedStatements
) executionTimeThreshold
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.SqlExecutorTask
id: SqlExecutorTask-xxxxxx
displayName:
comment:
properties:
executionTimeThreshold:
logExecutedStatements: true
sqlDataSource:
sqlStatement:
SSI Age Check Predicate
Example: To check if someone is over 18, set the attribute name to e.g.
birthdate_dateint(where the attribute contains a date in the format YYYYMMDD), the predicate type to
GREATER_EQand the age threshold to 18.
name
) type
) ageThreshold
) providerKey
)
type: com.airlock.iam.ssi.application.configuration.AgePredicateConfig
id: AgePredicateConfig-xxxxxx
displayName:
comment:
properties:
ageThreshold:
name:
providerKey:
type:
SSI Attribute
name
) providerKey
)
type: com.airlock.iam.ssi.application.configuration.SsiAttributeConfig
id: SsiAttributeConfig-xxxxxx
displayName:
comment:
properties:
name:
providerKey:
SSI Attribute Mapping
attributeName
) valueMapKey
)
type: com.airlock.iam.ssi.application.configuration.SsiAttributeMapping
id: SsiAttributeMapping-xxxxxx
displayName:
comment:
properties:
attributeName:
valueMapKey:
SSI Authentication Step
This feature is incubating. Please consult the documentation for more information.
service
) schemaId
) trustedIssuers
) proofRequestTitleKey
) userNameAttribute
) usernameTransformers
) additionalClaims
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.ssi.application.configuration.step.SsiAuthenticationStepConfig
id: SsiAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
additionalClaims:
authenticationMethodId: SSI
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
proofRequestTitleKey: authentication.ssi.proof-request-name
requiresActivation: false
schemaId:
service:
skipCondition:
stepId:
tagsOnSuccess:
trustedIssuers:
userNameAttribute:
usernameTransformers:
SSI Claim
schemaId
) trustedIssuers
) requestedAttributes
) requestedPredicates
)
type: com.airlock.iam.ssi.application.configuration.SsiClaimConfig
id: SsiClaimConfig-xxxxxx
displayName:
comment:
properties:
requestedAttributes:
requestedPredicates:
schemaId:
trustedIssuers:
SSI Issuance Step
This feature is incubating. Please consult the documentation for more information.
service
) schemaId
) valueProviders
) attributeMappings
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.ssi.application.configuration.step.SsiIssuanceStepConfig
id: SsiIssuanceStepConfig-xxxxxx
displayName:
comment:
properties:
attributeMappings:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
schemaId:
service:
skipCondition:
stepId:
tagsOnSuccess:
valueProviders:
SSI Passwordless Authentication Step
This feature is incubating. Please consult the documentation for more information.
service
) schemaId
) trustedIssuers
) proofRequestTitleKey
) userNameAttribute
) usernameTransformers
) additionalClaims
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.ssi.application.configuration.step.SsiPasswordlessAuthenticationStepConfig
id: SsiPasswordlessAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
additionalClaims:
authenticationMethodId: SSI
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
proofRequestTitleKey: authentication.ssi.proof-request-name
requiresActivation: false
schemaId:
service:
skipCondition:
stepId:
tagsOnSuccess:
trustedIssuers:
userNameAttribute:
usernameTransformers:
SSI Verification Data Provider
type: com.airlock.iam.ssi.application.configuration.SsiVerificationDataProviderConfig
id: SsiVerificationDataProviderConfig-xxxxxx
displayName:
comment:
properties:
SSI Verification Step
This feature is incubating. Please consult the documentation for more information.
service
) proofRequestTitleKey
) claims
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.ssi.application.configuration.step.SsiVerificationStepConfig
id: SsiVerificationStepConfig-xxxxxx
displayName:
comment:
properties:
claims:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
proofRequestTitleKey: authentication.ssi.proof-request-name
requiresActivation: false
service:
skipCondition:
stepId:
tagsOnSuccess:
SSO Cookie Ticket Extractor
cookieName
) urlDecodeValue
) URL-decoding is applied before the 'String Transformers' run.
stringTransformers
)
type: com.airlock.iam.common.application.configuration.sso.SsoCookieTicketExtractorConfig
id: SsoCookieTicketExtractorConfig-xxxxxx
displayName:
comment:
properties:
cookieName:
stringTransformers:
urlDecodeValue: true
SSO Credential Authenticator
type: com.airlock.iam.login.misc.oneshot.SSOCredentialAuthenticator
id: SSOCredentialAuthenticator-xxxxxx
displayName:
comment:
properties:
SSO Header Ticket Extractor
headerName
) urlDecodeValue
) URL-decoding is applied before the 'String Transformers' run.
stringTransformers
)
type: com.airlock.iam.common.application.configuration.sso.SsoHeaderTicketExtractorConfigImpl
id: SsoHeaderTicketExtractorConfigImpl-xxxxxx
displayName:
comment:
properties:
headerName:
stringTransformers:
urlDecodeValue: true
SSO Ticket Authentication Step
authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
ignoreTicketDataOfTicketsForAuthenticatedUser
) Ignores ticket data of tickets for the already authenticated user in the session. The step will be successful in such cases. Tickets will in any case still be validated and the step will fail for invalid tickets or tickets identifying a different user than the already authenticated user.
This configuration might be useful in combination with other features (e.g. OpenId Connect SSO Login Hint), so that the ticket is ignored in case of an existing user session with the same user as in the ticket.
ticketExtractors
) ticketDecoder
) acceptedSsoTicketRepository
) Configures the repository used to store accepted SSO tickets and reject previously accepted ones.
The in-memory repository cannot be used if multiple instances of IAM are deployed in parallel (failover, horizontal scaling). Furthermore, the in-memory repository does not preserve previously accepted SSO tickets across IAM restarts.
usernameTicketKey
) ticketTagExtractors
) ticketRoleExtractors
) ticketContextDataExtractors
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.sso.SsoTicketIdentifyingStepConfig
id: SsoTicketIdentifyingStepConfig-xxxxxx
displayName:
comment:
properties:
acceptedSsoTicketRepository:
authenticationMethodId: SSO_TICKET
customFailureResponseAttributes:
customResponseAttributes:
ignoreTicketDataOfTicketsForAuthenticatedUser: false
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
ticketContextDataExtractors:
ticketDecoder:
ticketExtractors:
ticketRoleExtractors:
ticketTagExtractors:
usernameTicketKey: username
SSO Ticket Context Data Extractor
ticketKeys
)
type: com.airlock.iam.common.application.configuration.sso.DefaultSsoTicketContextDataExtractorConfig
id: DefaultSsoTicketContextDataExtractorConfig-xxxxxx
displayName:
comment:
properties:
ticketKeys:
SSO Ticket Context Data Provider
type: com.airlock.iam.login.application.configuration.targetapp.SsoTicketContextDataProviderConfig
id: SsoTicketContextDataProviderConfig-xxxxxx
displayName:
comment:
properties:
SSO Ticket Identity Propagator
Redirects to another Loginapp and provides the user ID, user roles as a query parameter (encryption strongly recommended).
This identity propagator works together with the SSO facility of the Loginapp. Using this plugin one Loginapp could play the IdP role and the other Loginapp could play the SP role in a very simple cross-domain SSO setup.
ticketParameterName
) To use it together with another Loginapp instance as service provider always configure sso
as parameter name.
ticketLifetimeInSeconds
) How long should the SSO ticket be considered valid.
redirectUrl
) Configure this if you do not want to redirect the browser to the original target URL but rather to a static URL and provide the original target URL as a query parameter.
forwardLocationParameter
) Only used if "Redirect URL" is configured and not empty.
The original target URL is appended to the "Redirect URL" as a query parameter with this name.
encoder
) Note: for browser compatibility make sure the resulting redirect URL is no longer than 2000 characters.
additionalDataTicketService
) additionalDataKeyValuePairs
) If supported by the ticket service plugin, this is a way to add such an extra key-value-pair to a ticket.
The key-value-pairs are added to the key-value-pairs passed to this plugin by the calling application. It overwrites existing values with the same key.
type: com.airlock.iam.core.misc.impl.sso.SsoTicketIdentityPropagator
id: SsoTicketIdentityPropagator-xxxxxx
displayName:
comment:
properties:
additionalDataKeyValuePairs:
additionalDataTicketService:
encoder:
forwardLocationParameter: Location
redirectUrl:
ticketLifetimeInSeconds: 5
ticketParameterName: sso
SSO Ticket Request Authentication
SSO tickets are not remembered and can be used for multiple requests.
ssoTicketExtractor
) ticketDecoder
) The ticket decoder plugin used to decode the SSO ticket.
Security note: If tickets are transported via the web browser (in the URL), they need to be protected. Make sure to use an appropriate ticket decoder securing the ticket (e.g. digitally signed and/or encrypted)!
contextDataExtractors
) usernameKey
) providedUsernameKey
) The ticket key containing the provided username, which is used for logging and possibly displayed.
This is not combinable with Username Transformation. If the ticket does not contain a provided username, the value from "Username Key" is used.
rolesKey
) userStore
) usernameTransformers
) staticRoles
) rolesBlocklist
)
type: com.airlock.iam.common.application.configuration.credential.SsoTicketRequestAuthenticationConfig
id: SsoTicketRequestAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
contextDataExtractors:
providedUsernameKey:
rolesBlocklist:
rolesKey:
ssoTicketExtractor:
staticRoles:
ticketDecoder:
userStore:
usernameKey: username
usernameTransformers:
SSO Ticket Role Extractor
ticketKeys
)
type: com.airlock.iam.common.application.configuration.sso.DefaultSsoTicketRoleExtractorConfig
id: DefaultSsoTicketRoleExtractorConfig-xxxxxx
displayName:
comment:
properties:
ticketKeys:
SSO Ticket Roles Provider
type: com.airlock.iam.login.application.configuration.targetapp.SsoTicketRolesProviderConfig
id: SsoTicketRolesProviderConfig-xxxxxx
displayName:
comment:
properties:
SSO Ticket Tag Extractor
ticketKeys
) ticketValueToTag
)
type: com.airlock.iam.authentication.application.configuration.sso.DefaultSsoTicketTagExtractorConfig
id: DefaultSsoTicketTagExtractorConfig-xxxxxx
displayName:
comment:
properties:
ticketKeys:
ticketValueToTag:
Start User Representation Step
representationAuthorization
) roleProviders
) The roles will be added to the SSO ticket under the key 'roles'.
ticketEncoder
) allowedTargetLocationPatterns
) A list of regular expressions defining the allowed target locations.
A target location is accepted if at least one of the configured regular expressions matches.
The default pattern is "/(?!/).*", which allows all context-relative URLs, i.e. URLs starting with a forward slash.
Security warning: The provided forward location may contain arbitrary user input! It is therefore highly recommended that the configured patterns be as restrictive as possible. Overly lax patterns like '.*' expose Airlock IAM and the target application to severe attacks, e.g.: open redirect, server-side request forgery and injection attacks (SQL, XSS, etc ...). Such patterns are therefore not allowed.representeeAccessUri
) Note the different URIs for SPA or Non-SPA IAM on the representee side.
representeeLogoutUri
) Note the different URIs for SPA or Non-SPA IAM on the representee side.
languageParameterName
) No language is propagated, if this parameter is not configured.
ticketParameterName
) representerIdValueProvider
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.StartUserRepresentationStepConfig
id: StartUserRepresentationStepConfig-xxxxxx
displayName:
comment:
properties:
allowedTargetLocationPatterns: [/(?!/).*]
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
languageParameterName:
onFailureGotos:
preCondition:
representationAuthorization:
representeeAccessUri:
representeeLogoutUri:
representerIdValueProvider:
requiresActivation: false
roleProviders:
skipCondition:
stepId:
tagsOnSuccess:
ticketEncoder:
ticketParameterName: representation
Static Authenticator
If the username is left empty, the username entered by the user will be used, else the configured username will be used.
username
) grantedRoles
)
type: com.airlock.iam.core.misc.impl.authen.StaticAuthenticator
id: StaticAuthenticator-xxxxxx
displayName:
comment:
properties:
grantedRoles:
username:
Static Blacklist Password Policy
The black-listed passwords are read from a simple text file with one password per line.
Example:secret
changeme
password
letmein
Line-breaks can be Windows- or Unix-style.
blackListFile
) ignoreCase
)
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyStaticBlacklistCheck
id: PwdPolicyStaticBlacklistCheck-xxxxxx
displayName:
comment:
properties:
blackListFile:
ignoreCase: false
Static Boolean Value Provider
value
)
type: com.airlock.iam.common.application.configuration.valueprovider.BooleanStaticValueProviderConfig
id: BooleanStaticValueProviderConfig-xxxxxx
displayName:
comment:
properties:
value: false
Static Context Extractor
staticContext
)
type: com.airlock.iam.core.misc.util.context.StaticContextExtractor
id: StaticContextExtractor-xxxxxx
displayName:
comment:
properties:
staticContext:
Static Credential Persister
type: com.airlock.iam.core.misc.impl.persistency.StaticCredentialPersister
id: StaticCredentialPersister-xxxxxx
displayName:
comment:
properties:
Static Date And Time Value Provider
value
) The date and time value to be provided.
The string provided by this plugin will be parsed as a date and time value with the format specified in Format.
format
) The date and time format used to parse the value provided by Value.
The format is interpreted as specified in the java.text.SimpleDateFormat documentation.
type: com.airlock.iam.common.application.configuration.valueprovider.DateAndTimeStaticValueProviderConfig
id: DateAndTimeStaticValueProviderConfig-xxxxxx
displayName:
comment:
properties:
format: yyyy-MM-dd'T'HH:mm:ssZ
value:
Static Gateway Role
airlockGatewayRole
) idleTimeout
) lifetime
)
type: com.airlock.iam.login.application.configuration.targetapp.StaticWafCredentialProviderConfig
id: StaticWafCredentialProviderConfig-xxxxxx
displayName:
comment:
properties:
airlockGatewayRole:
idleTimeout:
lifetime:
Static Header
name
) value
) mappingNames
) If no mapping name is specified, the HTTP header is used on all Airlock Gateway mappings.
Note: Headers must never be defined globally and on a specific mapping at the same time.
type: com.airlock.iam.core.misc.impl.sso.StaticHeader
id: StaticHeader-xxxxxx
displayName:
comment:
properties:
mappingNames:
name:
value:
Static HTTP Parameter
name
) value
)
type: com.airlock.iam.core.misc.impl.sms.StaticHttpParameter
id: StaticHttpParameter-xxxxxx
displayName:
comment:
properties:
name:
value:
Static Integer Value Provider
value
)
type: com.airlock.iam.common.application.configuration.valueprovider.IntegerStaticValueProviderConfig
id: IntegerStaticValueProviderConfig-xxxxxx
displayName:
comment:
properties:
value:
Static Request Authentication
Provides a static username and roles for the authentee.
Security warning:With this plugin, all requests to the REST API are considered authenticated and authorized accoring to the granted roles. Use this only for testing or in a trusted enviroment.
username
) userStore
) staticRoles
) rolesBlocklist
)
type: com.airlock.iam.common.application.configuration.credential.StaticRequestAuthenticationConfig
id: StaticRequestAuthenticationConfig-xxxxxx
displayName:
comment:
properties:
rolesBlocklist:
staticRoles:
userStore:
username:
Static Response Header
name
) value
)
type: com.airlock.iam.core.application.configuration.header.StaticResponseHeader
id: StaticResponseHeader-xxxxxx
displayName:
comment:
properties:
name:
value:
Static Roles
roles
)
type: com.airlock.iam.login.application.configuration.targetapp.StaticRolesProviderConfig
id: StaticRolesProviderConfig-xxxxxx
displayName:
comment:
properties:
roles:
Static SAML 2.0 Attribute
samlAttributeName
) staticValues
) nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.StaticSamlAttributeConfig
id: StaticSamlAttributeConfig-xxxxxx
displayName:
comment:
properties:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
samlAttributeName:
staticValues:
Static String (OAuth 2.0 Token Exchange)
value
)
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtStaticStringClaimValueConfig
id: OAuth2TokenExchangeJwtStaticStringClaimValueConfig-xxxxxx
displayName:
comment:
properties:
value:
Static String Custom Claim
staticValue
) claimName
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.claims.CustomStaticStringClaimConfig
id: CustomStaticStringClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
staticValue:
Static String Value Provider
value
) The value to be provided.
If this field is not configured, the provided value will be an empty string.
type: com.airlock.iam.common.application.configuration.valueprovider.StringStaticValueProviderConfig
id: StringStaticValueProviderConfig-xxxxxx
displayName:
comment:
properties:
value:
Static String-Array (OAuth 2.0 Token Exchange)
values
)
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtStaticStringArrayClaimValueConfig
id: OAuth2TokenExchangeJwtStaticStringArrayClaimValueConfig-xxxxxx
displayName:
comment:
properties:
values:
Static Timeout Provider Config
Static timeouts, which are always applied. Use 0 to apply the default Airlock Gateway idle timeout or lifetime.
- If both values are set, "Idle Timeout" has to be smaller or equal to "Lifetime".
- Either "Idle Timeout" or "Lifetime" has to be set. If only one is set, the other value is implicitly treated as 0 and the default Airlock Gateway timeout is used.
idleTimeout
) lifetime
)
type: com.airlock.iam.authentication.application.configuration.wafcredentials.StaticTimeoutProviderConfig
id: StaticTimeoutProviderConfig-xxxxxx
displayName:
comment:
properties:
idleTimeout:
lifetime:
Static Username Password Extractor
username
) password
)
type: com.airlock.iam.login.app.misc.configuration.oneshot.impl.StaticUsernamePasswordExtractorConfig
id: StaticUsernamePasswordExtractorConfig-xxxxxx
displayName:
comment:
properties:
password:
username: test
Static Values To Tags
valueToTagMappings
) Mapping from static values to flow tags.
For each string value matching a key in this mapping, the corresponding tag will be added. Unknown values (i.e. not matching a key in this map) will be ignored.
Note that the string matching is case-sensitive and the value must match exactly for the corresponding tag to be created.
type: com.airlock.iam.flow.shared.application.configuration.tag.StaticTagMappingConfig
id: StaticTagMappingConfig-xxxxxx
displayName:
comment:
properties:
valueToTagMappings:
Step Activated
stepId
)
type: com.airlock.iam.flow.application.configuration.selection.condition.StepActivationConditionConfig
id: StepActivationConditionConfig-xxxxxx
displayName:
comment:
properties:
stepId:
Step ID
id
)
type: com.airlock.iam.flow.api.application.configuration.step.StepIdConfig
id: StepIdConfig-xxxxxx
displayName:
comment:
properties:
id:
STET PSD2 Authenticator
- The subject's organizationIdentifier (TPP) of the client certificate as the username.
- The access token's scopes as roles (MUST be restricted accordingly in the authorization server configuration)
- For authorization code grants, the user (PSU) that has granted the TPP access. Available in the context data as "PSU_ID"
Further constraints will be validated:
- The used client certificate (QWAC) for the TLS connection will be validated according to the configuration.
- The access token must belong to the same technical client as the client certificate.
authorizationServerIdentifier
) checkValidityPeriod
) certStatusCheckers
)
type: com.airlock.iam.login.app.application.configuration.psd2.StetPsd2CertificateAuthenticatorConfig
id: StetPsd2CertificateAuthenticatorConfig-xxxxxx
displayName:
comment:
properties:
authorizationServerIdentifier:
certStatusCheckers:
checkValidityPeriod: true
STET PSD2 OAuth 2.0 Scope Filter
STET OAuth 2.0 scope values
- aisp (covered by PSP_AI role)
- extended_transaction_history (covered by PSP_AI role)
- cbpii (covered by PSP_IC role)
- pisp (covered by PSP_PI role)
Prevents AISP and CBPII roles from being mixed in a single scope definition.
type: com.airlock.iam.oauth2.application.configuration.as.OAuth2GrantedScopeStetPsd2FilterProcessorConfig
id: OAuth2GrantedScopeStetPsd2FilterProcessorConfig-xxxxxx
displayName:
comment:
properties:
Stop User Representation Step
representeeLogoutPath
) Note the different URLs for SPA or Non-SPA IAM on the representee side.
languageParameterName
) No language is propagated, if this parameter is not configured.
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.StopUserRepresentationStepConfig
id: StopUserRepresentationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
languageParameterName:
onFailureGotos:
preCondition:
representeeLogoutPath:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Storage Encryption Configuration
Defines how data is encrypted when stored on the database.
Beware that changing the configured secret may result in data loss.
secret
) A Base64-encoded secret. It must be exactly 768 bits (96 bytes or 128 Base64-encoded characters) long.
One can, for example, generate a random Base64 string with 768 bits (96 bytes) using openssl as follows: openssl rand -base64 96
type: com.airlock.iam.common.application.configuration.security.StorageEncryptionConfig
id: StorageEncryptionConfig-xxxxxx
displayName:
comment:
properties:
secret:
String Context Data
contextDataItemNameConfig
) valueProviderConfig
)
type: com.airlock.iam.userselfreg.application.configuration.definition.StringNonInteractiveUserDataItemDefinitionConfig
id: StringNonInteractiveUserDataItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
contextDataItemNameConfig:
valueProviderConfig:
String Context Data Item Config
The database column must be of a string type (e.g. VARCHAR/VARCHAR2 or CHAR (whitespaces are trimmed)) and the values in the context data container are guaranteed to be of type java.lang.String.
contextDataName
) databaseColumnName
) readonlyOnUpdate
)
type: com.airlock.iam.core.application.configuration.contextdata.StringContextDataItemConfig
id: StringContextDataItemConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
databaseColumnName:
readonlyOnUpdate: false
String Context Data Item Name
contextDataName
)
type: com.airlock.iam.core.application.configuration.contextdata.StringContextDataItemNameConfig
id: StringContextDataItemNameConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
String Context Data User Group Condition Config
pattern
) groupName
) contextDataItemName
)
type: com.airlock.iam.common.application.configuration.StringContextDataUserGroupConditionConfig
id: StringContextDataUserGroupConditionConfig-xxxxxx
displayName:
comment:
properties:
contextDataItemName:
groupName:
pattern:
String Context Data Value Provider
Provides the string value contained in the specified context data item of the user.
Make sure the configured context data item is also configured on the user persister.
contextDataField
) mandatory
) If enabled, the value provided by this context data item is not allowed to be null.
If this option is enabled and the context data item is null (e.g. if the configured context data is not configured on the user persister), an exception will be thrown at runtime.
type: com.airlock.iam.common.application.configuration.valueprovider.contextdata.ContextDataStringValueProviderConfig
id: ContextDataStringValueProviderConfig-xxxxxx
displayName:
comment:
properties:
contextDataField:
mandatory: false
String Format Custom Claim
format
) claimName
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.claims.CustomStringFormatClaimConfig
id: CustomStringFormatClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
format:
String From Actor Token (OAuth 2.0 Token Exchange)
Sets the claim to the configured data value of the actor token.
Only string values are considered. If the configured data value of the actor token contains a non-string value, it will be ignored.
actorTokenDataName
)
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2StringFromActorTokenConfig
id: OAuth2StringFromActorTokenConfig-xxxxxx
displayName:
comment:
properties:
actorTokenDataName:
String From Map Value Provider
valueMaps
) key
)
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.StringFromMapValueProviderConfig
id: StringFromMapValueProviderConfig-xxxxxx
displayName:
comment:
properties:
key:
valueMaps:
String From Subject Token (OAuth 2.0 Token Exchange)
Will set the claim to the configured data value of the subject token.
Only string values are considered. If the configured data value of the subject token contains a non string value, it will be ignored.
subjectTokenDataName
)
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtSubjectTokenStringClaimValueConfig
id: OAuth2TokenExchangeJwtSubjectTokenStringClaimValueConfig-xxxxxx
displayName:
comment:
properties:
subjectTokenDataName:
String HTTP Signature Header
headerName
)
type: com.airlock.iam.login.app.misc.oneshot.impl.StringHttpSignatureHeader
id: StringHttpSignatureHeader-xxxxxx
displayName:
comment:
properties:
headerName:
String Input Token Controller Element
label
) property
) The referenced property must be available in the attributes
value of the generic token REST call response. If the property is nested, e.g. inside the contextData
key, it can be referenced with dot notation (see example values).
The ID of the response is referenced by using the reserved value @id
.
placeholder
) required
) readOnly
) hideIfEmpty
) validation
)
type: com.airlock.iam.admin.application.configuration.generic.ui.StringInputTokenControllerUiElementConfig
id: StringInputTokenControllerUiElementConfig-xxxxxx
displayName:
comment:
properties:
hideIfEmpty: false
label:
placeholder:
property:
readOnly: false
required: false
validation:
String Regex Condition Config
valueProvider
) regexPattern
) isFulfilledIfValueIsNull
)
type: com.airlock.iam.flow.shared.application.configuration.condition.StringRegexConditionConfig
id: StringRegexConditionConfig-xxxxxx
displayName:
comment:
properties:
isFulfilledIfValueIsNull: false
regexPattern:
valueProvider:
String Transformation Failed Config
type: com.airlock.iam.common.application.configuration.location.transform.StringTransformationFailedConfig
id: StringTransformationFailedConfig-xxxxxx
displayName:
comment:
properties:
String User Context Data Item
contextDataName
) required
) validators
)
type: com.airlock.iam.flow.shared.application.configuration.item.StringContextDataItemDefinitionConfig
id: StringContextDataItemDefinitionConfig-xxxxxx
displayName:
comment:
properties:
contextDataName:
required: true
validators:
String User Profile Item
validationPattern
) Pattern for validating the value of the field.
The provided regex is used in Java for server-side validation and potentially in Javascript for client-side validation. The capabilities of these regex interpreters differ. Therefore make sure to only use patterns that are equivalent in both types of interpreters.
checkUniqueness
) If defined, the user persister is used to check whether the value is unique by querying the corresponding user iterator plugin.
This user iterator must provide the context data value specified by this profile item.
Usually, the same plugin is used that was used to load the user data to the form this profile item is part of.
checkUniquenessAgainstUsername
) If set to true
, uniqueness is also checked against the username
. The value entered by the user is not allowed to exist neither in the configured property nor as a username. This is mainly used in conjunction with a username transformer, where login is possible with an alias property in addition to the username.
This flag is only checked if checkUniqueness
is configured.
prefill
) stringResourceKey
) propertyName
) optional
) modifiable
) validateOnlyChangedValues
) sortable
)
type: com.airlock.iam.common.application.configuration.userprofile.StringUserProfileItemConfig
id: StringUserProfileItemConfig-xxxxxx
displayName:
comment:
properties:
checkUniqueness:
checkUniquenessAgainstUsername: false
modifiable: true
optional: true
prefill:
propertyName:
sortable: true
stringResourceKey:
validateOnlyChangedValues: true
validationPattern:
String Value Provider Custom Claim
This custom claim allows providing flow information into JWT tokens as a custom claim.
stringProvider
) Note: No claim is added if the string value provider returns null.
claimName
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.claims.CustomStringValueProviderClaimConfig
id: CustomStringValueProviderClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
stringProvider:
String Value Token Controller Element
label
) property
) The referenced property must be available in the attributes
value of the generic token REST call response. If the property is nested, e.g. inside the contextData
key, it can be referenced with dot notation (see example values).
The ID of the response is referenced by using the reserved value @id
.
hideIfEmpty
)
type: com.airlock.iam.admin.application.configuration.generic.ui.StringValueTokenControllerUiElementConfig
id: StringValueTokenControllerUiElementConfig-xxxxxx
displayName:
comment:
properties:
hideIfEmpty: true
label:
property:
String-Array From Subject Token (OAuth 2.0 Token Exchange)
Sets the claim to the configured string-array data value of the subject token.
Only string-array values will be considered. If the referenced subject token data is not an array or if its elements are not all strings, it will be ignored and the claim value will not be set.
If the configured subject token data is not present, is an empty array, or none of its values match a configured pattern, the claim value will not be set.
subjectTokenDataName
) valueFilters
) If the list is configured and none of the subject token data values match any of the configured patterns, the claim value will not be set.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtSubjectTokenStringArrayClaimValueConfig
id: OAuth2TokenExchangeJwtSubjectTokenStringArrayClaimValueConfig-xxxxxx
displayName:
comment:
properties:
subjectTokenDataName:
valueFilters:
String-based Role Provider
valueProvider
) separator
)
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.StringBasedRoleProviderConfig
id: StringBasedRoleProviderConfig-xxxxxx
displayName:
comment:
properties:
separator: ,
valueProvider:
Subject From Subject Token (OAuth 2.0 Token Exchange)
Sets the claim value to that of the subject token's "sub" data.
Only string values are considered. If the subject token's "sub" data is a not a string value, it will be ignored.
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.rules.jwt.OAuth2TokenExchangeJwtSubjectTokenSubjectClaimValueConfig
id: OAuth2TokenExchangeJwtSubjectTokenSubjectClaimValueConfig-xxxxxx
displayName:
comment:
properties:
Subject Token Unsigned Claims Extractor
Caution: JWT tokens with alg=none are accepted: This may be a security risk.
allowedTokenIssuers
)
type: com.airlock.iam.oauth2.application.configuration.tokenexchange.OAuth2SubjectTokenUnsignedClaimsExtractorConfig
id: OAuth2SubjectTokenUnsignedClaimsExtractorConfig-xxxxxx
displayName:
comment:
properties:
allowedTokenIssuers:
Swiss Post Barcode Generator
serviceCode
) - 98: Used for shipping letters (Briefpost)
frankingLicence
) sequenceGenerator
) width
) Width of the barcode image in pixels.
Note:The barcode uses a fixed number of pixels per encoded character. Therefore, the resulting barcode image may contain padding bits to the left and right if the width is larger than required but not large enough to support more bits per character. Widths resulting in little padding are, e.g., 150, 280, 410, or 540.
height
) margins
)
type: com.airlock.iam.core.misc.util.report.barcode.SwissPostBarcodeGenerator
id: SwissPostBarcodeGenerator-xxxxxx
displayName:
comment:
properties:
frankingLicence:
height: 30
margins: 0
sequenceGenerator:
serviceCode:
width: 280
Swiss Post Tracking Service
username
) password
) wsdlLocation
) namespaceUri
) trackAndTraceService
) enableDetailedEventNumberMapping
) deliveredEventCodes
) beingProcessedEventCodes
) notDeliveredEventCodes
) returnToSenderEventCodes
) maintainSessionState
) This is usually not necessary. By default this feature is turned off.
proxyHost
) proxyPort
) serviceEndpointUrls
) Notice that the service name must not be added to the URL here.
revertToFirstServerTimeout
) Timeout in milliseconds after which the first server in the list is tried again, even though another server could be reached recently. This is used to prioritize the first server and make sure the current client doesn't permanently switch to another server even though the first one could be available again. Use this property if you want to make sure that every client mostly uses his preferred server. It should not be set too short to avoid trying the first (unreachable) server again for every consecutive call. If left empty or not defined, the client will keep using whatever server he can connect to successfully at the moment.
connectionTimeout
) readTimeout
) keystore
) - Airlock IAM client certificate for authenticating towards the server
- The trusted server certificate(s)
keystorePassword
) trustAllServerCertificates
)
type: com.airlock.iam.core.misc.impl.trackingservice.SwissPostTrackingService
id: SwissPostTrackingService-xxxxxx
displayName:
comment:
properties:
beingProcessedEventCodes: 1,2,4,5,6,10,11,12,13,14,15,18,19,35,54,55,88,91,92,94
connectionTimeout:
deliveredEventCodes: 7,20,21,24,38,39,40,42,46,63
enableDetailedEventNumberMapping: false
keystore:
keystorePassword:
maintainSessionState: false
namespaceUri: http://www.post.ch/npp/trackandtracedfuws/v02
notDeliveredEventCodes: 16,17,31,34,36,37,41,47,48,49,51,98
password:
proxyHost:
proxyPort:
readTimeout:
returnToSenderEventCodes: 36
revertToFirstServerTimeout:
serviceEndpointUrls:
trackAndTraceService: TrackAndTraceDFU.ws
trustAllServerCertificates: false
username:
wsdlLocation: /ch/post/npp/trackandtracedfuws/v02/TrackAndTraceDFU.wsdl
Swisscom REST SMS Gateway
Please note: Only characters of the ISO 8859-1 charset can be used. Additionally, the charset that can be used depends on the settings of the Swisscom SMS Large Account.
serviceUri
) accountId
) systemId
) password
) proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
connectTimeout
) Therefore, a connection may take a maximum of twice this time until it is aborted.
correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
visiblePhoneNumberDigitsInLog
) Defines the number of phone number digits visible in log statements.
Thus, if the value is zero, all digits are masked, if it is large enough, all digits are visible. If set to 3, for example, the logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.core.misc.impl.sms.SwisscomRestSmsGateway
id: SwisscomRestSmsGateway-xxxxxx
displayName:
comment:
properties:
accountId:
allowOnlyTrustedCerts: true
connectTimeout: 10
correlationIdHeaderName:
password:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
serviceUri:
systemId:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
verifyServerHostname: true
visiblePhoneNumberDigitsInLog: 100
Swissphone SMS Gateway
The URL configured in this plugin (SwissphoneSmsGateway.Portal List Distribution URL) is called to get a list of available gateways.
portalListDistributionUrl
) portalListDistributionPort
) username
) password
) longSmsOptionEnabled
) priority
) proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
connectTimeout
) Therefore, a connection may take a maximum of twice this time until it is aborted.
correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
visiblePhoneNumberDigitsInLog
) Defines the number of phone number digits visible in log statements.
Thus, if the value is zero, all digits are masked, if it is large enough, all digits are visible. If set to 3, for example, the logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.core.misc.impl.sms.SwissphoneSmsGateway
id: SwissphoneSmsGateway-xxxxxx
displayName:
comment:
properties:
allowOnlyTrustedCerts: true
connectTimeout: 10
correlationIdHeaderName:
longSmsOptionEnabled: false
password:
portalListDistributionPort: 443
portalListDistributionUrl:
priority: high
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
username:
verifyServerHostname: true
visiblePhoneNumberDigitsInLog: 100
Tag
name
) timeout
)
type: com.airlock.iam.flow.application.configuration.tag.TagConfigImpl
id: TagConfigImpl-xxxxxx
displayName:
comment:
properties:
name:
timeout:
Tag Lifetime
lifetime
)
type: com.airlock.iam.flow.application.configuration.tag.TagLifetimeConfig
id: TagLifetimeConfig-xxxxxx
displayName:
comment:
properties:
lifetime:
Tag Removal Step Config
tagsToBeRemoved
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.application.configuration.step.TagRemovalStepConfig
id: TagRemovalStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
tagsToBeRemoved:
Tag Timeout Using Gateway (WAF)
Warning: Requires Airlock Gateway (WAF), which must be configured using the 'Airlock Gateway Settings' in the 'Loginapp REST Settings'. If no Airlock Gateway Settings are present, the tag will time out immediately after flow completion.
idleTimeout
) lifetime
)
type: com.airlock.iam.flow.application.configuration.tag.TagWafTimeoutConfig
id: TagWafTimeoutConfig-xxxxxx
displayName:
comment:
properties:
idleTimeout:
lifetime:
Tag-based Gateway Role
tag
) - If the 'Gateway Role Name' is not defined, the tag name is used as an Airlock Gateway role.
- Otherwise, the 'Gateway Role Name' is used as an Airlock Gateway role.
- If 'Ignore Tag Timeouts' is not selected:
- If this plugin has no lifetime, the tag's lifetime, if present, is added to the Airlock Gateway role.
- If this plugin has no idle timeout the tag's idle timeout, if present, is added to the Airlock Gateway role.
- Otherwise, the lifetime and idle timeout from this plugin are used.
airlockGatewayRole
) ignoreTagTimeouts
) idleTimeout
) lifetime
)
type: com.airlock.iam.login.application.configuration.targetapp.TagBasedGatewayRoleConfig
id: TagBasedGatewayRoleConfig-xxxxxx
displayName:
comment:
properties:
airlockGatewayRole:
idleTimeout:
ignoreTagTimeouts: false
lifetime:
tag:
Tag-based Role Provider
tag
) - If the 'Role Name' is not defined, the tag name name is used as role.
- Otherwise, the 'Role Name' is used.
roleName
)
type: com.airlock.iam.login.application.configuration.targetapp.TagBasedRoleProviderConfig
id: TagBasedRoleProviderConfig-xxxxxx
displayName:
comment:
properties:
roleName:
tag:
Tags From SAML 2.0 Assertion Attribute
SAML 2.0 Assertion Attribute to Import as Tags.
This plugin configures how to import a SAML 2.0 assertion attribute's values as flow tags.
When the attribute is present in the assertion, the attribute's values are mapped to tags by the configured mapping. The resulting tags are then added to the user's flow session.
When the attribute is not present in the assertion, no tags are added to the flow session.
attributeName
) tagMapping
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.Saml2AttributeNameToTagMappingConfig
id: Saml2AttributeNameToTagMappingConfig-xxxxxx
displayName:
comment:
properties:
attributeName:
tagMapping:
TAN Batch Task
In order to understand the following task description, it is important to understand, that a user can have zero, one, or two token lists or matrix cards at the same time: The active token list is the one being used for authentication. The next token list is a new token list waiting to become active. It is generated some time before the current active token list expires so it can be sent to the user. The new token list becomes active, if the current token list expires or is removed. Depending on configuration, just using the new token list will also activate it.
When executed, this task looks at all users with the configured token list iterator plug-in and does the following tasks. The process is done only for active users returned by the token list iterator:
- Remove expired token lists or matrix cards.
- Remove empty token lists.
- If the user has no active list but a valid new token list, the new token list is made the active token list.
- Generate new token lists or new matrix cards where necessary. This is the case if at least one of the following conditions is true:
- If the current token list or matrix card of the user is about to expire and there is no "next token list".
- If there is no token list at all.
- If there is no "next token list" and the corresponding flag ("order new list flag") is set. - Newly generated token lists are rendered by calling the configured token list renderer.
tokenListPersister
) tokenListIterator
) maximumValidityDays
) remainingDaysThreshold
) The value is only relevant when the property maximum-validity-days is not -1.
deliverySecurityGap
) Setting this property to zero (0) disables this feature.
tokenTypeName
) tokenLength
) tokensPerList
) hashFunctionPlugin
) The hash function used to hash the generated tokens. It must be the same (or hash value compatible) as used when generating the token lists.
tokenListRenderer
) languageAttributeName
) If this property is not defined, the user's language is not taken into account when rendering token lists!
deleteOldTokenLists
) If this property is set to TRUE, the plugin must have permission to delete files from the directory.
workingDirectory
) If this property is defined, the token lists are not directly generated into the output directory (see other property) but they are generated into this working directory and are moved to the output directory once they are done.
This helps to solve problems with processes automatically reading the rendered token lists and reading partial token lists during the generation process. Make sure that the working directory and the output directory reside in the same file system (if not the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
outputDirectory
) This property is not required if the renderer plugin (see separate property) does not write on the outputstream (e.g. sends it somewhere else). It is required otherwise.
Note: If this property is not defined and the used renderer plugin writes on the output stream, then the result (e.g. a PDF file) is lost.
fileNamePrefix
) Do not use the prefix "pwd-" if password- reports are stored in the same directory. This prefix is the default for password letters (and not configurable in older plugin versions).
This property is optional to be backwards compatible. It is strongly recommended to define a prefix.
fileNameSuffix
) generationDateExportProperty
) The generation date of the current token list is extracted from the token list data during the task and stored as date object (date and time) using the configured persister.
validityDateExportProperty
) The validity date of the current token list is computed using the generation date and the configured validity of the token list and stored as date object (date and time) using the configured persister.
serialNumberExportProperty
) The serial number of the current token list is extracted from the token list data during the task and stored as string using the configured persister.
remainingTokensExportProperty
) The remaining number of tokens on the current token list is extracted from the token list data during the task and stored as integer number using the configured persister.
aggregateReport
) maxNoOfCardsToPrintPerDay
) Example: if the property is set to 500 but 1000 new cards are to be produced, the generation dates of the cards are set in a way, that the cards expire in blocks of 500 on 2 different days.
Please note:
- Setting this property doubles the runtime of the task. Consider to only set it before bulk generation of matrix cards.
- The actual amount of cards to be printed on a given day could exceed the value of this property due to: 'delivery security gap' configuration, explicitly (manually) ordered cards or used up cards.
- The mechanism does not work retroactive, i.e. the expiration or print date of existing cards will not be altered.
shiftDirection
) Shifting into the past reduces the validity period, shifting into the future extends the validity period.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.TanBatchTask
id: TanBatchTask-xxxxxx
displayName:
comment:
properties:
aggregateReport:
deleteOldTokenLists: false
deliverySecurityGap: 0
fileNamePrefix:
fileNameSuffix:
generationDateExportProperty:
hashFunctionPlugin:
languageAttributeName:
maxNoOfCardsToPrintPerDay:
maximumValidityDays: -1
outputDirectory:
remainingDaysThreshold:
remainingTokensExportProperty:
serialNumberExportProperty:
shiftDirection: PAST
tokenLength:
tokenListIterator:
tokenListPersister:
tokenListRenderer:
tokenTypeName:
tokensPerList:
validityDateExportProperty:
workingDirectory:
TAN Token Verifier
tanService
)
type: com.airlock.iam.core.misc.impl.tokenverifier.TanTokenVerifier
id: TanTokenVerifier-xxxxxx
displayName:
comment:
properties:
tanService:
Target Application Config
applicationId
) applicationSelector
) The first application that matches the forward URI is used.
The selector is ignored for the default application, which is always used when none of the other applications match.
In combination with Authorization Conditions in Protected Self-Service Flows, the Application Selector can be used to trigger step-up authentication.
authenticationFlow
) authorizationFlow
) airlockGatewayRoles
) These are the Airlock Gateway roles (credentials) that are set after the authentication flow and the corresponding authorization flow (if configured) have successfully been completed. These roles are used on the Gateway to control the access to protected backends. If backend applications need user roles, those must be configured in the identity propagators.
Depending on the Gateway Settings, these roles either replace the current Gateway roles or are added to them (default).
identityPropagation
) usernameToPropagateProvider
)
type: com.airlock.iam.login.application.configuration.targetapp.TargetApplicationConfig
id: TargetApplicationConfig-xxxxxx
displayName:
comment:
properties:
airlockGatewayRoles:
applicationId:
applicationSelector:
authenticationFlow:
authorizationFlow:
identityPropagation:
usernameToPropagateProvider:
Target Application Redirect
applicationId
)
type: com.airlock.iam.authentication.application.configuration.ui.AuthFlowRedirectTargetConfig
id: AuthFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
applicationId:
Target Application/Service
Defines how to authenticate HTTP requests based on the original HTTP request sent by the client (provided to IAM in various Airlock Gateway environment cookies).
The following actions are applied for each request:
- Credential Extraction: Extract credential from the HTTP request (e.g. a bearer token or a cookie).
- Authentication: Call specified authenticator with credential (e.g. verify JWT ticket).
- Error handling: If authentication failes, the specified error mapper defines how to respond (e.g. send 401 to client).
- Authorization: Assure roles required to access application/services are given after authentication.
- ID-Propagation: provide information about authenticated user to target application/service.
- Set Airlock Gateway (WAF) roles: provide credentials/roles to Airlock Gateway to allow request to pass to target application/service.
credentialExtractorFactory
) authenticator
) Validates the credential from the credential extractor in order to authenticate the HTTP request.
Note:
- Only non-interactive authentication steps (there is no way to interact with the HTTP client at this point - use the REST authentication API to do so if desired) may be configured.
- The authenticator must know how to handle the credential type provided by the credential extractor.
A common use-case is to verify JWT tokens issued by an upfront authentication process (as "Authorization Bearer" header):
- Extract bearer token from HTTP header (using the "HTTP Header Token Extractor (as SSO Credential)").
- Authenticate the request using the "Lookup and Accept Authenticator" or the "SSO Credential Authenticator".
failureResponses
) identityPropagator
) enableUserTrailLog
) If enabled, a message is logged to the user trail log for every successful or unsuccessful authentication.
Caution: If the Airlock Gateway (WAF) is used in stateless mode, every single request may have to be authenticated by IAM due to missing roles. Hence, every request may generate a message in the user trail log depending on the Airlock Gateway configuration.
urlPattern
) The first pattern (in the list of target applications) that matches the forward URL is used.
The matching is case-insensitive.
The URL pattern is ignored for the default target application.
useDifferentUsername
) - The name of the context data field in which this username is stored. Note that this field needs to be made persistent via the User Persister.
- A fixed username (which is the same for all users). This should start with FIXED: followed by the username. E.g.: if the username is "admin", set this to "FIXED:admin".
- Leave this empty, if no username is required or the standard username should be used.
The resulting username can be transformed further by using the Username Transformation property.
usernameTransformation
) These transformations are applied after the "Use Different Username" property.
useDifferentPassword
) - If no password is required for this application: leave empty.
- If the user has (or can have) a different password at this application: The name of the context data field in which this password is to be stored. Remember that this field needs to be made persistent via the User Persister.
- If a fixed password is used that is the same for all users: Prefix with FIXED: followed by the password, e.g. "FIXED:123456".
- If the user's main password (i.e. the password used to login to Airlock IAM) is used: Leave the field empty, but see the notes below.
- The main password can only be used if the user was required to enter the password upon login. This is not the case for Kerbos and other SSO-Logins. In those cases, this option is not possible.
- Normally, the user's password is only available directly after login. If the user comes back to the Loginapp later, e.g. to access a different application, the password is normally not available anymore.
- If only one target application is configured, this should not be a problem, since the user only needs to be authenticated at the very beginning (directly after the authentication).
- If the user's password is needed for several target application, then it is has to be available every time the user wants to access another application in the same session. In this case, the password should be saved in the session ticket (see Security Settings).
passwordEncryptionMethod
) Leave empty if the password is not encrypted (not recommended if the password is read from a context data field).
requiredRoles
) The user needs at least one of the roles in order to get access to the application.
If no roles are configured, all authenticated users may access the application.
The user's roles may be transformed before being compared to this list using the Role Transformation Rules (see separate property).
If the user doesn't have any of these roles, the "Step-Up Authenticators" (in Authentication Settings) are consulted in order to find out whether they can be obtained using a Step-Up.
airlockGatewayRoles
) The Airlock Gateway (WAF) roles that should be set when accessing this target application, instead of using the users roles as Gateway roles.
The name of the role can be followed by a colon and the idle timeout of the role in seconds, e.g. "myrole:300" sets the role "myrole" that will expire after 5 minutes of client inactivity.
With a second colon and a second number, the life-time can be set, e.g. "myrole:300:3600" will set the role "myrole" for a maximum of 1 hour, but it will also expire after 5 minutes of client inactivity.
Note: If you want to replace (instead of add) target application's Gateway roles in the session upon the first visit of each target application, you have to disable the "Add Credentials To Session" flag in the "Airlock Gateway (WAF) Settings" of the Login Application.
roleTransformationRules
) propagatedRolesToDelete
) propagatedRolesToKeep
) propagatedRolesTransformationRules
) propagatedRolesToAdd
)
type: com.airlock.iam.login.app.misc.configuration.oneshot.OneShotTargetApplicationConfig
id: OneShotTargetApplicationConfig-xxxxxx
displayName:
comment:
properties:
airlockGatewayRoles:
authenticator:
credentialExtractorFactory:
enableUserTrailLog: true
failureResponses:
identityPropagator:
passwordEncryptionMethod:
propagatedRolesToAdd:
propagatedRolesToDelete:
propagatedRolesToKeep:
propagatedRolesTransformationRules:
requiredRoles:
roleTransformationRules:
urlPattern:
useDifferentPassword:
useDifferentUsername:
usernameTransformation:
Target Applications and Authentication
defaultApplication
) applications
) maxFailedLogins
) temporaryLockingConfig
) This configuration can be enabled or disabled in each "Authentication Flow" with the setting "Enable Temporary Locking".
rememberMeConfig
) Configuration enabling the Remember-Me feature. This feature allows a user to skip certain authentication steps if a valid token is presented with the request.
loginHistoryRepository
) behaviorUponExistingSession
) Defines what action is taken when a user already has another authenticated Airlock Gateway session when logging in or logging out. For example, this can happen if the user left a previous session without an explicit logout or attempts to authenticate multiple concurrent sessions (with different devices or browsers).
Note:The configured behavior may depend on the user store being able to read (and write) the session ID to/from the database/directory. Verify that the corresponding column or attribute is mapped in the used user store ("Col Latest GSID" for default database plugins; "Last GSID Value Attribute" in LDAP plugins).
disableSessionBehaviorWhenRepresented
) locationInterpreters
) Enables the REST endpoint used for interpreting a forward location URI prior to starting an authentication flow (REST endpoint /<loginapp-uri>/rest/public/authentication/location/interpret/).
This endpoint could extract the display language or other information from the given URI so that the client can configure itself.
The order of the configured plugins is relevant. The first plugin which can handle the forward location URI is used, all remaining plugins are ignored. If no plugins are configured or no plugin can handle the provided URI, an empty interpretation result is returned.
authenticationInformationAccessibleCondition
) Condition for allowing unauthenticated access to the /public/authentication endpoint. Once a user is authenticated, access to this endpoint is always allowed, regardless of this setting.
By default, access to the information endpoint is not allowed for unauthenticated users.
Security Note: If publicly available, this endpoint could be exploited for user enumeration attacks. To prevent these attacks, it is recommended that access to the endpoint is restricted to authenticated users only.
type: com.airlock.iam.login.application.configuration.authentication.TargetApplicationsConfig
id: TargetApplicationsConfig-xxxxxx
displayName:
comment:
properties:
applications:
authenticationInformationAccessibleCondition:
behaviorUponExistingSession:
defaultApplication:
disableSessionBehaviorWhenRepresented: true
locationInterpreters:
loginHistoryRepository:
maxFailedLogins: 5
rememberMeConfig:
temporaryLockingConfig:
Target URI ID Propagator
targetURIResolver
) condition
) propagation
)
type: com.airlock.iam.login.application.configuration.location.propagate.TargetURIIdentityPropagatorConfig
id: TargetURIIdentityPropagatorConfig-xxxxxx
displayName:
comment:
properties:
condition:
propagation:
targetURIResolver:
Target URI Resolver
If the original forward location matches any of the allowed URI patterns, the forward location is passed to the chain of URI transformers, where it gets transformed to the target URI to be used for identity propagation. If none of the allowed URI pattern matches the forward location, the default value is instead passed to the transformation chain. If any of the URI transformers vetoes the transformation, the default value is provided as target URI.
This is typically used to allow or block certain deep links into target applications and to add information to the URI like a language parameter.
defaultValue
) allowedURIs
) If the authentication flow was started using such a location, its value is matched against the specified list of allowed location parameter patterns. If at least one matches, the location parameter is accepted. If not, it is not accepted and the "Default Value" is used instead.
- If left empty, any provided location is ignored and the default value is always used.
- To only allow context relative locations (starting with a slash), the pattern "/(?!/).*" should be used. The pattern "/.*" is not sufficient as it allows URLs starting with "//" which can be used to specify an absolute URL including a domain. See also CVE-2013-2764.
- Note that forward locations provided by Airlock Gateway (WAF) always contain the full URL including protocol and hostname. It is therefore usually necessary to add a pattern for the application specific URLs, e.g. "https?://example\.com/my-path/.*".
- Note that URLs with any 'User Information' part in front of the host name (for example "https://user@domain.com/") are never accepted.
- Security warning: The provided forward location may contain arbitrary user input! It is therefore highly recommended that the configured patterns be as restrictive as possible. Overly lax patterns like '.*' expose Airlock IAM and the target application to severe attacks, e.g.: open redirect, server-side request forgery and injection attacks (SQL, XSS, etc ...). Such patterns are therefore not allowed.
- Security warning: Unescaped dots in URLs match any single character in RegExes. If unescaped dots are used by mistake, this can be exploited for attacks! E.g.: If pattern "https://subdomain.example.com/.*" is configured, attackers can register "subdomain-example.com" which will be allowed by this pattern.
uriTransformers
)
type: com.airlock.iam.login.application.configuration.location.propagate.TargetURIResolverConfig
id: TargetURIResolverConfig-xxxxxx
displayName:
comment:
properties:
allowedURIs:
defaultValue:
uriTransformers:
Task Schedule
task
) interval
) firstTime
) name
)
type: com.airlock.iam.servicecontainer.app.application.configuration.TaskSchedule
id: TaskSchedule-xxxxxx
displayName:
comment:
properties:
firstTime:
interval:
name:
task:
Task Scheduler Service
tasks
) checkIntervalMillis
) runTasksConcurrently
) If enabled, all tasks may run concurrently. If disabled, all tasks run sequentially.
This configuration applies to all tasks of this scheduler.
type: com.airlock.iam.servicecontainer.app.application.configuration.TaskSchedulerService
id: TaskSchedulerService-xxxxxx
displayName:
comment:
properties:
checkIntervalMillis: 5000
runTasksConcurrently: true
tasks:
Technical Client Database Repository
sqlDataSource
) storageEncryptionConfig
) logQueries
) tenantId
) If no value is configured, then 'no_tenant' is used as value on the database.
cipher
) Cipher to encrypt and decrypt sensitive values in the database.
This setting is deprecated and has been replaced by Storage Encryption. If set, this property was configured by an automatic configuration migration and should not be changed manually. The property takes precedence over Storage Encryption, which means that OAuth 2.0 client secrets will be encrypted / decrypted using this cipher for backward compatibility. Other secrets on the DB are not affected by this property.
To migrate from Cipher to Storage Encryption, encrypted data on the DB must be changed manually. Please contact Airlock Support for further guidelines.
type: com.airlock.iam.techclient.application.configuration.TechClientRepositoryConfig
id: TechClientRepositoryConfig-xxxxxx
displayName:
comment:
properties:
cipher:
logQueries: false
sqlDataSource:
storageEncryptionConfig:
tenantId:
Technical Client Registration Flow
steps
) processors
)
type: com.airlock.iam.techclientreg.application.configuration.TechClientRegFlowConfig
id: TechClientRegFlowConfig-xxxxxx
displayName:
comment:
properties:
processors:
steps:
Technical Client Registration Settings
defaultFlow
)
type: com.airlock.iam.techclientreg.application.configuration.TechClientRegistrationRestConfig
id: TechClientRegistrationRestConfig-xxxxxx
displayName:
comment:
properties:
defaultFlow:
Technical Clients Settings
repository
) interceptors
)
type: com.airlock.iam.admin.application.configuration.techclients.TechClientsConfig
id: TechClientsConfig-xxxxxx
displayName:
comment:
properties:
interceptors:
repository:
Template-based String Provider
valueMapProviders
) valueEncoders
) Encode the values before they are inserted into the template. The encoders are applied in the configured order.
For a more flexible setup, use the plugins Transforming Value Map Provider and Transforming String Value Provider together with encoders.
template
) Template from which the provided string is created. Placeholders (${value-selector}
) are replaced by the corresponding value selected from the "Value Providers". The templating mechanism also allows for date formatting, e.g. ${my-date,date,yyyy-MM-dd}
.
Security warning: If you use this plugin to build a technical document (JSON, XML, etc.), make sure the value encoders contain a matching encoder in the last position to prevent it from breaking out of the defined structures.
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.TemplateStringValueProviderConfig
id: TemplateStringValueProviderConfig-xxxxxx
displayName:
comment:
properties:
template:
valueEncoders:
valueMapProviders:
Template-based Username Transformer
template
) Template from which the username is transformed. Placeholders (${value-selector}
) are replaced by the corresponding value selected from the "Value Providers". Additionally the input username (current username in the transformation chain) is always provided as a value and can be referenced by ${input-username}
.
Note: Placeholders that cannot be resolved, will be replaced with an empty value and the transformation chain will continue. Depending on the template and the usernames in the user data source, this might lead to an unintended identification of a user.
valueProviders
) These plugins provide the map of all values that are available as variables in the template.
Note: Providers providing values that are dependent on the user identity can't provide any values when the username transformation is evaluated. Thus only a few providers (e.g. additional attributes) can provide values at username transformation time.
valueEncoders
)
type: com.airlock.iam.flow.shared.application.configuration.user.TemplateBasedUsernameTransformerConfig
id: TemplateBasedUsernameTransformerConfig-xxxxxx
displayName:
comment:
properties:
template:
valueEncoders:
valueProviders:
Temporary Locking
Lock out users temporarily after unsuccessful authentication attempts, typically for increasingly longer durations until successful authentication is achieved.
Note that Temporary Locking is only applied in authentication flows where the "Temporary Locking Processor" is configured.
temporaryLockingStrategyConfig
) Note: Changing these settings may affect the duration of currently active temporary locks.
type: com.airlock.iam.common.application.configuration.templock.TemporaryLockingConfig
id: TemporaryLockingConfig-xxxxxx
displayName:
comment:
properties:
temporaryLockingStrategyConfig:
Temporary Locking Processor
type: com.airlock.iam.authentication.application.configuration.processor.TemporaryLockingProcessorConfig
id: TemporaryLockingProcessorConfig-xxxxxx
displayName:
comment:
properties:
Temporary Locking Settings
baseDurationInMs
) exponentialLockoutFactor
) (Base Duration) * (Exponential Factor)^(n-1) + (Additional Duration)*(n-1)
Example: If the exponential factor is 2.0, then the delay is doubled with every failed login. Note that this property can be combined with property Additional Duration.linearLockoutFactor
) (Base Duration) * (Exponential Factor)^(n-1) + (Additional Duration)*(n-1) – Notice that the first part is always >=(Base Duration)
Note that this property can be combined with property Exponential Factor.lockoutMessageThreshold
) delayBetweenLoginSteps
) Delays responses to the client when asking for another authentication step (e.g. OTP after entering username and password) for the specified number of milliseconds.
Enhances security because it makes it impossible for an attacker to tell whether the first factor was wrong or correct based on timing.
Choose a value larger than the slowest expected response from the system checking the first factor.
type: com.airlock.iam.core.misc.authen.locking.TemporaryLockingSettings
id: TemporaryLockingSettings-xxxxxx
displayName:
comment:
properties:
baseDurationInMs: 3000
delayBetweenLoginSteps: 500
exponentialLockoutFactor: 1.0
linearLockoutFactor: 0
lockoutMessageThreshold: 0
Terms Of Service Config
Configures the terms of services (legal disclaimer) that has to be accepted by the user during self-registration or when accessing an application.
When accessing a target application, the Loginapp checks whether the currently valid terms of services have been accepted by the user. The currently valid terms of services are referenced by the "TOS-tag" defined in this configuration. The accepted terms of services is stored in a user property (within context data container).
In order to perform the check, the login application must be configured such that it is involved every time an application is accessed for the first time within a session. Usually, this means that only the credentials/roles needed for the currently accessed application are granted to the Airlock Gateway (WAF) session.
tag
) An arbitrary string uniquely defining the currently valid legal disclaimer used for this application. The tag may be shared among several applications or with the self-registration process. Once the user accepts the disclaimer, this tag is saved with the user data (see next properties). If the user data has no or a different tag saved, the user is prompted to accept the current disclaimer.
The tag may not contain commas (",") or the timestamp separator (in case the timestamp pattern is specified).
storageStrategy
) - Shared property (comma-separated) : The context data property (see below) is shared among several applications. The accepted tags are stored in a comma-separated value list.
- Private property : The context data property (see below) is used only by this application.
- Shared property (multi-value) : The context data property (see below) is shared among several applications. The accepted tags are stored in a multi-value attribute.
timestampFormat
) For example resulting in:
TOS-2013:20130828134559+0100
timestampSeparator
) Notice that if storing them using Shared property (comma-separated), the comma cannot be used.
userPropertyName
) Make sure that the used persister is configured to read/write the property!
disclaimerTexts
) Defines a language-dependent, formatted disclaimer text displayed to the user.
If the user accessing an application and the terms of services have to be accepted, the whole terms / legal disclaimer can be displayed on the page.
If the user has to accept the terms of services during the self-registration, it makes sense to show only a link to the terms / legal disclaimer (it's only a checkbox label).
type: com.airlock.iam.common.application.configuration.termsofservice.TermsOfServiceConfig
id: TermsOfServiceConfig-xxxxxx
displayName:
comment:
properties:
disclaimerTexts:
storageStrategy: Shared property (comma-separated)
tag:
timestampFormat:
timestampSeparator: :
userPropertyName:
Terms Of Services Step
termsOfServices
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.termsofservice.TermsOfServiceStepConfig
id: TermsOfServiceStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
termsOfServices:
Test Task
Task counting from 1 to 100 in about 30 seconds. The task logs the counter to the log file on error level.
sleepMillis
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.TestTask
id: TestTask-xxxxxx
displayName:
comment:
properties:
sleepMillis: 300
Text File Password Renderer
${password}
${DateString}
${any context data key}
Example:
text-file-password-renderer.template = ${userid};${password};${firstname};${lastname}
template
) ${password}
- the new plaintext password${DateString}
- the current date dd.MM.yyyy formatted${context data key}
- any context data field as configured in the user persisterencoding
)
type: com.airlock.iam.core.misc.util.password.generator.TextFilePasswordRenderer
id: TextFilePasswordRenderer-xxxxxx
displayName:
comment:
properties:
encoding: UTF-8
template:
Text File Renderer
defaultTemplate
) The file has to be a simple text file in UTF-8 encoding.
The file name is either absolute or relative to the JVMs current directory.
Multiple templates for different languages can be specified with the property template. A default template has always to be specified.
template
) Selectors must be choosen according to the ISO-2-letter language codes, i.e. "fr" for french.
See also description of default-template.
type: com.airlock.iam.core.misc.renderer.TextFileRenderer
id: TextFileRenderer-xxxxxx
displayName:
comment:
properties:
defaultTemplate:
template:
Text File Token List Renderer
lineBreakStyle
) separationLines
) topMargin
) leftMargin
) headerSeparationLines
) spacesBetweenTokens
) tokensPerLine
) listMode
) - Standard: Token list without indices.
- Indexed: Token list with indices.
- Matrix: Token Matrix.
type: com.airlock.iam.core.misc.impl.renderer.TextFileTokenListRenderer
id: TextFileTokenListRenderer-xxxxxx
displayName:
comment:
properties:
headerSeparationLines: 3
leftMargin: 2
lineBreakStyle: UNIX-STYLE
listMode: STANDARD
separationLines: 1
spacesBetweenTokens: 2
tokensPerLine: 10
topMargin: 2
Text Message Token Controller Element
message
) type
) Paragraph
: text is displayed without any style.Header
: bold text with margins around to separate it from other elements.Info
: text in a blue box.Warning
: text in a yellow box.Error
: text in a red box.
type: com.airlock.iam.admin.application.configuration.generic.ui.TextMessageTokenControllerUiElementConfig
id: TextMessageTokenControllerUiElementConfig-xxxxxx
displayName:
comment:
properties:
message:
type: PARAGRAPH
Text Report Renderer
type: com.airlock.iam.core.misc.util.report.TextReportRenderer
id: TextReportRenderer-xxxxxx
displayName:
comment:
properties:
Text UI Element
text
) htmlId
)
type: com.airlock.iam.flow.ui.application.configuration.configurable.ConfigurableTextConfig
id: ConfigurableTextConfig-xxxxxx
displayName:
comment:
properties:
htmlId:
text:
Ticket Key Value
ticketKey
) valueSelector
) omitIfEmpty
)
type: com.airlock.iam.login.application.configuration.targetapp.TicketKeyValue
id: TicketKeyValue-xxxxxx
displayName:
comment:
properties:
omitIfEmpty: false
ticketKey:
valueSelector:
Ticket String Provider Config
valueProviders
) keyValues
) List of key-value pairs that are included in the ticket. Each of them selects a value provided by the "Value Providers" and includes it in the ticket under a specified key.
Example: the Value Providers provide an entry with key "user-id" and value "tester". A key-value pair configuration with ticket key "username" and value selector "user-id" results in a ticket entry with key "username" and value "tester".
validitySeconds
) urlEncodingScheme
) ticketEncoder
) The ticket encoder plugin used to encode the ticket to a string.
Some ticket encoders do not support ticket expiry, i.e. they do not encode the ticket validity into the ticket.
type: com.airlock.iam.login.application.configuration.targetapp.TicketStringProviderConfig
id: TicketStringProviderConfig-xxxxxx
displayName:
comment:
properties:
keyValues:
ticketEncoder:
urlEncodingScheme: UTF-8
validitySeconds: 600
valueProviders:
To Query Parameter URI Transformer
baseURI
) parameterName
)
type: com.airlock.iam.login.application.configuration.location.transform.LocationAsQueryParameterToBaseURIAppenderConfig
id: LocationAsQueryParameterToBaseURIAppenderConfig-xxxxxx
displayName:
comment:
properties:
baseURI:
parameterName:
Token Activation On Delivery Strategy
tokenDataProvider
) trackingService
) emailService
) userPersister
) contextDataRecipientField
) mailSubject
) mailBody
) $SERIALID$
", which will be replaced by the serial ID of the activated token.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.token.TokenActivationOnDeliveryStrategyConfig
id: TokenActivationOnDeliveryStrategyConfig-xxxxxx
displayName:
comment:
properties:
contextDataRecipientField:
emailService:
mailBody:
mailSubject:
tokenDataProvider:
trackingService:
userPersister:
Token Authenticator
This authenticator loads and initializes the specified token verifier plug-in and presents its functionality as an Authenticator.
There are two modes of operation:
- Stand-alone: In this mode, the authenticator can be used itself to authenticate users against a token verifier (e.g. an RSA/ACE server).
It expects the first credential type to be aUserTokenCredential and passes the username and the token value to the token verifier.
Note:This mode of operation is automatically selected when the type of credential passed in the first step of authentication isUserTokenCredential and does not contain a token. - Authentication-step: In this mode, the authenticator is used in conjunction with the
MetaAuthenticator
as second (or following) step in the authentication process. It thus expects a credential of typeUserCredential
when called first.
Note:This mode of operation is automatically selected when the type of credential passed in the first step of authentication isUserCredential
An authentication session is always required by this authenticator.
A credential persister plugin can be used (optionally) to translate the username presented to this plugin to an "internal" ACE-user. The username in the authentee object returned after successful authentication is always the one presented to this plugin and not the one on the ACE-Server.
In the case of successful authentication, the returned authentee consists of the username only.
The plugin writes the canonical class name description of this plugin to the context data container. The class name is stored under the key authPluginClassName
. A short description of this authentication method is stored under the key authMethodShortDesc
. This information may be used by callers.
tokenVerifier
) credentialPersister
) A credential bean is fetched with the username used with this plugin and the credential-data (string or binary) of the credential bean is used as ACE-user.
This property can be used if a mapping between the actual username and the ACE-username is used.
pin
) The PIN can be defined as a static value or its value may be retrieved from a context-value field of a persisted credential. Latter case requires that a credential persister is configured. Prepend the value with the @-character to use it as a reference to a context-data field.
usePasswordAsPin
) usePasswordAsToken
)
type: com.airlock.iam.core.misc.impl.authen.TokenAuthenticator
id: TokenAuthenticator-xxxxxx
displayName:
comment:
properties:
credentialPersister:
pin:
tokenVerifier:
usePasswordAsPin: false
usePasswordAsToken: false
Token Consistency User Change Listener
- on user deletion: delete or unassign all tokens assigned to that user.
- on user name change: change the token assignments to the new user name.
tokenDataProvider
) tokenServices
)
type: com.airlock.iam.core.misc.impl.persistency.usereventbus.TokenConsistencyUserChangeListener
id: TokenConsistencyUserChangeListener-xxxxxx
displayName:
comment:
properties:
tokenDataProvider:
tokenServices:
Token Data Certificate Matcher
tokenDataProvider
) multiFormatDnComparison
) - a=A,b=B,c=C
- c=C,b=B,a=A (backwards)
- /a=A/b=B/c=C (slash notation)
- /c=C/b=B/a=A (slash notation backwards)
- a=A,b=B,x.y.z=C (where x.y.z is the OID for attribute c)
type: com.airlock.iam.core.misc.impl.authen.certificate.DefaultCertificateMatcher
id: DefaultCertificateMatcher-xxxxxx
displayName:
comment:
properties:
multiFormatDnComparison: false
tokenDataProvider:
Token Data mTAN Handler
tokenDataProvider
) hashFunction
) activationKeyGenerator
) maxTokenCount
) userStore
)
type: com.airlock.iam.core.misc.impl.authen.mtan.TokenDataMtanHandler
id: TokenDataMtanHandler-xxxxxx
displayName:
comment:
properties:
activationKeyGenerator:
hashFunction:
maxTokenCount:
tokenDataProvider:
userStore:
Token Data mTAN Handler for IAK Order
tokenDataProvider
) maxNumberCount
)
type: com.airlock.iam.core.misc.impl.authen.mtan.TokenDataMtanHandlerForIakOrder
id: TokenDataMtanHandlerForIakOrder-xxxxxx
displayName:
comment:
properties:
maxNumberCount:
tokenDataProvider:
Token Data Username Transformer
tokenDataProvider
) tokenType
) dataField
) stopAfterSuccessfulTransformation
)
type: com.airlock.iam.core.misc.impl.authen.TokenDataUsernameTransformer
id: TokenDataUsernameTransformer-xxxxxx
displayName:
comment:
properties:
dataField:
stopAfterSuccessfulTransformation: false
tokenDataProvider:
tokenType:
Token Endpoint Auth Method Processor
allowedValues
) mandatory
)
type: com.airlock.iam.techclientreg.application.configuration.registration.TokenEndpointAuthMethodProcessorConfig
id: TokenEndpointAuthMethodProcessorConfig-xxxxxx
displayName:
comment:
properties:
allowedValues: [none, client_secret_post, client_secret_basic]
mandatory: false
Token IAK Handler
tokenDataProvider
) passwordHash
) NOTE: Some password hashes, such as SHA 256 Password Hash or Scrypt Password Hash, produce binary output. If one of these is used, make sure the persistence layer supports binary data in the hash field and the corresponding persistence plugins (e.g. Database User Store or Ldap Connector) are configured to treat hash values as binary values.
In case the persistence layer expects a string, encode the password hash by wrapping it with an encoder. To achieve this, use the Password Hash Configuration plugin and specify the hash function (such as Scrypt Password Hash) together with the desired encoder. We recommend using the Base64 Password Hash Encoder.
codeGenerator
) validityTime
) allowedFailedAttempts
) The number of times the user is allowed to enter a wrong activation code.
A value of 0 (zero) means the user has no retries (thus only one attempt).
type: com.airlock.iam.core.misc.impl.authen.TokenIakHandler
id: TokenIakHandler-xxxxxx
displayName:
comment:
properties:
allowedFailedAttempts:
codeGenerator:
passwordHash:
tokenDataProvider:
validityTime:
Token Task
strategy
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.token.TokenTaskConfig
id: TokenTaskConfig-xxxxxx
displayName:
comment:
properties:
strategy:
Token-based Attribute Mapping
All token attributes must be considered optional.
This plugin is designed to work only with the token-based repository that is shipped with IAM. For custom repository implementations, custom attribute mappings are needed.
serialId
) enabled
) activationDate
) validFrom
) validTo
) generationDate
) firstUsageDate
) latestUsageDate
) totalUsages
) trackingId
) otherAssignees
) data
) genericDataElement1
) genericDataElement2
) genericDataElement3
) genericDataElement4
) genericDataElement5
) genericDataElement6
) genericDataElement7
) genericDataElement8
) genericDataElement9
) genericDataElement10
) genericDataElement11
) genericDataElement12
)
type: com.airlock.iam.admin.application.configuration.generic.TokenBasedAttributeMapping
id: TokenBasedAttributeMapping-xxxxxx
displayName:
comment:
properties:
activationDate:
data:
enabled:
firstUsageDate:
generationDate:
genericDataElement1:
genericDataElement10:
genericDataElement11:
genericDataElement12:
genericDataElement2:
genericDataElement3:
genericDataElement4:
genericDataElement5:
genericDataElement6:
genericDataElement7:
genericDataElement8:
genericDataElement9:
latestUsageDate:
otherAssignees:
serialId:
totalUsages:
trackingId:
validFrom:
validTo:
Token-based Generic Token Repository
tokenDataProvider
) maxTokens
) attributeMapping
)
type: com.airlock.iam.admin.application.configuration.generic.TokenBasedGenericTokenRepositoryConfig
id: TokenBasedGenericTokenRepositoryConfig-xxxxxx
displayName:
comment:
properties:
attributeMapping:
maxTokens: 1
tokenDataProvider:
Tokens Configuration
tokenManagers
)
type: com.airlock.iam.admin.application.configuration.tokens.TokensConfiguration
id: TokensConfiguration-xxxxxx
displayName:
comment:
properties:
tokenManagers:
Too Many Unlocks Restriction
enableFeedback
) If enabled, the User Identification Step always returns a specific error code in case this restriction is violated.
If no restrictions are configured to provide feedback, a flow can also be started for users violating one or more restrictions and the flow will advance to the user identity verification step in stealth mode. In this mode, the initial behavior of the step is the same as for unrestricted users (e.g. an mTAN OTP is required), but all responses are rejected as if they were incorrect. This behavior prevents restricted users from ever proceeding further in the flow and thus offers protection against user enumeration. Please refer to the documentation for more details.
Irrespective of this settings, once the identity verification step is passed, restriction are always checked before and after each method call and violations are always reported.
Security notice: Enabling this feature might allow a client to determine whether certain users exist in the system.
type: com.airlock.iam.publicselfservice.application.configuration.restrictions.TooManyUnlocksRestrictionConfig
id: TooManyUnlocksRestrictionConfig-xxxxxx
displayName:
comment:
properties:
enableFeedback: false
Transaction Approval
flows
) userStore
) maxFailedTransactionApprovals
) gatewaySettings
) If no settings are configured, extra information from the reverse proxy will not be available and it may be harder to correlate log messages that are written to different log files.
requestAuthentication
) csrfProtection
) If enabled, REST endpoints are protected against CSRF attacks.
With this protection, the REST API only accepts requests that contain the custom header X-Same-Domain with an arbitrary non-empty value. In cross-origin resource sharing (CORS), such requests are not considered simple requests and thus must always be preceded by a preflight request, which prevents cross-site request forgery (CSRF) attacks.
Security warning: Disabling this feature may allow CSRF attacks. Only do so if the REST client is unable to comply with the aforementioned restrictions.
fixedResponseDuration
) The endpoint that checks a password against the configured policy is excluded from response delays.
corsSettings
) stateRepository
) languageSettings
) sessionIdleTimeout
) sessionLifetime
) contextExtractor
) customExtensions
) readinessHealthCheckEndpoint
) logUserTrailToDatabase
) Configures the database settings to use when persisting user trail log entries.
If this value is defined, then all user trail log messages generated by the Transaction Approval App module will additionally be forwarded to the database configured within the referenced repository plugin.
All forwarded log entries are stored inside the table "USER_TRAIL_LOG". Note that setting this value does not disable writing log messages to the Transaction Approval App log file.
correlationIdSettings
) Defines settings for correlation ID transfer and logging inside the Transaction Approval module.
If undefined, no correlation ID will be logged for this module.
deviceUsageRepositoryConfig
)
type: com.airlock.iam.transactionapproval.application.configuration.TransactionApprovalApp
id: TransactionApprovalApp-xxxxxx
displayName:
comment:
properties:
contextExtractor:
correlationIdSettings:
corsSettings:
csrfProtection: true
customExtensions:
deviceUsageRepositoryConfig:
fixedResponseDuration: 2000
flows:
gatewaySettings:
languageSettings:
logUserTrailToDatabase:
maxFailedTransactionApprovals: 5
readinessHealthCheckEndpoint:
requestAuthentication:
sessionIdleTimeout: 30m
sessionLifetime: 8h
stateRepository:
userStore:
Transaction Approval Cronto Message Provider
messageTranslationKey
) pushTitleResourceKey
) pushSubjectResourceKey
) crontoHandler
) amountLabelKey
) amountParameterName
) currencyParameterName
) stringResourcesFile
) strings
, the language dependent files must be strings_de.properties
, strings_en.properties
and so on and the default file must be strings.properties
.
The following keys are defined as templates for the cronto messages:
- cronto.message: the message template.
- cronto.amountLabel: the amount label of the transaction.
type: com.airlock.iam.transactionapproval.application.configuration.cronto.CrontoMessageProviderImplConfig
id: CrontoMessageProviderImplConfig-xxxxxx
displayName:
comment:
properties:
amountLabelKey: cronto.amountLabel
amountParameterName:
crontoHandler:
currencyParameterName:
messageTranslationKey:
pushSubjectResourceKey: cronto.push.transaction-signing.subject
pushTitleResourceKey: cronto.push.transaction-signing.title
stringResourcesFile: strings
Transaction Approval Flow
flowId
) steps
) processors
) usernameTransformers
) The transformation of a username takes place in the first step before the user is loaded. Note that username transformers have no effect on the propagated username value. Transformers can be chained, i.e. a first transformer could normalize the original name, where the next transformer looks up the normalized name in a database for potential transformation matches.
In contrary to the above description of chaining, a transformer can also signal that it already found the final user ID and the chain must stop after it.
For further details please refer to the documentation of the username transformer plugins.
type: com.airlock.iam.transactionapproval.application.configuration.flow.TransactionApprovalFlowConfig
id: TransactionApprovalFlowConfig-xxxxxx
displayName:
comment:
properties:
flowId:
processors:
steps:
usernameTransformers:
Transaction Approval Parameter Step
messageParameters
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.transactionapproval.application.configuration.parameter.TransactionApprovalParameterStepConfig
id: TransactionApprovalParameterStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
messageParameters:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Transaction Approval Parameters Map
type: com.airlock.iam.transactionapproval.application.configuration.parameter.TransactionApprovalParametersValueMapProviderConfig
id: TransactionApprovalParametersValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
Transform Roles
pattern
) replacement
)
type: com.airlock.iam.common.application.configuration.role.TransformRoleTransformationConfig
id: TransformRoleTransformationConfig-xxxxxx
displayName:
comment:
properties:
pattern:
replacement:
Transforming Role Provider
roleProviders
) roleTransformations
)
type: com.airlock.iam.login.application.configuration.targetapp.TransformingRoleProviderConfig
id: TransformingRoleProviderConfig-xxxxxx
displayName:
comment:
properties:
roleProviders:
roleTransformations:
Transforming String Value Provider
valueProvider
) transformations
)
type: com.airlock.iam.common.application.configuration.valueprovider.TransformingStringValueProviderConfig
id: TransformingStringValueProviderConfig-xxxxxx
displayName:
comment:
properties:
transformations:
valueProvider:
Transforming Value Map Provider
valueProviders
) transformations
) keySuffix
) transformNonStringValues
) Automatically convert non-string value providers (such as dates) to strings before applying the transformations.
If this option is disabled, non-string values are provided unchanged.
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.TransformingValueMapProviderConfig
id: TransformingValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
keySuffix:
transformNonStringValues: false
transformations:
valueProviders:
Translated String Provider
resourceKey
) Resource key for which the localized strings are defined. The key may contain variables, which are replaced with the provided values before the translation is loaded, e.g. to specify gender-dependent texts, such as salutations.
The translated string can also contain variables (e.g. ${givenname}) and supports the same formatting options (including date/time formatting) as are available for Transaction Approval messages.
valueProviders
) languageProvider
)
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.TranslationValueProviderConfig
id: TranslationValueProviderConfig-xxxxxx
displayName:
comment:
properties:
languageProvider:
resourceKey:
valueProviders:
True Senses SMS Gateway
This plugin uses the HTTP(S) interface of TrueSenses to send SMS messages.
accountUsername
) accountPassword
) serviceUri
) See note in plug-in description when using SSL (HTTPS instead of HTTP).
proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
connectTimeout
) Therefore, a connection may take a maximum of twice this time until it is aborted.
correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
visiblePhoneNumberDigitsInLog
) Defines the number of phone number digits visible in log statements.
Thus, if the value is zero, all digits are masked, if it is large enough, all digits are visible. If set to 3, for example, the logged number looks like ********965.
The default is 100, i.e. showing all digits.
type: com.airlock.iam.core.misc.impl.sms.TrueSensesSmsGateway
id: TrueSensesSmsGateway-xxxxxx
displayName:
comment:
properties:
accountPassword:
accountUsername:
allowOnlyTrustedCerts: true
connectTimeout: 10
correlationIdHeaderName:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
serviceUri:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
verifyServerHostname: true
visiblePhoneNumberDigitsInLog: 100
Typical Geolocation Risk Extractor
- This risk extractor depends on the user identity. Make sure to place the corresponding Risk Assessment Step after the user-identifying step (e.g. the Password Authentication Step) in the authentication flow.
- This plugin requires that a Login History Repository is configured in the Authentication Flows configuration.
- This plugin requires a geolocation provider to be configured in Loginapp's REST settings.
geolocationAttributeToMatch
) The geolocation attribute to compare with those from previous logins.
- Continent: Uses the continent for comparison
- Country: Uses the country for comparison
minimalRequiredHistoryEntries
) The minimal number of previously recorded logins required. If the user's entire login history contains fewer entries, this extractor always returns the "Tags When Below Percentage Tage Of Matches".
The optimum value depends on the exact use-case:
- A low value like 1 or 2 may be preferred in low-risk environments or in new setups with fresh users where the first login is often the most trusted one because it might have involved an IAK or alike.
- A medium value like 5 may be preferred when a longer, consistent history is required; thus the user must perform strong logins for an extended period of time before he may be granted a relaxation of authentication.
maximalConsideredHistoryEntries
) The optimum value depends on the exact use-case and on the setting of the "Percentage Of Matches":
- A low value like 1 or 2 may be preferred in low-risk environments where changes in the user's context are frequent.
- A medium value like 5 may be preferred when a longer, consistent history is the typical use case for users.
percentageOfMatches
) The optimum value depends on the exact use-case and on the setting of the "Maximal Considered History Entries":
- A low value like 25 or 30 may be preferred in low-risk environments where users often work in different locations and access the system with more than two devices. In such a scenario the "Maximal Considered History Entries" may be increased to a high value.
- A medium value like 40 or 45 may be preferred where users often work in two locations and access the system with two different devices (e.g. office location, home office). In such a scenario the "Maximal Considered History Entries" may be increased to a medium to high value.
- A high value like 80 or 90 may be preferred where users always use the same device and rarely change their context. In such a scenario the "Maximal Considered History Entries" may be set to a low to medium value so that an exception in the history will be recovered quickly.
tagsWhenAboveOrEqualPercentageOfMatches
) tagsWhenBelowPercentageOfMatches
)
type: com.airlock.iam.authentication.application.configuration.risk.extractor.geolocation.TypicalGeolocationRiskExtractorFlowConfig
id: TypicalGeolocationRiskExtractorFlowConfig-xxxxxx
displayName:
comment:
properties:
geolocationAttributeToMatch: COUNTRY
maximalConsideredHistoryEntries: 6
minimalRequiredHistoryEntries: 3
percentageOfMatches: 80
tagsWhenAboveOrEqualPercentageOfMatches:
tagsWhenBelowPercentageOfMatches:
Typical User Agent Risk Extractor
This plugin requires that a Login History Repository is configured in the Authentication Flows configuration.
minimalRequiredHistoryEntries
) The minimal number of previously recorded logins required. If the user's entire login history contains fewer entries, this extractor always returns the "Tags When Below Percentage Tage Of Matches".
The optimum value depends on the exact use-case:
- A low value like 1 or 2 may be preferred in low-risk environments or in new setups with fresh users where the first login is often the most trusted one because it might have involved an IAK or alike.
- A medium value like 5 may be preferred when a longer, consistent history is required; thus the user must perform strong logins for an extended period of time before he may be granted a relaxation of authentication.
maximalConsideredHistoryEntries
) The optimum value depends on the exact use-case and on the setting of the "Percentage Of Matches":
- A low value like 1 or 2 may be preferred in low-risk environments where changes in the user's context are frequent.
- A medium value like 5 may be preferred when a longer, consistent history is the typical use case for users.
percentageOfMatches
) The optimum value depends on the exact use-case and on the setting of the "Maximal Considered History Entries":
- A low value like 25 or 30 may be preferred in low-risk environments where users often work in different locations and access the system with more than two devices. In such a scenario the "Maximal Considered History Entries" may be increased to a high value.
- A medium value like 40 or 45 may be preferred where users often work in two locations and access the system with two different devices (e.g. office location, home office). In such a scenario the "Maximal Considered History Entries" may be increased to a medium to high value.
- A high value like 80 or 90 may be preferred where users always use the same device and rarely change their context. In such a scenario the "Maximal Considered History Entries" may be set to a low to medium value so that an exception in the history will be recovered quickly.
tagsWhenAboveOrEqualPercentageOfMatches
) tagsWhenBelowPercentageOfMatches
)
type: com.airlock.iam.authentication.application.configuration.risk.extractor.browser.TypicalUserAgentRiskExtractorFlowConfig
id: TypicalUserAgentRiskExtractorFlowConfig-xxxxxx
displayName:
comment:
properties:
maximalConsideredHistoryEntries: 6
minimalRequiredHistoryEntries: 3
percentageOfMatches: 80
tagsWhenAboveOrEqualPercentageOfMatches:
tagsWhenBelowPercentageOfMatches:
UCP SMS Gateway
Documentation can e.g. be found at"http://www.swisscom.ch/solutions/Loesungen-Produkte/Mobile-Mehrwertdienste/". This gateway uses a binary interface and is used for sites with heavy traffic Unlike other gateways that call a URL to 'fire and forget' the message, UCP opens a socket which is kept alive for both alerts/notifications and to send/receive messages.
Important: This is not a 'fire and forget' implementation, but keeps a TCP connection open at all times. Since these connections are limited by the provider, it is important to not instantiate one such plugin per 'mandant', but once for several 'mandants'. The recommended approach for a multi-mandant environment is therefore to have one separate Airlock IAM instance, use the WebService plugin for that and let all 'mandants' use the {@link WebServiceSmsGateway} as their SMS gateway, connecting to this one Airlock IAM instance.
Summarized important constraints Due to the multi-threaded implementation of the plugin, there are several constraints that must be met in order for the plugin to run correctly:
- The Web Server must be a Tomcat.
- The total number of sessions allowed by Swisscom (typically 5) must not be exceeded. Every UcpSmsGateway plugin instance makes use of a configurable amount of sessions (1 per default).
- To be sure that all threads are killed, restart the server instance where this Web Service WAR file is deployed after updating the Airlock IAM instance.
numberOfSessions
) serverIp
) serverPort
) accountUsername
) accountPassword
) accountShortId
) connectionSleepBeforeRetry
) connectionTimeout
) connectionKeepAliveInterval
) messageConfirmationTimeout
) longSmsOptionEnabled
) useInternationalOriginatorFormat
) validityPeriod
) ucpTimezoneIdentifier
) Specifying a time zone identifier (such as 'Europe/Zurich') instead of an absolute time zone (such as 'GMT+01') has the advantage of automatic adjustment for DST (daylight saving time) where applicable.
type: com.airlock.iam.core.misc.impl.sms.ucp.UcpSmsGateway
id: UcpSmsGateway-xxxxxx
displayName:
comment:
properties:
accountPassword:
accountShortId:
accountUsername:
connectionKeepAliveInterval: 300
connectionSleepBeforeRetry: 5000
connectionTimeout: 15000
longSmsOptionEnabled: false
messageConfirmationTimeout: 60
numberOfSessions: 1
serverIp:
serverPort:
ucpTimezoneIdentifier: Europe/Zurich
useInternationalOriginatorFormat: false
validityPeriod:
UI Settings
authenticationUi
) userSelfRegUi
) publicSelfServiceUi
) selfServiceUi
) loginRestUiContentSecurityPolicy
) Content Security Policy (CSP) for the Loginapp UI.
The Airlock Gateway (WAF) "CSRF Tokens" feature does not support CSP nonces before Gateway version 7.3. We recommend updating to Airlock Gateway 7.3 or higher and enabling both the CSP features on IAM and the "CSRF Tokens" feature on the mapping for IAM. If an update to Airlock Gateway 7.3 is currently not possible, we recommend temporarily disabling the Gateway "CSRF Tokens" feature and re-enabling it after the update.
uiTenantIdRules
) Define rules to set the UI Tenant ID.
Changing the UI Tenant ID allows defining custom behavior inside a single Loginapp Design Kit customization.
The rules are evaluated in the order in which they are configured, and the first rule that is satisfied is used to set the value of the UI Tenant ID. If no rule is satisfied (or if no rule is configured), the UI Tenant ID is not set.
The rules configured here are shared across all flow UI types.
uiResourceSetRules
) Defines rules to dynamically change the UI resource set to the specified customization.
This property permits dynamically changing the directory from which UI resources are loaded, based on the first matching rule.
The UI resource set zip files have to be located in a directory specified in the instance.properties under iam.loginapp.ui.resource-sets.dir.
The zip files must have unique file names, otherwise the contained resources will not be available.
The rules are evaluated in the order they are configured, and the first rule that is satisfied is used to set the path from which the resource is loaded.
If no rule is satisfied (or if no rules are configured), the UI resources located at iam.loginapp.rest.ui.customizations are used, if configured. Otherwise, the default UI resources are used.
type: com.airlock.iam.login.rest.application.configuration.ui.LoginappUiConfig
id: LoginappUiConfig-xxxxxx
displayName:
comment:
properties:
authenticationUi:
loginRestUiContentSecurityPolicy:
publicSelfServiceUi:
selfServiceUi:
uiResourceSetRules:
uiTenantIdRules:
userSelfRegUi:
Unique Across Services Password Policy
passwordCheckers
)
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyUniqueAcrossServicesCheck
id: PwdPolicyUniqueAcrossServicesCheck-xxxxxx
displayName:
comment:
properties:
passwordCheckers:
Universally Unique Identity (UUID) Generator
type: com.airlock.iam.common.application.configuration.user.UniversalUniqueIdentityGenerator
id: UniversalUniqueIdentityGenerator-xxxxxx
displayName:
comment:
properties:
Unlock Attempts Reset Processor
type: com.airlock.iam.authentication.application.configuration.processor.UnlockAttemptsResetProcessorConfig
id: UnlockAttemptsResetProcessorConfig-xxxxxx
displayName:
comment:
properties:
Unlock User Step (Public Self-Service)
This step unlocks a user in the following cases:
- No 'Max Number of Unlocks' limit is configured in the 'Public Self-Service Flow Settings' configuration
- The 'Max Number of Unlocks' limit configured in the 'Public Self-Service Flow Settings' has not yet been exceeded by the current user.
Note that in general, locked users are not allowed to perform a public self-service, unless custom restrictions are configured to allow public self-services for certain locked users (see Locked User Restriction). If this step is performed by a locked user, his failed logins for the configured authentication methods are reset. Otherwise, the failed logins are not reset.
Security Notice 1: This step should be the last step in the flow and must always come after at least one credential check step (e.g. email OTP). Precondition tags can help ensuring that only users that successfully completed a previous step are unlocked.
Security Notice 2: Automatically unlocking users can have unexpected security implications. Unlocking users that are locked for any reason other than too many failed password attempts is potentially a security risk, as it might allow brute-force attacks on the second authentication factor.
Security Notice 3: If users are unlocked with proof of only one verified factor, the number of unlocks must be limited in the 'Public Self-Service Flow Settings' plugin configuration. Otherwise bruteforce attacks on one factor are possible, lowering the security of a two login-factor setup to a similar one as a one-factor setup.
resetFailedLoginsForHtmlLoginapp
) failedAttemptsCountersToReset
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.PublicSelfServiceUnlockUserStepConfig
id: PublicSelfServiceUnlockUserStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
failedAttemptsCountersToReset: [PASSWORD]
onFailureGotos:
preCondition:
requiresActivation: false
resetFailedLoginsForHtmlLoginapp: false
skipCondition:
stepId:
tagsOnSuccess:
Unsupported Encryption (to be replaced)
type: com.airlock.iam.core.misc.util.crypto.UnsupportedEncryptionConfig
id: UnsupportedEncryptionConfig-xxxxxx
displayName:
comment:
properties:
Uppercase String Transformer
type: com.airlock.iam.common.application.configuration.transform.UppercaseStringTransformerConfig
id: UppercaseStringTransformerConfig-xxxxxx
displayName:
comment:
properties:
Uppercase Transformer
type: com.airlock.iam.core.misc.impl.authen.UppercaseTransformer
id: UppercaseTransformer-xxxxxx
displayName:
comment:
properties:
URI
uri
)
type: com.airlock.iam.flow.ui.application.configuration.SimpleUriConfig
id: SimpleUriConfig-xxxxxx
displayName:
comment:
properties:
uri:
URIs Processor
allowedClientUris
) allowedLogoUris
) allowedPolicyUris
) allowedTosUris
) clientUriMandatory
) logoUriMandatory
) policyUriMandatory
) tosUriMandatory
)
type: com.airlock.iam.techclientreg.application.configuration.registration.UrisProcessorConfig
id: UrisProcessorConfig-xxxxxx
displayName:
comment:
properties:
allowedClientUris: https://[a-zA-Z0-9/_.-]+
allowedLogoUris: https://[a-zA-Z0-9/_.-]+
allowedPolicyUris: https://[a-zA-Z0-9/_.-]+
allowedTosUris: https://[a-zA-Z0-9/_.-]+
clientUriMandatory: false
logoUriMandatory: false
policyUriMandatory: false
tosUriMandatory: false
URL Context Extractor
Configures request URI to context mappings. If the request URI does not match, the fallback context is used.
The matching is performed against the part of the request URI after the protocol or after the host (depending on the configuration).
Example: If the request URL is "https://host/some/path" then the considered path is "host/some/path" (if "Use Virtual Host" is enabled) or "/some/path" otherwise.
To determine the request URI behind a gateway, Airlock IAM requires one of these gateway settings:- Airlock Gateway (WAF): Verify that "Environment Cookies" are activated on all Loginapp mappings and that the environment cookie prefix is the same in the Airlock Gateway and Airlock IAM. The URL parts are sent by the WAF in the
HTTPS
,SERVER_NAME
,SERVER_REQUEST
andSERVER_PORT
cookies (with respect to the configured prefix) - Airlock Microgateway: Make sure to extract the request URI in Airlock Microgateway Settings.
mappings
) useVirtualHost
) If disabled, the Mappings only match against the path of the request URL, for example /auth/
If enabled, the Mappings match against the host name and path, for example www.server.com/auth/
fallbackContext
) Leave empty to implicitly use the default context. If this plugin is used within a "Combining Context Extractor", use "[DEFAULT]" to explicitly return the default context if necessary.
gateway
) The request URI is extracted differently from the request based on this configuration:
- Airlock Gateway (WAF): request URI is extracted from the environment cookie
- Airlock Microgateway: request URI is extracted from the configured header
- When no gateway is configured, the request URI is used
type: com.airlock.iam.common.application.configuration.context.URLContextExtractor
id: URLContextExtractor-xxxxxx
displayName:
comment:
properties:
fallbackContext:
gateway:
mappings:
useVirtualHost: false
URL CRL Fetcher
url
) basicAuthUsername
) basic-auth-password
. basicAuthPassword
) basic-auth-username
. proxyHost
) proxyPort
) proxyLoginUser
) proxyLoginPassword
) allowOnlyTrustedCerts
) Only allow connections to servers whose certificate is trusted. See documentation of property "Trust Store Path" for more information about what certificates are trusted.
Security warning: Trusting all certificates allows connections to adversarial hosts. Only disable this property for testing and integration setups.
verifyServerHostname
) Enables hostname verification, i.e. the actual hostname must be the same as in the server certificate.
Security warning: Not verifying the hostname may allow connections to adversarial hosts, e.g. if they employ DNS spoofing. Only disable this property for testing and integration setups.
trustStorePath
) Keystore file name containing trusted certificate issuers (and trusted certificates).
If this property is not defined the following certificate issuers are trusted:
- The list of issuers known to the Java VM if the system property "javax.net.ssl.trustStore" is not defined.
- The list of issuers in a keystore referenced by system property "javax.net.ssl.trustStore" if defined in instance.properties using iam.java.opts
If this property is defined then the following certificate issuers are trusted:
- The list of issuers in the referenced truststore file and no others.
This property is only relevant if the property "Allow Only Trusted Certs" is enabled.
trustStoreType
) trustStorePassword
) Depending on the keystore type, leaving this property empty (or undefined) has a different effect:
- JKS: the keystore can be opened and used but the integrity of the keystore is not checked.
- PKCS12: an error occurs.
connectTimeout
) correlationIdHeaderName
) When configured, all requests sent contain a header with the correlation ID with the configured name. If no value or an empty value is specified, the correlation ID header is not sent.
If the correlation ID is not defined, the correlation ID header is not included in sent requests.
type: com.airlock.iam.core.misc.impl.cert.crl.UrlCrlFetcher
id: UrlCrlFetcher-xxxxxx
displayName:
comment:
properties:
allowOnlyTrustedCerts: true
basicAuthPassword:
basicAuthUsername:
connectTimeout: 5
correlationIdHeaderName:
proxyHost:
proxyLoginPassword:
proxyLoginUser:
proxyPort:
trustStorePassword:
trustStorePath:
trustStoreType: JKS
url:
verifyServerHostname: true
URL Encoder
encodingScheme
)
type: com.airlock.iam.core.application.configuration.encoding.UrlEncoder
id: UrlEncoder-xxxxxx
displayName:
comment:
properties:
encodingScheme: UTF-8
URL String Encoder
encodingScheme
)
type: com.airlock.iam.common.application.configuration.encoder.UrlStringEncoderConfig
id: UrlStringEncoderConfig-xxxxxx
displayName:
comment:
properties:
encodingScheme: UTF-8
User Attribute Is Unique
userAttribute
) attributeValueProvider
)
type: com.airlock.iam.flow.shared.application.configuration.condition.UserAttributeUniquenessConditionConfig
id: UserAttributeUniquenessConditionConfig-xxxxxx
displayName:
comment:
properties:
attributeValueProvider:
userAttribute:
User Condition
usernamePattern
) rolePattern
) noRolesAllowed
)
type: com.airlock.iam.core.misc.impl.sso.UserCondition
id: UserCondition-xxxxxx
displayName:
comment:
properties:
noRolesAllowed: true
rolePattern:
usernamePattern:
User Context Data Attribute Mapping
sourceAttribute
) Do not reference the username column here. It is known by the source persister.
targetAttribute
) Do not reference the username column here. It is known by the target persister.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.user.sync.ContextDataAttributeMappingConfig
id: ContextDataAttributeMappingConfig-xxxxxx
displayName:
comment:
properties:
sourceAttribute:
targetAttribute:
User Created
type: com.airlock.iam.common.application.configuration.event.UserCreatedSubscribedEventConfig
id: UserCreatedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
User Data Blacklist Password Policy
The items on the black-list - which will not be accepted as new password - must be part of the context data of the user or the username itself.
The plugin can be configured to either look at all context data or selected pieces of context data (see configuration properties below). The user name is handled separately.
Because birth dates (and other dates) are of special interest in this check, the configuration allows to specify one or more date-conversion patterns. If they are provided, the plugin converts any dates in the context data using all specified patterns when comparing them to the new password.
All pieces of context data that are not of type string and not of type date are converted to a string by calling the toString()-method on the object.
checkUserName
) Note that this property does not depend on the selected context data items. Example: If the username is part of the context data and this property is FALSE, the username will be used nevertheless because it is part of context data.
selectedContextData
) conversionPatterns
) All dates or timestamps (everything with type java.util.Date or a subclass) in the context data is converted using all provided date-format patterns with this property.
The data-format patterns are as specified in JDK 1.6 Java class SimpleDateFormat.
ignoreCase
) comparisonStrategy
) - EQUALS: the policy triggers if user data exactly matches the password (default).
- CONTAINS: the policy triggers if the password contains user data.
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyUserDataBlacklistCheck
id: PwdPolicyUserDataBlacklistCheck-xxxxxx
displayName:
comment:
properties:
checkUserName: true
comparisonStrategy: EQUALS
conversionPatterns:
ignoreCase: false
selectedContextData:
User Data Edit Step
Flow step for editing user data.
Note that for the changes made in this step to take effect, an "Apply Changes Step" must be configured after it in the same flow. If not, the user data changes made in this step are lost.
userDataItems
) interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.flow.shared.application.configuration.step.UserDataEditStepConfig
id: UserDataEditStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
userDataItems:
User Data Registration Step Config
userDataItems
) captchaProvider
) - the response of the flow selecting request (when this step is the first interactive step in a flow).
- the step response immediately preceding the protected step (when this step is not the first interactive step in a flow).
validators
) Currently there are no product plugins for this feature, only custom plugins.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.userselfreg.application.configuration.step.UserDataRegistrationStepConfig
id: UserDataRegistrationStepConfig-xxxxxx
displayName:
comment:
properties:
captchaProvider:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
userDataItems:
validators:
User Deleted
type: com.airlock.iam.admin.application.configuration.event.UserDeletedSubscribedEventConfig
id: UserDeletedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
User Enumeration Protection Processor
Processor that protects against user enumeration attacks by changing any failure of a user identifying step to a generic AUTHENTICATION_FAILED result.
To ensure that all failed results are made generic, this processor must be configured after the "Default Authentication Processor" and the "User Validity Processor".
type: com.airlock.iam.authentication.application.configuration.processor.UserEnumerationProtectionProcessorConfig
id: UserEnumerationProtectionProcessorConfig-xxxxxx
displayName:
comment:
properties:
User Group Configuration
groupCondition
) authenticationTokens
) editable
) showUserValidSection
) availableUserRoles
) rowsOnUserDetailPage
) The data is taken from the context data container of the selected user. The configuration of the used user persister must include the context data properties referenced here.
lockingSettings
) showCredentialMigrationSection
)
type: com.airlock.iam.admin.application.configuration.users.UserGroupConfiguration
id: UserGroupConfiguration-xxxxxx
displayName:
comment:
properties:
authenticationTokens:
availableUserRoles:
editable: true
groupCondition:
lockingSettings:
rowsOnUserDetailPage:
showCredentialMigrationSection: false
showUserValidSection: false
User Identification By Data Step
This step identifies users by their context data items (user data).
Caution: This step allows user enumeration attacks. Such attacks cannot be prevented, even if "Prevent User-Enumeration" is enabled on the "Authentication Flow".
contextDataItems
) The context data items that are used to identify a user. Combined, they must uniquely identify a user.
Each item defines whether it is required for identification or not.
Required items must be provided for identification and must successfully validate (see validators on each item configuration).
Optional items can be omitted, but if they are provided, they must also successfully validate for the step to succeed.
captchaProvider
) - the response of the flow selecting request (when this step is the first interactive step in a flow).
- the step response immediately preceding the protected step (when this step is not the first interactive step in a flow).
ignoreCase
) This is an improvement in user-friendliness, but carries a higher risk that the user cannot be clearly identified, resulting in a step error.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.data.UserByDataIdentifyingStepConfig
id: UserByDataIdentifyingStepConfig-xxxxxx
displayName:
comment:
properties:
captchaProvider:
contextDataItems:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
ignoreCase: false
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
User Identification By Data Step (Public Self-Service)
This step identifies users by their context data items (user data).
Note that if no restriction is violated, or if user feedback is disabled for violated restrictions, this step returns a "success" result and "Tags On Success" are also awarded, even if the user could not be identified. User feedback can be disabled in order to prevent user enumeration ("Stealth Mode").
For more details on restrictions consult the help of the corresponding property in the "Public Self-Service Flow" settings.
contextDataItems
) The context data items that are used to identify a user. Combined, they must uniquely identify a user.
Each item defines whether it is required for identification or not.
Required items must be provided for identification and must successfully validate (see validators on each item configuration).
Optional items can be omitted, but if they are provided, they must also successfully validate for the step to succeed.
captchaProvider
) - the response of the flow selecting request (when this step is the first interactive step in a flow).
- the step response immediately preceding the protected step (when this step is not the first interactive step in a flow).
ignoreCase
) This is an improvement in user-friendliness, but carries a higher risk that the user cannot be clearly identified, resulting in a step error.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.PublicSelfServiceUserByDataIdentifyingStepConfig
id: PublicSelfServiceUserByDataIdentifyingStepConfig-xxxxxx
displayName:
comment:
properties:
captchaProvider:
contextDataItems:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
ignoreCase: false
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
User Identification Processor
type: com.airlock.iam.authentication.application.configuration.processor.UserIdentificationProcessorConfig
id: UserIdentificationProcessorConfig-xxxxxx
displayName:
comment:
properties:
User Identification Step
Configuration for a user identifying flow step.
This step identifies users only by their username, thus it should only be integrated into flows where either a trusted, authenticated entity acts on behalf of the user, or further authentication steps verify the user's identity.
Caution: This step allows user enumeration attacks. Such attacks cannot be prevented, even if "Prevent User-Enumeration" is enabled on the "Authentication Flow".
captchaProvider
) - the response of the flow selecting request (when this step is the first interactive step in a flow).
- the step response immediately preceding the protected step (when this step is not the first interactive step in a flow).
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.username.UserIdentifyingStepConfig
id: UserIdentifyingStepConfig-xxxxxx
displayName:
comment:
properties:
captchaProvider:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
User Identification Step (Public Self-Service)
Configuration for a user identifying flow step.
This step identifies users by their username, performing username transformation if configured (in the "Public Self-Service Flow" settings) and possible.
Note that if no restriction is violated, or if user feedback is disabled for violated restrictions, this step returns a "success" result and "Tags On Success" are also awarded, even if the user could not be identified. User feedback can be disabled in order to prevent user enumeration ("Stealth Mode").
For more details on restrictions consult the help of the corresponding property in the "Public Self-Service Flow" settings.
captchaProvider
) - the response of the flow selecting request (when this step is the first interactive step in a flow).
- the step response immediately preceding the protected step (when this step is not the first interactive step in a flow).
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.PublicSelfServiceUserIdentifyingStepConfig
id: PublicSelfServiceUserIdentifyingStepConfig-xxxxxx
displayName:
comment:
properties:
captchaProvider:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
User Identified
Condition that is fulfilled if the user has been identified.
This condition uses the tentative user ID, which is available as soon as the provided username is resolved. This means that it can be used inside, but not before, a user identifying step.
If no user has been identified yet, the condition is not fulfilled.
type: com.airlock.iam.flow.shared.application.configuration.condition.UserIdentifiedConditionConfig
id: UserIdentifiedConditionConfig-xxxxxx
displayName:
comment:
properties:
User Identity Map
Provides identity information of the user.
If a user has been identified, the following values are provided:
- user-id: the ID of the current user.
- provided-username: the provided username (if present).
- username-to-propagate: the username to propagate for the current user (if present).
- representer-user-id: the user ID of the representer (if present).
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.UserIdentityValueMapProviderConfig
id: UserIdentityValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
User Info Mapping
xmlAttributeId
) contextDataKey
) onlyImportForNewUsers
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.xmlimporter.UserInfoMapping
id: UserInfoMapping-xxxxxx
displayName:
comment:
properties:
contextDataKey:
onlyImportForNewUsers: false
xmlAttributeId:
User Information Group Config
groupCondition
) contextDataItems
) List of configurable context data names.
Each context data name corresponds to a context data field of the persister and must be present there.
type: com.airlock.iam.login.rest.application.configuration.UserInformationGroupConfig
id: UserInformationGroupConfig-xxxxxx
displayName:
comment:
properties:
contextDataItems:
groupCondition:
User Information Self-Service
/<loginapp-uri>/rest/protected/my/self/
. contextDataItemNames
) In any case, even if no list is configured, the two fields 'latestSuccessfulAuthentication' and 'secondLatestSuccessfulAuthentication' are returned in the attributes.
Additionally configured context data is returned in a separate map 'contextData' within the attributes.
groupSettings
) User data self information settings may be defined depending on a user's group membership.
This list defines group-specific settings:
- If the group's condition is met by the user, the corresponding settings are used for this user.
- It is processed in order of definition, i.e. the first matched group condition determines the settings used.
- If no group condition is met, the configured group-independent context data names are used.
type: com.airlock.iam.login.rest.application.configuration.UserSelfInformationConfig
id: UserSelfInformationConfig-xxxxxx
displayName:
comment:
properties:
contextDataItemNames:
groupSettings:
User Locked
lockReason
)
type: com.airlock.iam.common.application.configuration.event.UserLockedSubscribedEventConfig
id: UserLockedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
lockReason: .*
User Management Extension Access Rule Config
id
) roles
)
type: com.airlock.iam.admin.application.configuration.UserManagementExtensionAccessRuleConfig
id: UserManagementExtensionAccessRuleConfig-xxxxxx
displayName:
comment:
properties:
id:
roles:
User Management Extension Config
User Management Extensions are added as a tab in the User Management of the Adminapp.
For someone to see the User Management Extension, they need to have the corresponding access rights. This has to be set in the Adminapp Access Control.
Please consult the official Airlock IAM documentation for more information
id
)
type: com.airlock.iam.common.application.configuration.user.UserManagementExtensionConfig
id: UserManagementExtensionConfig-xxxxxx
displayName:
comment:
properties:
id:
User Not Valid Anymore Predicate Config
gracePeriod
)
type: com.airlock.iam.common.application.configuration.user.UserNotValidAnymorePredicateConfig
id: UserNotValidAnymorePredicateConfig-xxxxxx
displayName:
comment:
properties:
gracePeriod: 0
User Passwords Map
Provides entered passwords as strings, under the keys configured by the corresponding password check steps.
If the step does not have any key configured, no password attribute will be stored in the flow session.
Only passwords entered (and stored) during the current session can be provided. Persisted passwords are hashed and not available.
Provides all passwords under the key that they were stored during the current session.
type: com.airlock.iam.authentication.application.configuration.password.UserPasswordValueMapProviderConfig
id: UserPasswordValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
User Persister Configuration
userPersister
) If the property "User Iterator" is not defined, this plugin is also used for listing and finding users.
Depending on the configured features, the plugin must be able to insert and delete users (i.e. implement the "ExtendedUserPersister" interface).
userIterator
) This property is not required unless a specially configured persister is required to list and search users.
userListDetailLoader
) By defining a differently configured persister plugin (or different plugin), loading user data for the user list page can be sped up.
type: com.airlock.iam.admin.application.configuration.users.UserPersisterConfiguration
id: UserPersisterConfiguration-xxxxxx
displayName:
comment:
properties:
userIterator:
userListDetailLoader:
userPersister:
User Persister Email Certificate Provider
userPersister
) contextDataFieldContainingEmail
) contextDataFieldContainingCertificate
)
type: com.airlock.iam.core.misc.impl.email.UserPersisterEmailCertificateProvider
id: UserPersisterEmailCertificateProvider-xxxxxx
displayName:
comment:
properties:
contextDataFieldContainingCertificate:
contextDataFieldContainingEmail:
userPersister:
User Persister-based User Store
This is a user store implementation that emulates the user store interface by calling user persister and user iterator methods of existing user persister plugins.
Note that this user store cannot handle complex queries and therefore is not suited for all use-cases.
userPersister
)
type: com.airlock.iam.core.application.configuration.store.user.UserPersisterBasedUserStoreProvider
id: UserPersisterBasedUserStoreProvider-xxxxxx
displayName:
comment:
properties:
userPersister:
User Persisting Step Config
persistencyStrategy
) - INSERT: The user is persisted via insert operation. The step will fail, if a user with the same username as the self-registering user already exists.
- UPDATE: The user is persisted via update operation. The step will fail, if no user with the same username as the self-registering user exists.
- AUTO: The system will choose the 'insert' operation if no user with the self-registering user's username exists and the 'update' operation otherwise.
tokenInsertionHandlers
) List of Token Insertion Handlers. Each handler can apply (persist) a specific token from a previous step (which typically stores a description of the token in the flow session).
When using several User Persisting Steps please be aware of the following limitations:
- Token Insertion Handlers are not able to update already persisted tokens
- Only one token per token type (e.g. Airlock 2FA, mTAN) can be persisted during the overall flow
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.userselfreg.application.configuration.step.UserPersistingStepConfig
id: UserPersistingStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
persistencyStrategy: INSERT
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
tokenInsertionHandlers:
User Principal Name Provider
type: com.airlock.iam.common.application.configuration.valueprovider.UserPrincipalNameProviderConfig
id: UserPrincipalNameProviderConfig-xxxxxx
displayName:
comment:
properties:
User Profile Item Search Config
Note: Currently only string and list items are supported by the search.
propertyName
) enabledByDefault
)
type: com.airlock.iam.admin.application.configuration.usersearch.UserProfileItemSearchConfig
id: UserProfileItemSearchConfig-xxxxxx
displayName:
comment:
properties:
enabledByDefault: true
propertyName:
User Representation UI
The representation interface is accessible at /<loginapp-uri>/ui/app/protected/representation/start and /<loginapp-uri>/ui/app/protected/representation/stop after user authentication.
flowToStartRepresentation
) representeeParameterName
) targetLocationParameterName
) flowToStopRepresentation
)
type: com.airlock.iam.selfservice.application.configuration.ui.representation.RepresentationUiConfig
id: RepresentationUiConfig-xxxxxx
displayName:
comment:
properties:
flowToStartRepresentation:
flowToStopRepresentation:
representeeParameterName: user
targetLocationParameterName: target
User Represented Condition Config
User representation is started by a "Start User Representation Step" on the representer's side. The condition is useful to control access to protected self-service flows on represented users.
type: com.airlock.iam.selfservice.application.configuration.selection.condition.UserRepresentedConditionConfig
id: UserRepresentedConditionConfig-xxxxxx
displayName:
comment:
properties:
User Role Assignment Step Config
roles
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.userselfreg.application.configuration.step.UserRoleAssignmentStepConfig
id: UserRoleAssignmentStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
roles:
skipCondition:
stepId:
tagsOnSuccess:
User Roles Changed
The event data contains the string lists event.data.oldRoles and event.data.newRoles (all the user's roles after the change), as well as (for convenience) event.data.addedRoles and event.data.removedRoles.
rolePattern
) handleAddedRoles
) handleRemovedRoles
)
type: com.airlock.iam.common.application.configuration.event.UserRolesChangedSubscribedEventConfig
id: UserRolesChangedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
handleAddedRoles: true
handleRemovedRoles: true
rolePattern: .*
User Roles Custom Claim
If a role transformation is configured in the Authorization Server, this claim will contain the transformed roles.
claimName
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.claims.CustomUserRoleClaimConfig
id: CustomUserRoleClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
User Self Information Group Config
groupCondition
) contextDataItemNames
)
type: com.airlock.iam.login.rest.application.configuration.UserSelfInformationGroupConfig
id: UserSelfInformationGroupConfig-xxxxxx
displayName:
comment:
properties:
contextDataItemNames:
groupCondition:
User Self-Registration Flow
flowId
) steps
) additionalUniqueItemDefinitions
) initialLockReason
) The lock reason used for initially locking the self-registered user.
At the start of the flow the user is initially locked and a User Unlock Step is needed to unlock it.
passwordRepository
) The password repository used to persist passwords. Required if there is a data registration step with a "Password User Item" configured.
The "Default Password Repository" cannot be used here.
initializeNextAuthFlow
) If enabled, the next authentication flow after completing this self-registration flow will be initialized with the user identity and tags from the self-registration. By combining this feature with authentication flows where steps can be skipped based on tags from self-registration, a non-interactive authentication after completed self-registration can be achieved.
enableStealthMode
) Determines whether the registration should run in Stealth Mode, which can protect against enumeration attacks on the first channel verification target. All other user items (including login names) are not protected against enumeration attacks.
Enabling this flag has the following effects:
- The target item definition from the first channel verification step is protected from enumeration attacks.
- At any stage (except when persisting the user), conflicts with existing users are not reported for that item. Hence the channel verification step has to precede persisting steps.
- Any other unique user item (i.e. login names and items explicitly listed as 'unique' in Additional Unique Items), must not be valid according to the validation property configured for the first channel verification target. (E.g.: if channel verification is performed on the email address, no other unique item is allowed to be a valid email address).
processors
)
type: com.airlock.iam.userselfreg.application.configuration.flow.UserSelfRegFlowConfig
id: UserSelfRegFlowConfig-xxxxxx
displayName:
comment:
properties:
additionalUniqueItemDefinitions:
enableStealthMode: false
flowId:
initialLockReason: LockReason.AwaitingAdminApproval
initializeNextAuthFlow: false
passwordRepository:
processors:
steps:
User Self-Registration Flow Link
flowId
)
type: com.airlock.iam.flow.ui.application.configuration.UserSelfRegFlowLinkConfig
id: UserSelfRegFlowLinkConfig-xxxxxx
displayName:
comment:
properties:
flowId:
User Self-Registration Flow Redirect
flowId
)
type: com.airlock.iam.userselfreg.application.configuration.ui.UserSelfRegFlowRedirectTargetConfig
id: UserSelfRegFlowRedirectTargetConfig-xxxxxx
displayName:
comment:
properties:
flowId:
User Self-Registration Flows
defaultFlow
) flows
)
type: com.airlock.iam.userselfreg.application.configuration.FlowBasedUserSelfRegRestConfig
id: FlowBasedUserSelfRegRestConfig-xxxxxx
displayName:
comment:
properties:
defaultFlow:
flows:
User Self-Registration Logging Processor
This processor performs the logging after a successfully completed user self-registration flow.
type: com.airlock.iam.userselfreg.application.configuration.processor.UserSelfRegLoggingProcessorConfig
id: UserSelfRegLoggingProcessorConfig-xxxxxx
displayName:
comment:
properties:
User Self-Registration UI
flowId
) customizedStepUis
) showGotoButtons
) Show Goto buttons for all configured Goto targets on all pages using default UIs of this flow. Clicking a Goto button will redirect to the corresponding Goto target. The Goto targets are configured in the flows themselves, not the UIs.
For customized step UIs, Goto buttons have to be configured explicitly using the "Goto Button UI Element" plugin.
Notice: Goto buttons do not come with pre-defined labels. It is required to add i18n keys and values for each button manually. The key may looks as follows: 'registration.pages.actions.goto.<currentStepId>.<targetStepId>'.
maintenanceMessageUiSettings
) showConfirmationPage
) completionTarget
) cancellationTarget
) For customized step UIs, cancel buttons have to be configured explicitly using the "Cancel Button UI Element" plugin.
flowFailureTarget
) showCancelButtonOnFirstPage
) Note that even if this flag is disabled, a cancel button on the first page is always shown when the first page is reached again during the flow, e.g. by a Goto.
type: com.airlock.iam.userselfreg.application.configuration.ui.UserSelfRegUiConfig
id: UserSelfRegUiConfig-xxxxxx
displayName:
comment:
properties:
cancellationTarget:
completionTarget:
customizedStepUis:
flowFailureTarget:
flowId:
maintenanceMessageUiSettings:
showCancelButtonOnFirstPage: false
showConfirmationPage: true
showGotoButtons: true
User Self-Registration UIs
flowUis
)
type: com.airlock.iam.userselfreg.application.configuration.ui.UserSelfRegUiConfigs
id: UserSelfRegUiConfigs-xxxxxx
displayName:
comment:
properties:
flowUis:
User Self-Service Settings
Settings for session-less user self-services. In contrast to the "Protected Self-Services" these self-services don't require an authenticated session. Instead, each request must contain authentication information, as defined by the "API Access Control" settings.
These REST endpoints begin with the resource path /<loginapp-uri>/rest/protected/my/
.
passwordSettings
) Configures the session-less password change REST endpoint /<loginapp-uri>/rest/protected/my/password/change/
by using the "Password Service" and the "Password Policy" plugins from the referenced "Password Settings" plugin.
Deprecated: The session-less password self-service endpoints are deprecated and will be removed in a future IAM version. Use protected self-service flows instead.
enablePasswordPolicyCheck
) Enables the public REST endpoint to check passwords against the policy configured in the configured "Password Settings" plugin.
Password policy checks are not applicable when using end-to-end encrypted passwords.
REST endpoint: /<loginapp-uri>/rest/public/password/policy/check/
userInformationSelfService
) /<loginapp-uri>/rest/protected/my/self/
. mtanSelfService
) Configures the protected session-less REST endpoints used to manage mobile phone numbers for mTAN authentication.
REST endpoints: /<loginapp-uri>/rest/protected/my/tokens/mtan/*
Deprecated: The session-less mTAN self-service endpoints are deprecated and will be removed in a future IAM version. Use protected self-service flows instead.
crontoSelfService
) Configures the protected session-less REST endpoints used to manage Cronto tokens.
REST endpoints: /<loginapp-uri>/rest/protected/my/tokens/cronto/*
Deprecated: The session-less Cronto self-service endpoints are deprecated and will be removed in a future IAM version. Use protected self-service flows instead.
type: com.airlock.iam.login.rest.application.configuration.UserSelfServiceConfig
id: UserSelfServiceConfig-xxxxxx
displayName:
comment:
properties:
crontoSelfService:
enablePasswordPolicyCheck: false
mtanSelfService:
passwordSettings:
userInformationSelfService:
User Specific Role Timeout Definition
role
) contextDataProperty
) roleTimeoutRules
) defaultIdleTimeout
) defaultLifeTime
)
type: com.airlock.iam.login.app.misc.configuration.UserSpecificRoleTimeoutDefinition
id: UserSpecificRoleTimeoutDefinition-xxxxxx
displayName:
comment:
properties:
contextDataProperty:
defaultIdleTimeout:
defaultLifeTime:
role:
roleTimeoutRules:
User Specific Timeout Provider Config
Timeouts are applied according to the "Role Timeout Rules".
- If no rule matches, the "Default Idle Timeout" and "Default Lifetime" timeouts are applied.
- If no rule matches and only one of "Default Idle Timeout" and "Default Lifetime" is set, the other value is implicitly set to 0, which is the default Gateway timeout.
- If no rule matches and neither "Default Idle Timeout" nor "Default Lifetime" are set, the role timeouts are used. If none are set, the default Gateway timeouts are applied.
0 can be used to set the default Gateway timeout value explicitly.
contextDataStringValueProvider
) roleTimeoutRules
) defaultIdleTimeout
) - the role doesn't have an idle timeout
- the role does have an idle timeout and a lifetime has been set in this plugin
defaultLifetime
) - the role doesn't have a lifetime
- the role does have a lifetime and an idle timeout has been set in this plugin
type: com.airlock.iam.authentication.application.configuration.wafcredentials.UserSpecificTimeoutProviderConfig
id: UserSpecificTimeoutProviderConfig-xxxxxx
displayName:
comment:
properties:
contextDataStringValueProvider:
defaultIdleTimeout:
defaultLifetime:
roleTimeoutRules:
User Statistics Map
Provides some login statistics of the user.
Currently, the following values are provided:
- latest-successful-login: date of the latest successful login (if available).
- second-latest-successful-login: date of the second latest successful login (if available).
- total-logins: total number of successful logins.
- failed-logins: number of failed login attempts since the latest successful login.
- latest-login-attemp: date of the latest login attempt (successful or not, if available).
- first-login: date of the first ever successful login (if available).
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.UserStatisticsValueMapProviderConfig
id: UserStatisticsValueMapProviderConfig-xxxxxx
displayName:
comment:
properties:
User Store Configuration
userStore
) userListDetailLoader
)
type: com.airlock.iam.admin.application.configuration.users.UserStoreConfiguration
id: UserStoreConfiguration-xxxxxx
displayName:
comment:
properties:
userListDetailLoader:
userStore:
User Sync Task Config
It can be used to synchronise data (e.g. import data from an LDAP directory into a database for Airlock IAM) and to convert data.
Data may be modified while importing. When using LDAP / AD, all context data is treated as string data.
sourceUserStore
) If the sync flag is configured, this user store will be used to reset the sync flag.
targetUserStore
) Note: If an imported user cannot be found using the target user store, the task attempts to restore the user (possibly removing a "deleted" flag). If restore was not successful, a new user is inserted.
attributeMappings
) NOTE: The context data attributes must be supported by the source and the target user store.
The username column doesn't need to be referenced here, because it is automatically mapped.
importRoles
) importAuthMethod
) insertUsers
) updateUsers
) deleteUsers
) syncFlag
) true
are synchronised. After successful synchronisation, this task modifies the user in the source user store by setting the sync flag to false
. dataTransformers
) - The username is available as attribute "username".
- The roles are available as attribute "roles".
- The authentication method is available as attribute "authMethod".
- Context data attributes of the source user are handed over to the transfomers. These attributes are not used by all transformers. Check the transformer documentation to learn if and how they can be used.
continueOnErrors
) Errors related to reading users from the source user store are not recoverable and cause the task to fail even if this option is enabled.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.user.sync.UserSyncTaskConfig
id: UserSyncTaskConfig-xxxxxx
displayName:
comment:
properties:
attributeMappings:
continueOnErrors: false
dataTransformers:
deleteUsers: true
importAuthMethod: false
importRoles: false
insertUsers: true
sourceUserStore:
syncFlag:
targetUserStore:
updateUsers: true
User to Authenticator Mapping
pattern
) Defines a regular expression pattern matched against the username provided in the first step of the authentication.
If the username matches the pattern, the authenticator defined in property "authenticator" is used for the authentication process.
The username is extracted from the credential object passed to this plugin when the authenticate-method is called for the first time in the authentication session.
caseSensitive
) authenticator
)
type: com.airlock.iam.core.misc.impl.authen.UserBasedAuthenticatorSelectorMapping
id: UserBasedAuthenticatorSelectorMapping-xxxxxx
displayName:
comment:
properties:
authenticator:
caseSensitive: true
pattern:
User To Context Data Transformer Config
contextDataItem
) mandatoryTransformation
) stopAfterSuccessfulTransformation
)
type: com.airlock.iam.common.application.configuration.user.UserToContextDataTransformerConfig
id: UserToContextDataTransformerConfig-xxxxxx
displayName:
comment:
properties:
contextDataItem:
mandatoryTransformation: true
stopAfterSuccessfulTransformation: true
User to Password Service Mapping
userDataToCheck
) Defines which context data field of the user should match the configured pattern.
If this property is set to @username which is also the default, the pattern will not be matched against a context data field but against the username.
userPersister
) The user persister to look up the context data field of the user.
The user persister is only needed if the User Data To Check above has not been set to:
@username
pattern
) Defines a regular expression pattern matched against the provided username or context data entry (depending on the configuration in User Data To Check above).
If the selected resource matches the pattern, the password service defined in property "passwordService" is used.
caseSensitive
) passwordService
)
type: com.airlock.iam.core.misc.impl.authen.UserBasedPasswordServiceSelectorMapping
id: UserBasedPasswordServiceSelectorMapping-xxxxxx
displayName:
comment:
properties:
caseSensitive: true
passwordService:
pattern:
userDataToCheck: @username
userPersister:
User Token Settings
Settings for session-less user token REST endpoints. In contrast to the "Protected Self-Services" these self-services don't require an authenticated session. Instead, each request must contain authentication information, as defined by the "API Access Control" settings.
These REST endpoints begin with the resource path /<loginapp-uri>/rest/protected/my/
.
secretQuestionsSettings
) Configures the protected session-less REST endpoint used to set answers to secret questions.
REST endpoint: /<loginapp-uri>/rest/protected/my/secret-questions/questionId/answer
deviceRegistrationSettings
) Configures the protected session-less REST endpoints used to manage device tokens.
REST endpoints: /<loginapp-uri>/rest/protected/my/tokens/device-tokens/*
type: com.airlock.iam.login.rest.application.configuration.UserTokenConfig
id: UserTokenConfig-xxxxxx
displayName:
comment:
properties:
deviceRegistrationSettings:
secretQuestionsSettings:
User Trail Log Clean-up Task
Task to clean up stale user trail log entries from the database.
It is recommended to schedule this task during a time with little traffic. Depending on the number of stale user trail logs, the task may take some time to complete.
Note: The clean up task ignores tenant IDs, all stale log are deleted regardless of their tenant IDs.
databaseRepository
) logRetentionTime
) Duration to keep user trail log entries in the database after creation.
Log entries that are older than the specified duration are considered stale and will be removed at the next scheduled clean-up time.
batchSize
) During clean-up, user trail log entries are deleted in batches of this size.
This ensures that any row locks on the database are very short-lived, not affecting parallel log insertions. This value should not be set too high to prevent very long running transactions. User trail log clean-up will repeat deleting this number of logs until all logs not within the retention time have been cleaned up. Therefore, this task can take some time when a lot of user trail logs are present.
This size should be chosen so that every batch does not take longer than 5 seconds. The average runtime of the batches can be found in the task's logs.
type: com.airlock.iam.servicecontainer.app.application.configuration.task.usertrail.UserTrailLogCleanupTaskConfig
id: UserTrailLogCleanupTaskConfig-xxxxxx
displayName:
comment:
properties:
batchSize: 1000
databaseRepository:
logRetentionTime: 90d
User Trail Log Database Repository
sqlDataSource
) logQueries
) If enabled, all SQL queries executed on this repository will be written to the module's corresponding log file. This is only effective if the log level is set to at least INFO.
Note: This does not write the SQL statements to the User Trail Log.
Warning: query values (including potentially sensitive data) will be logged as well.
tenantId
) Identity added to the database records to distinguish between different tenants. Only logs that match the tenant ID specified here will be retrieved on query.
If left empty, 'no_tenant' is used as the effective value for tenant ID.
type: com.airlock.iam.common.application.configuration.usertrail.UserTrailLogRepositoryConfig
id: UserTrailLogRepositoryConfig-xxxxxx
displayName:
comment:
properties:
logQueries: false
sqlDataSource:
tenantId:
User Trail Log Import Task
Task to import user trail log files into the user trail log database.
This task is typically used once in a migration scenario where logs from existing user trail log files should be imported into the database. This task also imports logs from files in subdirectories.
Note:
This task should only be run on demand and should not be scheduled on a regular basis. Logs will be imported multiple times if the task is run multiple times for the same files.
A log file is always either imported completely or not at all. If an error occurs while importing a log file, the task is stopped, no logs are imported from this file and the source file remains unchanged.
This task works on parsable user trail log files only. The default naming of these files is "medusa-usertrail.log".
databaseRepository
) importDirectory
) The directory from which user trail log files will be imported. All filenames matching the filter pattern are used.
If a relative path is specified, the task will look for directories within your config folder. Note that this task will search all nested subdirectories.
filenameFilter
) Import filename regular expression pattern.
Only filenames completely matching this regular expression are imported.
deleteFilesAfterImport
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.usertrail.UserTrailLogImportTaskConfig
id: UserTrailLogImportTaskConfig-xxxxxx
displayName:
comment:
properties:
databaseRepository:
deleteFilesAfterImport: false
filenameFilter: medusa-usertrail\.log(\.\d+)?
importDirectory:
User Unlock Step (Self-Registration)
skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.userselfreg.application.configuration.step.SelfRegistrationUserUnlockStepConfig
id: SelfRegistrationUserUnlockStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
User Unlocked
type: com.airlock.iam.common.application.configuration.event.UserUnlockedSubscribedEventConfig
id: UserUnlockedSubscribedEventConfig-xxxxxx
displayName:
comment:
properties:
User Validity Processor
allowedLockReasons
) Locked users with any lock reason not listed here are logged out immediately.
type: com.airlock.iam.authentication.application.configuration.processor.UserValidityProcessorConfig
id: UserValidityProcessorConfig-xxxxxx
displayName:
comment:
properties:
allowedLockReasons:
User-Agent Mapping
pattern
) replacement
)
type: com.airlock.iam.selfservice.application.configuration.rememberme.RememberMeUserAgentMappingConfig
id: RememberMeUserAgentMappingConfig-xxxxxx
displayName:
comment:
properties:
pattern:
replacement:
User-based Authenticator Selector
An authenticator plugin that select one of several authenticators depending on the username provided in the first authentication step:
The username is compared against a list of regular expressions. The first matching expression defines the authenticator plugin to use for the rest of the authentication process.
If none matches, the default authenticator is used.
This plugin does not add or change data added to the authentication result but just passes on the results of the wrapped authenticator(s).
This authenticator implements the PasswordService interface: it can be used as password service, if the selected authenticator implements the PasswordService interface.
mappings
) defaultAuthenticator
)
type: com.airlock.iam.core.misc.impl.authen.UserBasedAuthenticatorSelector
id: UserBasedAuthenticatorSelector-xxxxxx
displayName:
comment:
properties:
defaultAuthenticator:
mappings:
User-based Password Service Selector
A password service plugin that selects one of several password services depending on the provided user:
The users data is compared against a list of regular expressions. The first matching expression defines the password service plugin to use.
If none matches, the default password service is used.
mappings
) defaultPasswordService
)
type: com.airlock.iam.core.misc.impl.authen.UserBasedPasswordServiceSelector
id: UserBasedPasswordServiceSelector-xxxxxx
displayName:
comment:
properties:
defaultPasswordService:
mappings:
UserInfo Claim
claim
) values
) If multiple values are configured, the request indicates that the claim should be returned with one of the given values. The values in the request appear in order of preference.
If not configured, the claim is requested without a restriction on its value.requirement
) - Essential: the claim is necessary to ensure a smooth authorization experience for the specific task requested by the end-user.
- Voluntary: the claim is useful but not essential for the specific task requested by the end-user
type: com.airlock.iam.oauth2.application.configuration.UserInfoClaimConfig
id: UserInfoClaimConfig-xxxxxx
displayName:
comment:
properties:
claim:
requirement: ESSENTIAL
values:
Username Cookie Identity Propagator
cookieName
) cookiePath
) If one single access cookie is used for all applications, the value "/" can be used. If different tickets are used for different applications, the applications path should be used.
Note that only one access cookie per cookie path and name can exist. Make sure that this cookie name does not clash with other cookie's names. For example, do not use session cookie names such as "JSESSIONID".
Make sure the configuration flag Interpret Cookie Domains is set in the Airlock Gateway (WAF) configuration. If not, the cookie path is ignored and cookies in the cookie store are sent to any back-end HTTP request of the same session. This also means that there may be only one cookie per cookie name!
It is best to consult the corresponding documentation of the Airlock Gateway to get more accurate information on cookie handling.
cookieDomain
) Because of security restrictions in browsers (same origin policy) it is usually not possible to set a cookie for a different domain unless the right-most two domain parts (e.g. "ergon.ch") are equal to that of the application setting the cookie.
It is possible that there are further restrictions regarding this in browsers.
If you are using a HTTP reverse proxy that stores the cookie in its session store (and does not send it to the client), make sure to understand the proxies interpretation of the cookie domain and cookie path.
Make sure the configuration flag Interpret Cookie Domains is set in the Airlock Gateway (WAF) configuration. If not, the cookie domain is ignored and cookies in the cookie store are sent to any back-end HTTP request of the same session. The cookie path is also ignored meaning that there may be only one cookie per cookie name!
Airlock also supports the following cookie domain values (if the flag Interpret Cookie Domains is set):
- The value
.*
results in cookies being sent to all back-end servers. This is especially useful if one authentication ticket is used for multiple back-ends. - The value
@<fully-qualified-host>
results in the cookie being treated as if it were set by the host specified by "<fully-qualified-host>". If using this value, make sure the corresponding mapping also uses the fully qualified hostname.
Note that only one cookie per cookie path and name can exist. Make sure that this cookie name does not clash with other cookie's names. For example, do not use session cookie names such as "JSESSIONID".
setSecureFlag
) If the cookie is marked as secure, the browser (and any HTTP proxy behaving like a browser) should send the cookie only over secure connections.
Caution: If you think that setting this flag makes your application more secure, it is in most cases way better to adequately secure the access cookie by encrypting it appropriately. Remember that this flag just "asks" the browser to not transmit the cookie over unencrypted connections.
urlEncodingScheme
) Make sure that the component receiving the ticket uses the same URL encoding scheme.
Specify
NONE
to disable URL-Encoding in case the target system cannot handle URL-Encoded cookies. Notice: This will only work if the username contains nothing but ASCII characters. Other characters like umlauts are never allowed unencoded in cookies and will result in an error. maxAge
) - A positive value indicate that the cookie will expire after that many seconds have passed.
- A negative value means that the cookie is not stored persistently and will usually be deleted when the Web browser exits (however, browsers may keep it for longer).
- A value of 0 (zero) causes the cookie to be deleted by sending an expired cookie with the same name.
type: com.airlock.iam.core.misc.impl.sso.UsernameCookieIdentityPropagator
id: UsernameCookieIdentityPropagator-xxxxxx
displayName:
comment:
properties:
cookieDomain:
cookieName: username
cookiePath: /
maxAge: -1
setSecureFlag: false
urlEncodingScheme: UTF-8
Username Custom Claim
If a username transformation is configured in the Authorization Server, this claim will contain the transformed username.
claimName
) claimCondition
) This custom claim will only be added to the issued token if the configured condition is satisfied.
If no condition is configured, the custom claim will always be added.
type: com.airlock.iam.oauth2.application.configuration.claims.CustomUsernameClaimConfig
id: CustomUsernameClaimConfig-xxxxxx
displayName:
comment:
properties:
claimCondition:
claimName:
Username Generation Step Config
userIdentityGenerator
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.userselfreg.application.configuration.step.UsernameGenerationStepConfig
id: UsernameGenerationStepConfig-xxxxxx
displayName:
comment:
properties:
customFailureResponseAttributes:
customResponseAttributes:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
userIdentityGenerator:
Username Password Authentication Step
passwordRepository
) policyToCheckOnLogin
) captchaProvider
) - the response of the flow selecting request (when this step is the first interactive step in a flow).
- the step response immediately preceding the protected step (when this step is not the first interactive step in a flow).
passwordChangeRedFlag
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
passwordAttributeKey
) The optional key under which this password will be available in the identity propagation.
The value can also be retrieved from the session using the "User Passwords Map" value map provider.
If no key is configured, the password will not be made available in the flow attributes, and cannot be used by identity propagators.
Important: Multiple Password Authentication steps or Mandatory Password Change steps which have the same value for this property might override each others passwords.
If you have configured a Mandatory Password Change step, you might consider to use the same key.
Note: This feature will not work together with end-to-end encryption.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.password.UsernamePasswordAuthenticationStepConfig
id: UsernamePasswordAuthenticationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: PASSWORD
captchaProvider:
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
passwordAttributeKey:
passwordChangeRedFlag:
passwordRepository:
policyToCheckOnLogin:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Username SAML 2.0 Attribute
samlAttributeName
) nameFormat
)
type: com.airlock.iam.saml2.application.configuration.assertion.attribute.UsernameAttributeConfig
id: UsernameAttributeConfig-xxxxxx
displayName:
comment:
properties:
nameFormat: urn:oasis:names:tc:SAML:2.0:attrname-format:basic
samlAttributeName:
Username User Group Condition
groupName
) pattern
)
type: com.airlock.iam.core.misc.impl.persistency.UsernameUserGroupCondition
id: UsernameUserGroupCondition-xxxxxx
displayName:
comment:
properties:
groupName:
pattern:
Username User Item
required
) validators
)
type: com.airlock.iam.userselfreg.application.configuration.definition.UsernameDefinitionConfig
id: UsernameDefinitionConfig-xxxxxx
displayName:
comment:
properties:
required: true
validators:
Username User Profile Item Config
stringResourceKey
) sortable
)
type: com.airlock.iam.common.application.configuration.userprofile.UsernameUserProfileItemConfig
id: UsernameUserProfileItemConfig-xxxxxx
displayName:
comment:
properties:
sortable: true
stringResourceKey:
Users Configuration
authenticationTokens
) editable
) availableUserRoles
) Set of roles assignable to users.
Translations for the roles displayed in the Adminapp user management UI can be defined using the Adminapp translation keys roles.user.labels.[rolename].
This setting can be overwritten by "Admin Role Specific Settings".
showUserValidSection
) userLockedSection
) Defines the visibility of the user-locked section on the user details page:
- SHOW: show all attributes (the default)
- RESTRICTED: show some attributes suitable for users in Active Directory (no lock reason or date; unlock button but no lock button)
- HIDE: do not show the user locked section
languageContextKey
) maxUsersToList
) usernameSearchField
) - The user search never searches in the default 'username' field, but in the configured field instead.
- This applies also if the 'Only search username' checkbox is selected.
- The 'username' column in the search result list displays the value of this field.
- The title of the user detail pages uses the value of this field.
defaultSortColumn
) sortAscendingByDefault
) columnsInUserList
) The data for the columns is taken from the context data container of the displayed users. The configuration of the used user persister must include the context data properties referenced here.
The colums are displayed in addition to the following columns:
- username
- locked state
- latest login date
userSearchProfileItems
) Note: Currently only string and list items are supported by the search. All other items will be ignored.
rowsOnUserDetailPage
) The data is taken from the context data container of the selected user. The configuration of the used user persister must include the context data properties referenced here.
Note: The username is always displayed and can therefore not be configured here. Whether it is editable can be configured in the "Access Control" configuration in the "Admin Tool" root node.
userDataSource
) This setting can be overwritten by "Admin Role Specific Settings".
adminRoleSpecificSettings
) roleSpecificSettingsSelection
) accountLinkManagementConfig
) lockingSettings
) showMigrationSection
) enableMultipleNextAuthMethods
) userManagementExtensions
) User Management Extensions are added as a tab in the User Management of the Adminapp.
For someone to see the User Management Extension, they need to have the corresponding access rights. This has to be set in the Adminapp Access Control.
Please consult the official Airlock IAM documentation for more information
additionalAuthMethodProperties
) Make sure that the corresponding context properties are supported (i.e. configured in) by the configured user persister.
allowBulkChanges
) If enabled, some user properties may be changed for users simultaneously (bulk change). In this release, the following properties can be set as bulk change:
- Next authentication method (token migration) and migration date.
The bulk change page is accessible from the user list page.
userIdentityGenerator
) If configured, this plugin is used to generate the ID (username) of new users. The "Create new user" dialogue in the Adminapp will not contain a username input field. REST requests to create a new user (POST /<adminapp-uri>/rest/users) will use this generator to create a user ID (instead of the default UUID generator)
usernamePrefill
) usernameValidator
) Be aware that independent of this validator, IAM enforces two default username validations on provided usernames:
- Uniqueness Validation - the provided username must not already exist on the database
- Minimum Length Validation - the provided username must be at least 2 characters long
Note that these validators (configured and default) are only applied for provided usernames and do not validate generated ones, i.e. when configuring a User Identity Generator.
groupSettings
) Some settings may be defined depending on a user's group membership (e.g. if the user is readable or not).
This list defines group-specific settings:
- If the group's condition is met by the user, the corresponding settings are used for this user.
- It is processed in order of definition, i.e. the first matched group condition determines the settings used.
- If no group condition is met, the global user settings are used (= the ones just above).
caseSensitiveSearchAsDefault
) onlySearchWordsAsDefault
) searchInUsernameAsDefault
) advancedSearchFilters
) automaticallyPerformLastSearch
) export
) rememberMeManagementEnabled
) If configured, the administrator will be able to delete all persisted Remember-Me tokens for a user on the user overview page.
rememberMeSettings
) If configured, the administrator will be able to delete all persisted Remember-Me tokens for a user on the user overview page.
If there are still users with legacy Remember-Me tokens from the JSP Loginapp in earlier IAM versions, also configure the JSP Loginapp Remember-Me Settings.
jspLoginappRememberMeSettings
) oauth2AuthorizationServers
)
type: com.airlock.iam.admin.application.configuration.users.UsersConfiguration
id: UsersConfiguration-xxxxxx
displayName:
comment:
properties:
accountLinkManagementConfig:
additionalAuthMethodProperties:
adminRoleSpecificSettings:
advancedSearchFilters:
allowBulkChanges: false
authenticationTokens:
automaticallyPerformLastSearch: true
availableUserRoles:
caseSensitiveSearchAsDefault: true
columnsInUserList:
defaultSortColumn:
editable: true
enableMultipleNextAuthMethods: false
export:
groupSettings:
jspLoginappRememberMeSettings:
languageContextKey:
lockingSettings:
maxUsersToList: 50
oauth2AuthorizationServers:
onlySearchWordsAsDefault: false
rememberMeManagementEnabled: false
rememberMeSettings:
roleSpecificSettingsSelection:
rowsOnUserDetailPage:
searchInUsernameAsDefault: true
showMigrationSection: false
showUserValidSection: false
sortAscendingByDefault: true
userDataSource:
userIdentityGenerator:
userLockedSection: SHOW
userManagementExtensions:
userSearchProfileItems:
usernamePrefill:
usernameSearchField:
usernameValidator:
Users OAuth 2.0 Authorization Server
authorizationServerIdentifier
) sessionRepository
) deleteTokensOnPasswordChange
) Indicates whether all persisted tokens and sessions of the user are deleted on:
- Password resets (setting or generating a password by admins)
- Password delete (by admins)
- Password letter orders (by admins)
deleteTokensOnUserLocked
) Note: To delete tokens for users locked in the Loginapp, configure the corresponding settings within the Loginapp.
type: com.airlock.iam.admin.application.configuration.users.UsersOAuth2AuthorizationServerConfig
id: UsersOAuth2AuthorizationServerConfig-xxxxxx
displayName:
comment:
properties:
authorizationServerIdentifier:
deleteTokensOnPasswordChange: true
deleteTokensOnUserLocked: true
sessionRepository:
UUID Identity Generator
type: com.airlock.iam.common.application.configuration.UuidIdentityGeneratorConfig
id: UuidIdentityGeneratorConfig-xxxxxx
displayName:
comment:
properties:
Valid Flag Password Policy
contextDataKey
) true
and false
. validIfTrue
) true
. You may invert the behavior such that passwords are rejected when the value is true
. defaultValue
) valid-if-true
has no influence on this property.
type: com.airlock.iam.core.misc.impl.authen.PwdPolicyPasswordValidFlagCheck
id: PwdPolicyPasswordValidFlagCheck-xxxxxx
displayName:
comment:
properties:
contextDataKey:
defaultValue: true
validIfTrue: true
Value Provider Map
valueProviders
)
type: com.airlock.iam.flow.shared.application.configuration.valueprovider.ValueProviderMapProviderConfig
id: ValueProviderMapProviderConfig-xxxxxx
displayName:
comment:
properties:
valueProviders:
Value Transformation
replaceAll(replacement)
). regex
) Regular expression to match the input value or part of it. The expression '(.+)' matches the whole string and saves it as a group which can be referenced as '$1' in the replacement expression.
Notice: To match any string, always use "(.+)", and never "(.*)" since the latter also matches against the empty string and thus the replacement will be applied twice.
- To add the prefix 'IAM_', use Regex='^(.+)$' and Replacement='IAM_$1'.
- To remove all whitespace from the value, use Regex='\s' and Replacement=''.
- To remove the domain part of an email address, use Regex='@.*$' and Replacement=''.
replacement
)
type: com.airlock.iam.core.misc.impl.sso.ValueTransformation
id: ValueTransformation-xxxxxx
displayName:
comment:
properties:
regex:
replacement:
Vasco Activation Possible
tokenDataProvider
)
type: com.airlock.iam.flow.shared.application.configuration.selection.condition.VascoActivationPossibleConditionConfig
id: VascoActivationPossibleConditionConfig-xxxxxx
displayName:
comment:
properties:
tokenDataProvider:
Vasco Cronto Handler
vascoHandler
) enableOnlineValidation
) enableOnlineActivation
) enablePushNotifications
) pushAppHandler
) fallbackToOfflineValidation
) maximumNumberOfActivatedDevices
) defaultAllowedPlatforms
) Defines the platforms that may be activated per default. This can be overridden by an administrator for each individual letter.
Currently, the following platform codes are supported:
- 0: DIGIPASS 760
- 3: iOS
- 7: Android
- 11: Windows phone
- 13: Blackberry
- 5: jailbroken iOS
- 9: rooted Android
platformBlacklist
) Blacklist of blocked platform types. If a type is on this list, it can not be used for login or transaction signing and new devices of this type cannot be activated, independent of the allowed platforms in the activation letter.
Currently, the following platform codes are supported:
- 0: DIGIPASS 760
- 3: iOS
- 7: Android
- 11: Windows phone
- 13: Blackberry
- 5: jailbroken iOS
- 9: rooted Android
showMac
) showWarning
) askApproval
) askApprovalOffline
) askForPin
) showData
) templateNumber
) Index (encoded in the challenge cryptogram) that selects the template to be used by the Cronto app to display the challenge data.
Note that this option is currently not supported by DIGIPASS for Mobile and will be ignored by the application.
characterEncodingIndex
) Index (encoded in the challenge cryptogram) that selects the character encoding (font table index) to be used by the Cronto app to display the challenge data.
Currently, the following languages are supported:
- 0: for encoding messages in ISO-8859-15
- 1: for encoding messages with Katakana support
- 2: for encoding messages with Central- and East-European languages support
- 3: for encoding messages with Greek language support
appSecurityVersion
) challengeTokenLifetime
) showNewestOpenTransactionOnly
) storeOtpApplicationForNewDevices
) futureApplicationIndices
) Comma-separated list of indices of crypto applications that should be saved upon device activation for currently not implemented use-cases.
To allow future authentication with push, it is sufficient to enable the "Store OTP Application for new Devices" property.
logResponseCodes
) tokenDataProvider
) defaultNumberOfActivations
) Defines how many times an activation letter can be used per default to activate devices or apps. This can always be changed by an administrator for an individual letter.
defaultLetterValidityTime
) selectableAsAuthMethod
) selectableAsNextAuthMethod
) enableOnScreenActivation
) On-screen activation is only possible in two situations: (1) during credential migration and (2) when activating an additional device.
Attention: make sure that such an activation can only be accessed by strongly authenticated users. For this, the "Strong Authentication Tag" must be configured on the following plugins (if used):- Cronto Activation Step
- Cronto Activation Possible
- Cronto Activation Required
enableOnScreenActivationWithLetter
) Attention: make sure that such an activation can only be accessed by strongly authenticated users (refer to the documentation of "Enable On-Screen Activation")
availableOrderOptions
) optionsResourceKeyPrefix
) defaultOrderOptions
)
type: com.airlock.iam.core.misc.impl.cronto.vascocronto.VascoCrontoHandler
id: VascoCrontoHandler-xxxxxx
displayName:
comment:
properties:
appSecurityVersion: 0
askApproval: true
askApprovalOffline: false
askForPin: false
availableOrderOptions: [default]
challengeTokenLifetime: 300
characterEncodingIndex: 0
defaultAllowedPlatforms: 0,3,7,11,13
defaultLetterValidityTime:
defaultNumberOfActivations: 8
defaultOrderOptions: [default]
enableOnScreenActivation: false
enableOnScreenActivationWithLetter: false
enableOnlineActivation: false
enableOnlineValidation: false
enablePushNotifications: false
fallbackToOfflineValidation: false
futureApplicationIndices:
logResponseCodes: false
maximumNumberOfActivatedDevices: 99
optionsResourceKeyPrefix: cronto-order-option.
platformBlacklist:
pushAppHandler:
selectableAsAuthMethod: true
selectableAsNextAuthMethod: true
showData: true
showMac: true
showNewestOpenTransactionOnly: true
showWarning: false
storeOtpApplicationForNewDevices: true
templateNumber: 0
tokenDataProvider:
vascoHandler:
Vasco Cronto Online Activation Token Clean-up Strategy
tokenDataProvider
) secondsToKeepOnlineActivationToken
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.token.VascoCrontoOnlineActivationTokenCleanUpStrategyConfig
id: VascoCrontoOnlineActivationTokenCleanUpStrategyConfig-xxxxxx
displayName:
comment:
properties:
secondsToKeepOnlineActivationToken: 300
tokenDataProvider:
Vasco Cronto Token Manager
crontoHandler
)
type: com.airlock.iam.admin.application.configuration.tokens.vasco.VascoCrontoTokenManager
id: VascoCrontoTokenManager-xxxxxx
displayName:
comment:
properties:
crontoHandler:
Vasco Letter Generator
reportRenderer
) fileNameSuffix
) userPersister
) recipientEmailAddress
) languageAttributeName
) emailSubject
) emailBody
) emailService
)
type: com.airlock.iam.admin.application.configuration.vasco.VascoLetterGenerator
id: VascoLetterGenerator-xxxxxx
displayName:
comment:
properties:
emailBody: Please refer to the attached document for token details.
emailService:
emailSubject: Vasco Token activation
fileNameSuffix:
languageAttributeName:
recipientEmailAddress:
reportRenderer:
userPersister:
Vasco OTP Authentication Step
vascoHandler
) tokenDataProvider
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.authentication.application.configuration.vasco.VascoOtpAuthStepConfig
id: VascoOtpAuthStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: VASCO_OTP
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
tokenDataProvider:
vascoHandler:
Vasco OTP Device Activation
tokenDataProvider
) vascoHandler
) visibleDigits
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.VascoOtpDeviceActivationStepConfig
id: VascoOtpDeviceActivationStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: VASCO_OTP
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
tokenDataProvider:
vascoHandler:
visibleDigits:
Vasco OTP Public Self-Service Approval Step
Note that unlike identity verification steps, approval steps require an existing user and cannot prevent username enumeration (no stealth mode). It is therefore important that approval steps are only used after an identity verification step.
Be aware that Vasco OTP approval does not allow verification of the data via a separate channel. If this additional level of security is required, use Airlock 2FA, Cronto or mTAN approval.
vascoHandler
) tokenDataProvider
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.publicselfservice.application.configuration.steps.PublicSelfServiceVascoOtpApprovalStepConfig
id: PublicSelfServiceVascoOtpApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: VASCO_OTP
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
tokenDataProvider:
vascoHandler:
Vasco OTP Self-Service Approval Step
Be aware that Vasco OTP approval does not allow verification of the data via a separate channel. If this additional level of security is required, use Airlock 2FA, Cronto or mTAN approval.
vascoHandler
) tokenDataProvider
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.selfservice.application.configuration.step.VascoOtpSelfServiceApprovalStepConfig
id: VascoOtpSelfServiceApprovalStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: VASCO_OTP
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
onFailureGotos:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
tokenDataProvider:
vascoHandler:
Vasco OTP Token Controller
autoOrderToken
) onlyActiveTokensAssignable
) assignTokenToMultipleUsers
) availableAdditionalInformation
) allowEmptyAdditionalInformation
) additionalInfoResourceKeyPrefix
) mayBeSelectedAsNextAuthMethod
) vascoLetterGenerator
) showWarningWithinTokenAssignmentDialog
) enableComment
) allowEmptyComment
) notifier
) $USERNAME$
$SERIALID$
type: com.airlock.iam.admin.application.configuration.vasco.VascoOtpTokenControllerConfig
id: VascoOtpTokenControllerConfig-xxxxxx
displayName:
comment:
properties:
additionalInfoResourceKeyPrefix:
allowEmptyAdditionalInformation: true
allowEmptyComment: false
assignTokenToMultipleUsers: false
autoOrderToken: false
availableAdditionalInformation:
enableComment: false
mayBeSelectedAsNextAuthMethod: true
notifier:
onlyActiveTokensAssignable: true
showWarningWithinTokenAssignmentDialog: false
vascoLetterGenerator:
Vasco OTP Token Manager
tokenDataProvider
) vascoHandler
) enableImportedTokens
)
type: com.airlock.iam.admin.application.configuration.tokens.vasco.VascoOtpTokenManager
id: VascoOtpTokenManager-xxxxxx
displayName:
comment:
properties:
enableImportedTokens: true
tokenDataProvider:
vascoHandler:
Vasco Runtime Parameters
Configuration settings of the Vasco Verifier.
allowedTokenTypes
) allowedApplicationNames
) iTimeWindow
) Determines the acceptable time difference (in time steps) between a vasco token and the host system during authentication. The duration of a time step is characteristic to the used vasco token model.
The required number of time steps can be calculated as follows (rounded up to the next multiple of 2):
((Maximum period of inactivity in days * Maximum token clock drift per day)) * 2) / Time step of tokenWhere the maximum token clock drift per day is 2 seconds.
If this property is not set, the vacman controller default of 100 is used.
type: com.airlock.iam.core.misc.util.vasco.VascoRuntimeParameters
id: VascoRuntimeParameters-xxxxxx
displayName:
comment:
properties:
allowedApplicationNames:
allowedTokenTypes:
iTimeWindow: 23
Vasco Token Report Strategy
The task uses a token persister plugin to go through the set of tokens for which a report should be rendered using the configured report renderer.
manageTokenDataProvider
) Should be configured to return all accessible tokens.
selectNewToken
) vascoTokenService
) tokenDataProvider
) reportTypeShortDesc
) The text is used in the user trail log written when a report is rendered. Please specify a text like in the examples below, so it suits the structure of the log statement it is used in.
userStore
) reportRenderer
) barcodeGenerator
) Optional barcode generator. If this property is configured, a barcode image and the corresponding barcode content are added to the parameter map accessible by report templates. The following keys are defined:
- BarcodeImage: placeholder for the barcode image.
- BarcodeContent: placeholder for the barcode content.
- BarcodeContentDisplay: placeholder for the barcode content in a human-readable format.
Tracking ID: If the "tracking ID" field is configured in the token data provider the generated barcode content is automatically stored in the token. This is useful for future reference, e.g., for tracking active shipments.
languageAttributeName
) outputDirectory
) This property is not required if the renderer plugin (see separate property) does not write on the outputstream (e.g. sends it somewhere else). It is required otherwise.
Note: If this property is not defined and the used renderer plugin writes on the output stream, then the result (e.g. a PDF file) is lost.
workingDirectory
) If this property is defined, the credential reports are not directly generated into the output directory (see other property) but they are generated into this working directory and are moved to the output directory once they are done.
This helps to solve problems with processes automatically reading the rendered reports and reading partial reports during the generation process. Make sure that the working directory and the output directory reside in the same file system (if not the moving of the generated file will not be atomic).
The directory is either absolute or relative to the JVMs current directory.
deleteOldReports
) Caution: This feature will delete all reports starting with the prefix configured by property "file-name-prefix" and the user's name. Thus you must make sure, that different report types use different filename prefixes.
fileNamePrefix
) Do not use the prefix "pwd-" or the empty prefix if password- or tokenlist reports are stored in the same directory. The latter is used as default for token lists (matrix card) and the former for password letters.
fileNameSuffix
) aggregateReport
) requiredOrderOptions
) excludingOrderOptions
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.token.VascoTokenReportStrategyConfig
id: VascoTokenReportStrategyConfig-xxxxxx
displayName:
comment:
properties:
aggregateReport:
barcodeGenerator:
deleteOldReports: false
excludingOrderOptions:
fileNamePrefix:
fileNameSuffix:
languageAttributeName:
manageTokenDataProvider:
outputDirectory:
reportRenderer:
reportTypeShortDesc: UNSPECIFIED
requiredOrderOptions:
selectNewToken: false
tokenDataProvider:
userStore:
vascoTokenService:
workingDirectory:
Vasco Token Service
tokenDataProvider
) enableImportedTokens
)
type: com.airlock.iam.core.misc.tokenservice.VascoTokenService
id: VascoTokenService-xxxxxx
displayName:
comment:
properties:
enableImportedTokens: true
tokenDataProvider:
Vasco Token Verifier
vascoHandler
) tokenDataProvider
)
type: com.airlock.iam.core.misc.impl.tokenverifier.vasco.VascoTokenVerifier
id: VascoTokenVerifier-xxxxxx
displayName:
comment:
properties:
tokenDataProvider:
vascoHandler:
Voluntary Password Change Step
oldPasswordRequired
) passwordRepository
) passwordPolicy
) oldPasswordAttempts
) authenticationMethodId
) Example: a system tracks two passwords per user. Password 1 is used in flow A, password 2 in flow B. These two steps must have distinct 'Authentication Method Ids', e.g. PASSWORD1 and PASSWORD2.
If only one identifier (e.g. "PASSWORD") is used, this may allow brute force attacks on the password as follows. Assuming an attacker knows the user's password 1, they get an unlimited number of attempts on flow B, as the 'PASSWORD' counter can repeatedly be reset to 0 by performing a successful login on flow A.To prevent such attacks, use two different counters by setting the authentication methods, for example, to PASSWORD1 and PASSWORD2, respectively.
passwordAttributeKey
) The optional key under which the new password is made available in the identity propagation.
The password can be retrieved from the session using the "User Passwords Map" value map provider.
If no key is configured, the new password will not be made available in the flow attributes, and cannot be used by identity propagators.
Note: This feature will not work together with end-to-end encryption.
interactiveGotoTargets
) dynamicStepActivations
) skipCondition
) If this condition is configured and fulfilled, the step is skipped and the flow execution continues with the subsequent step.
preCondition
) requiresActivation
) tagsOnSuccess
) stepId
) onFailureGotos
) If the step fails (no retry) and a goto target for the error code is defined here, the flow does not fail and instead a "goto" to the specified target step is executed. Note that even when the "goto" is executed, any error codes that are considered a failed factor attempt will still increment the "failed attempts" counter, and may lead to the user being locked. Therefore, this may still result in a failed flow.
A typical application of this feature is switching to an alternative authentication factor step, if an external service (e.g. Futurae server, SMS gateway) is not available (error code EXTERNAL_SERVICE_UNAVAILABLE
with "Strict Counting" disabled, which will not increment the "failed attempts" counter). Other error codes can be found in the IAM REST documentation, in both the general "Error Codes" section and in the documentation of specific endpoints.
customResponseAttributes
) A list of custom attributes that are returned in the REST response in addition to the standard attributes the step already returns. The custom attributes defined here are only returned if the step result does not lead to an error response.
Custom attributes are added to the response when a step is initialized and when actions are executed on the step. They will therefore be available in the response leading to this step, and in any responses from endpoints specific to this step. For non-interactive steps, custom attributes are accumulated and added to the response leading to the next interactive step.
Custom attributes are not returned for 'retrieve' endpoints.
customFailureResponseAttributes
)
type: com.airlock.iam.login.application.configuration.password.VoluntaryPasswordChangeStepConfig
id: VoluntaryPasswordChangeStepConfig-xxxxxx
displayName:
comment:
properties:
authenticationMethodId: PASSWORD
customFailureResponseAttributes:
customResponseAttributes:
dynamicStepActivations:
interactiveGotoTargets:
oldPasswordAttempts:
oldPasswordRequired: true
onFailureGotos:
passwordAttributeKey:
passwordPolicy:
passwordRepository:
preCondition:
requiresActivation: false
skipCondition:
stepId:
tagsOnSuccess:
Whitelist HTTP Signature Headers
allowedHttpSignatureHeaders
)
type: com.airlock.iam.login.app.misc.oneshot.impl.HttpSignatureHeadersWhitelistConfig
id: HttpSignatureHeadersWhitelistConfig-xxxxxx
displayName:
comment:
properties:
allowedHttpSignatureHeaders:
Word Template Password Renderer
Report Parameters (${...})
The word document may contain parameters as normal text elements that are replaced. Those parameters have the form ${ParamName}
.
This renderer also supports arbitrary MessageFormat
patterns for all input parameters; for example ${Now,date,short}
will effectively be interpreted as MessageFormat {0,date,short}
with the single parameter Now
from the parameter map. For more information about MessageFormat, please consult the MessageFormat javadoc.
There are two predefined properties that are always added to the parameter map:
${PlainPassword}
contains the plain text password to display-
${Now}
contains the current timestamp and can be used for both date and time display. Since this represents aDate
object, it can be formatted directly using MessageFormat, for example:
${Now,date,short}
displays a short date using the user's locale; for example:09.01.12
.
Alternatively, a date format can be specified in aSimpleDateFormat
compatible form, for example:
${Now,date,dd.MM.yyyy}
resulting in09.01.2012
.
This password renderer allows to pass arbitrary parameters to the conversion engine: the parameter map passed to the renderPassword()
method is forwarded to the report engine. Thus, when placing the parameter Salutation
with value "Dear Mr. Smith" into the parameter map when calling this renderer, you can display this value in the document using ${Salutation}
.
Adding images is also supported by adding an instance of BufferedImage
to the parameter map. This image replaces the entire text node where the parameter was found and is inserted as an inline image. Make sure there's enough place for that image in the template document.
Handling Multiple Languages
You can have this renderer use different documents for rendering depending on a language.There must always be a default template configured which is used if there's no specific template defined for the passed-in language. Additionally you can define a specific template for every language expected.
Templates are read in when the renderer is initialized and are kept in memory by the renderer. Thus, reusing the renderer instance improves efficiency as the document needn't be re-parsed on every call.
defaultTemplate
) Supported formats are: DOC, DOCX, RTF and ODF.
The file name is either absolute or relative to the JVMs current directory.
Multiple templates for different languages can be specified with the property template. There must always be a default template.
template
) Selectors must be chosen according to the ISO-2-letter language codes, i.e. "fr" for french.
See also description of default-template.
saveOptions
)
type: com.airlock.iam.core.misc.util.password.generator.WordTemplatePasswordRenderer
id: WordTemplatePasswordRenderer-xxxxxx
displayName:
comment:
properties:
defaultTemplate:
saveOptions:
template:
Word Template Report Renderer
Report Parameters (${...})
The word document may contain parameters as normal text elements that are replaced. Those parameters have the form ${ParamName}
.
This renderer also supports arbitrary MessageFormat
patterns for all input parameters; for example ${Now,date,short}
will effectively be interpreted as MessageFormat {0,date,short}
with the single parameter Now
from the parameter map. For more information about MessageFormat, please consult the MessageFormat javadoc.
There is one predefined property that is always added to the parameter map:
-
${Now}
contains the current timestamp and can be used for both date and time display. Since this represents aDate
object, it can be formatted directly using MessageFormat, for example:
${Now,date,short}
displays a short date using the user's locale; for example:09.01.12
.
Alternatively, a date format can be specified in aSimpleDateFormat
compatible form, for example:
${Now,date,dd.MM.yyyy}
resulting in09.01.2012
.
This report renderer allows to pass arbitrary parameters to the conversion engine: the parameter map passed to the renderReport()
method is forwarded to the report engine. Thus, when placing the parameter Salutation
with value "Dear Mr. Smith" into the parameter map when calling this renderer, you can display this value in the document using ${Salutation}
.
Adding images is also supported by adding an instance of BufferedImage
to the parameter map. This image replaces the entire text node where the parameter was found and is inserted as an inline image. Make sure there's enough place for that image in the template document.
Handling Multiple Languages
You can have this renderer use different documents for rendering depending on a language.There must always be a default template configured which is used if there's no specific template defined for the passed-in language. Additionally you can define a specific template for every language expected.
Templates are read in when the renderer is initialized and are kept in memory by the renderer. Thus, reusing the renderer instance improves efficiency as the document needn't be re-parsed on every call.
defaultTemplate
) Supported formats are: DOC, DOCX, RTF and ODF.
The file name is either absolute or relative to the JVMs current directory.
Multiple templates for different languages can be specified with the property template. There must always be a default template.
template
) Selectors must be chosen according to the ISO-2-letter language codes, i.e. "fr" for french.
See also description of default-template.
saveOptions
)
type: com.airlock.iam.core.misc.util.report.WordTemplateReportRenderer
id: WordTemplateReportRenderer-xxxxxx
displayName:
comment:
properties:
defaultTemplate:
saveOptions:
template:
Word Template Token List Renderer
Report Parameters (${...})
The word document may contain parameters as normal text elements that are replaced. Those parameters have the form ${ParamName}
.
This renderer also supports arbitrary MessageFormat
patterns for all input parameters; for example ${Now,date,short}
will effectively be interpreted as MessageFormat {0,date,short}
with the single parameter Now
from the parameter map. For more information about MessageFormat, please consult the MessageFormat javadoc.
There are multiple predefined properties that are always added to the parameter map:
${ListId}
contains the token list's ID${DateString}
contains the current date already formatted as string${Now}
contains the current date as Date object${ExpirationDate}
contains the token list's expiration date already formatted as string${ExpirationDateObject}
contains the token list's expiration date as Date object${ListGenerationDate}
contains the token list's generation date as Date object${NumberOfTokens}
contains the total number of tokens in the current list${T*}
contains a single token value, where*
is an integer starting at zero. So the first token value will always be${T0}
whereas the 100th token will be${T99}
Some of the above parameters contain a timestamp and can be used for both date and time display. Since this represents a Date
object, it can be formatted directly using MessageFormat, for example:${Now,date,short}
displays a short date using the user's locale; for example: 09.01.12
.
Alternatively, a date format can be specified in a SimpleDateFormat
compatible form, for example:${Now,date,dd.MM.yyyy}
resulting in 09.01.2012
.
This token list renderer allows to pass arbitrary parameters to the conversion engine: the parameter map passed to the renderTokenList()
method is forwarded to the report engine. Thus, when placing the parameter Salutation
with value "Dear Mr. Smith" into the parameter map when calling this renderer, you can display this value in the document using ${Salutation}
.
Adding images is also supported by adding an instance of BufferedImage
to the parameter map. This image replaces the entire text node where the parameter was found and is inserted as an inline image. Make sure there's enough place for that image in the template document.
Handling Multiple Languages
You can have this renderer use different documents for rendering depending on a language.There must always be a default template configured which is used if there's no specific template defined for the passed-in language. Additionally you can define a specific template for every language expected.
Templates are read in when the renderer is initialized and are kept in memory by the renderer. Thus, reusing the renderer instance improves efficiency as the document needn't be re-parsed on every call.
tokensPerRow
) It has no influence on the rendered letter; the row labels are generated from the Word template. This property must be adjusted according to the letter design.
This property has no effect when using token lists or indexed lists.
zeroBasedRowIndices
) This property is used to correctly translate the matrix card coordinates back to internal indices. It has no influence on the rendered letter; the row labels are generated from the Word template. This property must be adjusted according to the letter design.
This property has no effect when using token lists or indexed lists.
defaultTemplate
) Supported formats are: DOC, DOCX, RTF and ODF.
The file name is either absolute or relative to the JVMs current directory.
Multiple templates for different languages can be specified with the property template. There must always be a default template.
template
) Selectors must be chosen according to the ISO-2-letter language codes, i.e. "fr" for french.
See also description of default-template.
saveOptions
)
type: com.airlock.iam.core.misc.impl.renderer.WordTemplateTokenListRenderer
id: WordTemplateTokenListRenderer-xxxxxx
displayName:
comment:
properties:
defaultTemplate:
saveOptions:
template:
tokensPerRow: 10
zeroBasedRowIndices: false
XML File Importer Task
Notes on error handling:
- There is no way to roll back changes that have already been applied to the database before an error occurs.
- How the task proceeds in case of an error can be configured with the 'Abort Import On Transformer Error' and 'General Error Handling' settings.
inputDirectory
) processedDirectory
) userStore
) usernameGenerator
) usernamePattern
) userNotLockedAttribute
) userIdentifiers
) This lists the UserInfo attribute names (as seen in the XML file) that are (in combination) unique to a user. So, if an existing user shares all these values with a UserInfo record, the existing user is considered to be the user in the UserInfo and the existing user is processed. If not all these attributes match, a new user is created. The id/keys are mapped to context data keys for comparison. Thus, the values must be contained in the context data container of the existing user.
Users with missing User Identifiers are skipped.
If there are multiple records with identical User Identifiers in the same XML File, the corresponding user is updated multiple times.
requiredUserInfoAttributes
) This lists the mandatory UserInfo attributes that must be present in the XML file to insert/update the user.
Users with missing Required User Info Attributes are skipped.
userInfoMapping
) dataTransformers
) abortImportOnTransformerError
) generalErrorHandling
) - Skip User and continue File Importer Task: Log the error, skip the user and continue with the remaining users.
- Stop XML File Importer Task: Log the error and abort the task.
- Users with missing 'User Identifiers' are skipped.
- Users with missing 'Required User Info Attributes' are skipped.
- Transformer errors are handled according to the 'Abort Import On Transformer Error' setting.
tokenHandlerMapping
) fileVersion
) - VERSION_1_0: The import file contains a single 'command' tag as root element. Only the 'updateusers' command is supported.
- VERSION_2_0: The import file contains a single 'commands' tag as root element, which contains nested 'command' elements. 'updateusers' and 'deleteusers' commands are supported.
orderPasswords
) contextDataUniquenessChecks
) allowDeletingContextData
) warnDeletionSkipped
)
type: com.airlock.iam.servicecontainer.app.application.configuration.task.xmlimporter.XmlFileImporterTask
id: XmlFileImporterTask-xxxxxx
displayName:
comment:
properties:
abortImportOnTransformerError: false
allowDeletingContextData: false
contextDataUniquenessChecks:
dataTransformers:
fileVersion: VERSION_2_0
generalErrorHandling: ABORT
inputDirectory:
orderPasswords: true
processedDirectory:
requiredUserInfoAttributes:
tokenHandlerMapping:
userIdentifiers:
userInfoMapping:
userNotLockedAttribute: valid
userStore:
usernameGenerator:
usernamePattern:
warnDeletionSkipped: true