Class ValidateDuoAuthAPI
java.lang.Object
net.shibboleth.utilities.java.support.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.AbstractValidationAction
net.shibboleth.idp.authn.duo.impl.ValidateDuoAuthAPI
- All Implemented Interfaces:
PrincipalSupportingComponent
,Component
,DestructableComponent
,InitializableComponent
,ProfileAction
,Aware
,MessageSource
,MessageSourceAware
,Action
An action that checks for a
DuoAuthenticationContext
and directly produces an
AuthenticationResult
based on that identity by authenticating against the Duo
AuthAPI.- Event:
EventIds.PROCEED_EVENT_ID
,AuthnEventIds.AUTHN_EXCEPTION
,AuthnEventIds.ACCOUNT_LOCKED
,AuthnEventIds.ACCOUNT_WARNING
,AuthnEventIds.ACCOUNT_ERROR
,AuthnEventIds.NO_CREDENTIALS
,AuthnEventIds.INVALID_CREDENTIALS
- Precondition:
ProfileRequestContext.getSubcontext(AuthenticationContext.class).getAttemptedFlow() != null
- Postcondition:
- If AuthenticationContext.getSubcontext(DuoAuthenticationContext.class) != null, then an
AuthenticationResult
is saved to theAuthenticationContext
on a successful login. On a failed login, theAbstractValidationAction.handleError(ProfileRequestContext, AuthenticationContext, String, String)
method is called.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate DuoAuthAuthenticator
Implementation of Duo AuthApi /auth endpoint.private static final String
Default prefix for metrics.private DuoAuthenticationContext
DuoApi context for tokens.private DuoIntegration
Duo integration to use.private Function<ProfileRequestContext,
DuoIntegration> Lookp strategy for Duo integration.private final org.slf4j.Logger
Class logger.private DuoPreauthAuthenticator
Implementation of Duo AuthApi /preauth enpoint.private String
Attempted username.private Function<ProfileRequestContext,
String> Lookup strategy for username to match against Duo identity. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void
buildAuthenticationResult
(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext) Normally called upon successful completion of credential validation, calls theAbstractValidationAction.populateSubject(Subject)
abstract method, stores anAuthenticationResult
in theAuthenticationContext
, and attaches aSubjectCanonicalizationContext
to theProfileRequestContext
in preparation for c14n to occur.protected void
doExecute
(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext) Performs this authentication action.protected void
protected boolean
doPreExecute
(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext) Performs this authentication action's pre-execute step.protected Subject
populateSubject
(Subject subject) void
setAuthAuthenticator
(DuoAuthAuthenticator authenticator) Set theDuoAuthAuthenticator
.void
Set DuoIntegration details to use directly.void
Set DuoIntegration lookup strategy to use.void
setPreauthAuthenticator
(DuoPreauthAuthenticator authenticator) Set theDuoPreauthAuthenticator
.void
Set the lookup strategy to use for the username to match against Duo identity.Methods inherited from class net.shibboleth.idp.authn.AbstractValidationAction
addDefaultPrincipals, getClassifiedErrors, getCleanupHook, getMetricName, getRequesterLookupStrategy, getResponderLookupStrategy, getResultCachingPredicate, getSubject, getSupportedPrincipals, handleError, handleError, handleWarning, recordFailure, recordFailure, recordSuccess, recordSuccess, setAddDefaultPrincipals, setClassifiedMessages, setCleanupHook, setMetricName, setRequesterLookupStrategy, setResponderLookupStrategy, setResultCachingPredicate, setSupportedPrincipals
Methods inherited from class net.shibboleth.idp.authn.AbstractAuthenticationAction
doExecute, doPreExecute, setAuthenticationContextLookupStrategy
Methods inherited from class net.shibboleth.idp.profile.AbstractProfileAction
doExecute, execute, getMessage, getMessage, getMessage, 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, execute, getHttpServletRequest, getHttpServletResponse, getLogPrefix, setHttpServletRequest, setHttpServletResponse
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
destroy, doDestroy, 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.utilities.java.support.component.InitializableComponent
initialize, isInitialized
-
Field Details
-
DEFAULT_METRIC_NAME
Default prefix for metrics.- See Also:
-
log
Class logger. -
duoIntegrationLookupStrategy
Lookp strategy for Duo integration. -
usernameLookupStrategy
Lookup strategy for username to match against Duo identity. -
authAuthenticator
Implementation of Duo AuthApi /auth endpoint. -
preauthAuthenticator
Implementation of Duo AuthApi /preauth enpoint. -
duoContext
DuoApi context for tokens. -
duoIntegration
Duo integration to use. -
username
Attempted username.
-
-
Constructor Details
-
ValidateDuoAuthAPI
public ValidateDuoAuthAPI()Constructor.
-
-
Method Details
-
setDuoIntegrationLookupStrategy
public void setDuoIntegrationLookupStrategy(@Nonnull Function<ProfileRequestContext, DuoIntegration> strategy) Set DuoIntegration lookup strategy to use.- Parameters:
strategy
- lookup strategy
-
setDuoIntegration
Set DuoIntegration details to use directly.- Parameters:
duo
- Duo integration details
-
setUsernameLookupStrategy
Set the lookup strategy to use for the username to match against Duo identity.- Parameters:
strategy
- lookup strategy
-
setAuthAuthenticator
Set theDuoAuthAuthenticator
.- Parameters:
authenticator
- a Duo AuthAPI /auth endpoint implementation
-
setPreauthAuthenticator
Set theDuoPreauthAuthenticator
.- Parameters:
authenticator
- a Duo AuthAPI /preauth endpoint implementation
-
doInitialize
- Overrides:
doInitialize
in classAbstractInitializableComponent
- 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 classAbstractValidationAction
- 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:
doExecute
in classAbstractAuthenticationAction
- Parameters:
profileRequestContext
- the current IdP profile request contextauthenticationContext
- the current authentication context
-
populateSubject
Subclasses must override this method to complete the population of theSubject
withPrincipal
and credential information based on the validation they perform.Typically this will include attaching a
UsernamePrincipal
, but this is not a requirement if other components are suitably overridden.- Specified by:
populateSubject
in classAbstractValidationAction
- Parameters:
subject
- subject to populate- Returns:
- the input subject
-
buildAuthenticationResult
protected void buildAuthenticationResult(@Nonnull ProfileRequestContext profileRequestContext, @Nonnull AuthenticationContext authenticationContext) Normally called upon successful completion of credential validation, calls theAbstractValidationAction.populateSubject(Subject)
abstract method, stores anAuthenticationResult
in theAuthenticationContext
, and attaches aSubjectCanonicalizationContext
to theProfileRequestContext
in preparation for c14n to occur.- Overrides:
buildAuthenticationResult
in classAbstractValidationAction
- Parameters:
profileRequestContext
- the current profile request contextauthenticationContext
- the current authentication context
-