Class SelectAuthenticationFlow
- All Implemented Interfaces:
Component,DestructableComponent,InitializableComponent,ProfileAction,Aware,MessageSource,MessageSourceAware,Action
This is the heart of the authentication processing sequence, and runs after the
AuthenticationContext has been fully populated. It uses the potential flows,
the RequestedPrincipalContext (if any), and the active results, to decide how
to proceed.
Normal processing behavior can be circumvented if AuthenticationContext.getSignaledFlowId()
is set, which causes an active result from that flow to be reused, or that flow to be invoked, if at
all possible, subject to the usual predicates and requested principal constraints noted below.
Otherwise, if there is no RequestedPrincipalContext, then an active result will be
reused, unless the request requires forced authentication. If not possible, then a potential
flow will be selected and its ID returned as the result of the action.
If there are requested principals, then the results or flows chosen must "match" the
request information according to the PrincipalEvalPredicateFactoryRegistry
attached to the context. The "favorSSO" option determines whether to select a flow specifically
in the order specified by the RequestedPrincipalContext, or to favor an active but matching result
over a new flow. Forced authentication trumps the use of any active result.
- Event:
EventIds.PROCEED_EVENT_ID(reuse of a result, i.e., SSO),AuthnEventIds.NO_PASSIVE,AuthnEventIds.NO_POTENTIAL_FLOW,AuthnEventIds.REQUEST_UNSUPPORTED, Selected flow ID to execute- Precondition:
ProfileRequestContext.getSubcontext(AuthenticationContext.class) != null
, The content ofAuthenticationContext.getPotentialFlows()are assumed to be acceptable with respect to passive and forced authentication requirements, etc.- Postcondition:
- If a result is reused,
AuthenticationContext.getAuthenticationResult()will return that result. Otherwise,AuthenticationContext.getAttemptedFlow()will return the flow selected for execution and returned as an event.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate booleanWhether SSO trumps explicit relying party flow preference.private final org.slf4j.LoggerClass logger.private booleanTracks a proxy count of zero for the request.private PreferredPrincipalContextA subordinate PreferredPrincipalContext, if any.private RequestedPrincipalContextA subordinate RequestedPrincipalContext, if any. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voiddoExecute(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext) Performs this authentication action.protected booleandoPreExecute(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext) Performs this authentication action's pre-execute step.private voiddoSelectNoRequestedPrincipals(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext) Executes the selection process in the absence of specific requested principals.private voiddoSelectRequestedPrincipals(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext) Executes the selection process in the presence of specific requested Principals, requiring evaluation of potential flows and results for Principal-compatibility with request.private voiddoSelectSignaledFlow(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext) Executes the selection process in the presence of an explicit flow signal.booleanGet whether SSO should trump explicit relying party requirements preference.private AuthenticationFlowDescriptorgetUnattemptedInactiveFlow(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext) Return the first inactive potential flow not found in the intermediate flows collection that applies to the request.private voidselectActiveResult(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext, AuthenticationResult result) Selects an active result and completes processing.private voidselectInactiveFlow(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext, AuthenticationFlowDescriptor descriptor) Selects an inactive flow and completes processing.private voidselectRequestedFlow(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext, Map<String, AuthenticationResult> activeResults) Selects a flow or an active result in the presence of specific requested Principals and completes processing.private voidselectRequestedInactiveFlow(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext) Selects an inactive flow in the presence of specific requested Principals, and completes processing.voidsetFavorSSO(boolean flag) Set whether SSO should trump explicit relying party requirements preference.Methods inherited from class net.shibboleth.idp.authn.AbstractAuthenticationAction
doExecute, doPreExecute, setAuthenticationContextLookupStrategyMethods inherited from class net.shibboleth.idp.profile.AbstractProfileAction
doExecute, execute, getBean, getBean, getMessage, getMessage, getMessage, getParameter, getParameter, getProfileContextLookupStrategy, getRequestContext, getResult, setMessageSource, setProfileContextLookupStrategyMethods inherited from class org.opensaml.profile.action.AbstractConditionalProfileAction
getActivationCondition, setActivationConditionMethods inherited from class org.opensaml.profile.action.AbstractProfileAction
doPostExecute, doPostExecute, ensureHttpServletRequest, ensureHttpServletResponse, execute, getHttpServletRequest, getHttpServletRequestSupplier, getHttpServletResponse, getHttpServletResponseSupplier, getLogPrefix, isPreExecuteCalled, setHttpServletRequestSupplier, setHttpServletResponseSupplierMethods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent
checkComponentActive, checkSetterPreconditions, destroy, doDestroy, doInitialize, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentException, initialize, isDestroyed, isInitializedMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface net.shibboleth.shared.component.InitializableComponent
initialize, isInitialized
-
Field Details
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
favorSSO
private boolean favorSSOWhether SSO trumps explicit relying party flow preference. -
requestedPrincipalCtx
A subordinate RequestedPrincipalContext, if any. -
preferredPrincipalCtx
A subordinate PreferredPrincipalContext, if any. -
noProxying
private boolean noProxyingTracks a proxy count of zero for the request.
-
-
Constructor Details
-
SelectAuthenticationFlow
public SelectAuthenticationFlow()
-
-
Method Details
-
getFavorSSO
public boolean getFavorSSO()Get whether SSO should trump explicit relying party requirements preference.- Returns:
- whether SSO should trump explicit relying party requirements preference
-
setFavorSSO
public void setFavorSSO(boolean flag) Set whether SSO should trump explicit relying party requirements preference.- Parameters:
flag- whether SSO should trump explicit relying party requirements preference
-
doPreExecute
protected boolean doPreExecute(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext) Performs this authentication action's pre-execute step. Default implementation just returns true.- Overrides:
doPreExecutein classAbstractAuthenticationAction- Parameters:
profileRequestContext- the current IdP profile request contextauthenticationContext- 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:
doExecutein classAbstractAuthenticationAction- Parameters:
profileRequestContext- the current IdP profile request contextauthenticationContext- the current authentication context
-
doSelectSignaledFlow
private void doSelectSignaledFlow(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext) Executes the selection process in the presence of an explicit flow signal.- Parameters:
profileRequestContext- the current IdP profile request contextauthenticationContext- the current authentication context
-
doSelectNoRequestedPrincipals
private void doSelectNoRequestedPrincipals(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext) Executes the selection process in the absence of specific requested principals.- Parameters:
profileRequestContext- the current IdP profile request contextauthenticationContext- the current authentication context
-
getUnattemptedInactiveFlow
@Nullable private AuthenticationFlowDescriptor getUnattemptedInactiveFlow(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext) Return the first inactive potential flow not found in the intermediate flows collection that applies to the request.- Parameters:
profileRequestContext- the current profile request contextauthenticationContext- the current authentication context- Returns:
- an eligible flow, or null
-
selectInactiveFlow
private void selectInactiveFlow(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext, @Nonnull AuthenticationFlowDescriptor descriptor) Selects an inactive flow and completes processing.- Parameters:
profileRequestContext- the current IdP profile request contextauthenticationContext- the current authentication contextdescriptor- the flow to select
-
selectActiveResult
private void selectActiveResult(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext, @Nonnull AuthenticationResult result) Selects an active result and completes processing.- Parameters:
profileRequestContext- the current IdP profile request contextauthenticationContext- the current authentication contextresult- the result to reuse
-
doSelectRequestedPrincipals
private void doSelectRequestedPrincipals(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext) Executes the selection process in the presence of specific requested Principals, requiring evaluation of potential flows and results for Principal-compatibility with request.- Parameters:
profileRequestContext- the current IdP profile request contextauthenticationContext- the current authentication context
-
selectRequestedInactiveFlow
private void selectRequestedInactiveFlow(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext) Selects an inactive flow in the presence of specific requested Principals, and completes processing.- Parameters:
profileRequestContext- the current IdP profile request contextauthenticationContext- the current authentication context
-
selectRequestedFlow
private void selectRequestedFlow(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext, @Nonnull Map<String, AuthenticationResult> activeResults) Selects a flow or an active result in the presence of specific requested Principals and completes processing.- Parameters:
profileRequestContext- the current IdP profile request contextauthenticationContext- the current authentication contextactiveResults- active results that may be reused
-