Package net.shibboleth.idp.authn.impl

# Class ExtractUsernamePasswordFromBasicAuth

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.AbstractExtractionAction
net.shibboleth.idp.authn.impl.ExtractUsernamePasswordFromBasicAuth

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

public class ExtractUsernamePasswordFromBasicAuth extends AbstractExtractionAction
/** An action that extracts a username and password from the HTTP `HttpHeaders.AUTHORIZATION` header, creates a `UsernamePasswordContext`, and attaches it to the `AuthenticationContext`.

Event:
  `EventIds.PROCEED_EVENT_ID`, `AuthnEventIds.NO_CREDENTIALS`, `AuthnEventIds.INVALID_CREDENTIALS`
Precondition:

      ProfileRequestContext.getSubcontext(AuthenticationContext.class, false) != null

Postcondition:
  If getHttpServletRequest() != null, the content of the `HttpHeaders.AUTHORIZATION` header is parsed and any correctly-encoded information will be attached via a `UsernamePasswordContext`.

## Field Summary

Fields
Modifier and Type
Field
Description
`private Function<ProfileRequestContext,UsernamePasswordContext>`
`contextCreationStrategy`
Creation strategy for UsernamePasswordContext.
`private final org.slf4j.Logger`
`log`
Class logger.

## Constructor Summary

Constructors
Constructor
Description
`ExtractUsernamePasswordFromBasicAuth()`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`protected Pair<String,String>`
`decodeCredentials(String encodedCredentials)`
Decodes the credential string provided in the HTTP header, splits it in to a username and password, and returns them.
`protected void`
`doExecute(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext)`
Performs this authentication action.
`protected String`
`extractCredentials(HttpServletRequest httpRequest)`
Gets the encoded credentials passed in via the `HttpHeaders.AUTHORIZATION` header.
`void`
`setUsernamePasswordContextCreationStrategy(Function<ProfileRequestContext,UsernamePasswordContext> strategy)`
Sets the creation strategy for the `UsernamePasswordContext`.

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

`applyTransforms, applyTransforms, setLowercase, setTransforms, setTrim, setUppercase, setUsernameRemappingStrategy`

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

`doExecute, doPreExecute, 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, doInitialize, 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.

### contextCreationStrategy

@Nonnull private Function<ProfileRequestContext,UsernamePasswordContext> contextCreationStrategy
Creation strategy for UsernamePasswordContext.

## Constructor Details

### ExtractUsernamePasswordFromBasicAuth

public ExtractUsernamePasswordFromBasicAuth()
Constructor.

## Method Details

### setUsernamePasswordContextCreationStrategy

public void setUsernamePasswordContextCreationStrategy(@Nonnull Function<ProfileRequestContext,UsernamePasswordContext> strategy)
Sets the creation strategy for the `UsernamePasswordContext`.

Parameters:
  `strategy` - creation strategy
Since:
  5.1.3

### 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

### extractCredentials

@Nullable protected String extractCredentials(@Nonnull HttpServletRequest httpRequest)
Gets the encoded credentials passed in via the `HttpHeaders.AUTHORIZATION` header. This method checks to ensure that the authentication scheme is `HttpServletRequest.BASIC_AUTH` and then strips off and returns the follow on Base64-encoded credentials.

Parameters:
  `httpRequest` - current HTTP request
Returns:
  the Base64 encoded credentials, or null

### decodeCredentials

@Nullable protected Pair<String,String> decodeCredentials(@Nonnull @NotEmpty String encodedCredentials)
Decodes the credential string provided in the HTTP header, splits it in to a username and password, and returns them.

Parameters:
  `encodedCredentials` - the Base64 encoded credentials
Returns:
  a pair containing the username and password, respectively, or null