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: EmailIdentityVerificationStep
id: EmailIdentityVerificationStep-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: