Package net.shibboleth.idp.authn.impl

# Class FinalizeMultiFactorAuthentication

java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
org.opensaml.profile.action.AbstractProfileAction
org.opensaml.profile.action.AbstractConditionalProfileAction
net.shibboleth.idp.profile.AbstractProfileAction
net.shibboleth.idp.authn.AbstractAuthenticationAction
net.shibboleth.idp.authn.impl.FinalizeMultiFactorAuthentication

All Implemented Interfaces:
  `Component`, `DestructableComponent`, `InitializableComponent`, `ProfileAction`, `Aware`, `MessageSource`, `MessageSourceAware`, `Action`

public class FinalizeMultiFactorAuthentication extends AbstractAuthenticationAction
An authentication action that completes MFA by producing a final `AuthenticationResult` out of whatever constituent parts and pieces exist, by means of an overridable function, storing it in the `AuthenticationContext` and preparing a fresh `SubjectCanonicalizationContext` to operate on.

Event:
  `EventIds.PROCEED_EVENT_ID`, `EventIds.INVALID_PROFILE_CTX`, `AuthnEventIds.INVALID_AUTHN_CTX`
Precondition:

      ProfileRequestContext.getSubcontext(AuthenticationContext.class).getSubcontext(
            MultiFactorAuthenticationContext.class) != null

Postcondition:

      ProfileRequestContext.getSubcontext(AuthenticationContext.class).getAuthenticationResult() != null

  ,

      ProfileRequestContext.getSubcontext(SubjectCanonicalizationContext.class) != null

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static class`
`FinalizeMultiFactorAuthentication.DefaultResultMergingStrategy`
Default merging strategy to combine individual `AuthenticationResult` objects into a single result.

## Field Summary

Fields
Modifier and Type
Field
Description
`private final org.slf4j.Logger`
`log`
Class logger.
`private MultiFactorAuthenticationContext`
`mfaContext`
A subordinate `MultiFactorAuthenticationContext`, if any.
`private Function<ProfileRequestContext,MultiFactorAuthenticationContext>`
`multiFactorContextLookupStrategy`
Lookup function for the context to evaluate.
`private Function<ProfileRequestContext,String>`
`requesterLookupStrategy`
Function used to obtain the requester ID.
`private Function<ProfileRequestContext,String>`
`responderLookupStrategy`
Function used to obtain the responder ID.
`private Predicate<ProfileRequestContext>`
`resultCachingPredicate`
Predicate to apply when setting AuthenticationResult cacheability.
`private Function<ProfileRequestContext,AuthenticationResult>`
`resultMergingStrategy`
Strategy function to produce a final, merged result.

## Constructor Summary

Constructors
Constructor
Description
`FinalizeMultiFactorAuthentication()`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`protected void`
`doExecute(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext)`
Performs this authentication action.
`protected void`
`doInitialize()`
`protected boolean`
`doPreExecute(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext)`
Performs this authentication action's pre-execute step.
`void`
`setMultiFactorContextLookupStrategy(Function<ProfileRequestContext,MultiFactorAuthenticationContext> strategy)`
Set the lookup strategy to use for the context to evaluate.
`void`
`setRequesterLookupStrategy(Function<ProfileRequestContext,String> strategy)`
Set the strategy used to locate the requester ID for canonicalization.
`void`
`setResponderLookupStrategy(Function<ProfileRequestContext,String> strategy)`
Set the strategy used to locate the responder ID for canonicalization.
`void`
`setResultCachingPredicate(Predicate<ProfileRequestContext> predicate)`
Set predicate to apply to determine cacheability of `AuthenticationResult`.
`void`
`setResultMergingStrategy(Function<ProfileRequestContext,AuthenticationResult> strategy)`
Set the result merging strategy to use.

### Methods inherited from class net.shibboleth.idp.authn.AbstractAuthenticationAction

`doExecute, doPreExecute, setAuthenticationContextLookupStrategy`

### Methods inherited from class net.shibboleth.idp.profile.AbstractProfileAction

`doExecute, execute, getBean, getBean, getMessage, getMessage, getMessage, getParameter, getParameter, getProfileContextLookupStrategy, getRequestContext, getResult, setMessageSource, setProfileContextLookupStrategy`

### Methods inherited from class org.opensaml.profile.action.AbstractConditionalProfileAction

`getActivationCondition, setActivationCondition`

### Methods inherited from class org.opensaml.profile.action.AbstractProfileAction

`doPostExecute, doPostExecute, ensureHttpServletRequest, ensureHttpServletResponse, execute, getHttpServletRequest, getHttpServletRequestSupplier, getHttpServletResponse, getHttpServletResponseSupplier, getLogPrefix, isPreExecuteCalled, setHttpServletRequestSupplier, setHttpServletResponseSupplier`

### Methods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent

`checkComponentActive, checkSetterPreconditions, destroy, doDestroy, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, initialize, isDestroyed, isInitialized`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface net.shibboleth.shared.component.InitializableComponent

`initialize, isInitialized`

## Field Details

### log

@Nonnull private final org.slf4j.Logger log
Class logger.

### multiFactorContextLookupStrategy

@Nonnull private Function<ProfileRequestContext,MultiFactorAuthenticationContext> multiFactorContextLookupStrategy
Lookup function for the context to evaluate.

### resultMergingStrategy

@NonnullAfterInit private Function<ProfileRequestContext,AuthenticationResult> resultMergingStrategy
Strategy function to produce a final, merged result.

### resultCachingPredicate

@Nullable private Predicate<ProfileRequestContext> resultCachingPredicate
Predicate to apply when setting AuthenticationResult cacheability.

### requesterLookupStrategy

@Nullable private Function<ProfileRequestContext,String> requesterLookupStrategy
Function used to obtain the requester ID.

### responderLookupStrategy

@Nullable private Function<ProfileRequestContext,String> responderLookupStrategy
Function used to obtain the responder ID.

### mfaContext

@NonnullBeforeExec private MultiFactorAuthenticationContext mfaContext
A subordinate `MultiFactorAuthenticationContext`, if any.

## Constructor Details

### FinalizeMultiFactorAuthentication

public FinalizeMultiFactorAuthentication()
Constructor.

## Method Details

### setMultiFactorContextLookupStrategy

public void setMultiFactorContextLookupStrategy(@Nonnull Function<ProfileRequestContext,MultiFactorAuthenticationContext> strategy)
Set the lookup strategy to use for the context to evaluate.

Parameters:
  `strategy` - lookup strategy

### setResultMergingStrategy

public void setResultMergingStrategy(@Nullable Function<ProfileRequestContext,AuthenticationResult> strategy)
Set the result merging strategy to use.

Parameters:
  `strategy` - result merging strategy

### setResultCachingPredicate

public void setResultCachingPredicate(@Nullable Predicate<ProfileRequestContext> predicate)
Set predicate to apply to determine cacheability of `AuthenticationResult`.

Parameters:
  `predicate` - predicate to apply, or null

### setRequesterLookupStrategy

public void setRequesterLookupStrategy(@Nullable Function<ProfileRequestContext,String> strategy)
Set the strategy used to locate the requester ID for canonicalization.

Parameters:
  `strategy` - lookup strategy

### setResponderLookupStrategy

public void setResponderLookupStrategy(@Nullable Function<ProfileRequestContext,String> strategy)
Set the strategy used to locate the responder ID for canonicalization.

Parameters:
  `strategy` - lookup strategy

### doInitialize

protected void doInitialize() throws ComponentInitializationException

Overrides:
  `doInitialize` in class `AbstractInitializableComponent`
Throws:
  `ComponentInitializationException`

### doPreExecute

protected boolean doPreExecute(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext)
Performs this authentication action's pre-execute step. Default implementation just returns true.

Overrides:
  `doPreExecute` in class `AbstractAuthenticationAction`
Parameters:
  `profileRequestContext` - the current IdP profile request context
  `authenticationContext` - the current authentication context
Returns:
  true iff execution should continue

### doExecute

protected void doExecute(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext)
Performs this authentication action. Default implementation throws an exception.

Overrides:
  `doExecute` in class `AbstractAuthenticationAction`
Parameters:
  `profileRequestContext` - the current IdP profile request context
  `authenticationContext` - the current authentication context