Package net.shibboleth.idp.saml.saml2.profile.impl

# Class AddAuthnRequest

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.saml.saml2.profile.impl.AddAuthnRequest

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

public class AddAuthnRequest extends AbstractAuthenticationAction
Action that creates an `AuthnRequest` and sets it as the message returned by `InOutOperationContext.getOutboundMessageContext()`.

If an issuer value is returned via a lookup strategy, then it's set as the Issuer of the message.

Various other values are derived from the active configuration such as `RequestedAuthnContext`, `NameIDPolicy`, and `Scoping`.

Event:
  `EventIds.PROCEED_EVENT_ID`, `EventIds.INVALID_MSG_CTX`, `EventIds.INVALID_PROFILE_CTX`, `IdPEventIds.INVALID_PROFILE_CONFIG`
Postcondition:
  ProfileRequestContext.getOutboundMessageContext().getMessage() != null

## Field Summary

Fields
Modifier and Type
Field
Description
`private boolean`
`convertUnknownRequestedPrincipals`
Convert requested principals of unknown types into SAML AC classes.
`private IdentifierGenerationStrategy`
`idGenerator`
The generator to use.
`private Function<ProfileRequestContext,IdentifierGenerationStrategy>`
`idGeneratorLookupStrategy`
Strategy used to locate the `IdentifierGenerationStrategy` to use.
`private String`
`issuerId`
EntityID to populate into Issuer element.
`private Function<ProfileRequestContext,String>`
`issuerLookupStrategy`
Strategy used to obtain the request issuer value.
`private org.slf4j.Logger`
`log`
Class logger.
`private Function<ProfileRequestContext,NameID>`
`nameIDLookupStrategy`
Optional strategy to populate request with a `NameID`.
`private boolean`
`overwriteExisting`
Overwrite an existing message?
`private BrowserSSOProfileConfiguration`
`profileConfiguration`
Applicable profile configuration.
`private Function<ProfileRequestContext,ProxiedRequesterContext>`
`proxiedRequesterContextLookupStrategy`
Strategy used to obtain the proxied requester context.
`private Function<ProfileRequestContext,String>`
`requesterLookupStrategy`
Strategy used to obtain the original requester value.

## Constructor Summary

Constructors
Constructor
Description
`AddAuthnRequest()`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`private Extensions`
`buildExtensions(ProfileRequestContext profileRequestContext)`
Build `RequestedAttributes` extension if required.
`private RequestedAuthnContext`
`buildRequestedAuthnContext(ProfileRequestContext profileRequestContext)`
Build a `RequestedAuthnContext` if warranted.
`private Scoping`
`buildScoping(ProfileRequestContext profileRequestContext, Integer count, Set<String> idplist)`
Build a `Scoping` element, decrementing the proxy count if set.
`private Subject`
`buildSubject(ProfileRequestContext profileRequestContext)`
Build a `Subject` element if necessary.
`protected void`
`doExecute(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext)`
Performs this authentication action.
`protected boolean`
`doPreExecute(ProfileRequestContext profileRequestContext, AuthenticationContext authenticationContext)`
Performs this authentication action's pre-execute step.
`void`
`setConvertUnknownRequestedPrincipals(boolean flag)`
Sets whether to convert unknown/non-SAML `Principal` objects returned for use in the `RequestedAuthnContext` population step into SAML `AuthnContextClassRef` values.
`void`
`setIdentifierGeneratorLookupStrategy(Function<ProfileRequestContext,IdentifierGenerationStrategy> strategy)`
Set the strategy used to locate the `IdentifierGenerationStrategy` to use.
`void`
`setIssuerLookupStrategy(Function<ProfileRequestContext,String> strategy)`
Set the strategy used to locate the issuer value to use.
`void`
`setNameIDLookupStrategy(Function<ProfileRequestContext,NameID> strategy)`
Set optional strategy to derive a `NameID` to populate into the `AuthnRequest`'s `Subject` element.
`void`
`setOverwriteExisting(boolean flag)`
Set whether to overwrite an existing message.
`void`
`setProxiedRequesterContextLookupStrategy(Function<ProfileRequestContext,ProxiedRequesterContext> strategy)`
Set the strategy used to locate the `ProxiedRequesterContext` to use for the Scoping element's `RequesterID` values.
`void`
`setRequesterLookupStrategy(Function<ProfileRequestContext,String> strategy)`
Set the strategy used to locate the requester value to use for the Scoping element's `RequesterID` value.

### 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, 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 org.slf4j.Logger log
Class logger.

### overwriteExisting

private boolean overwriteExisting
Overwrite an existing message?

### idGeneratorLookupStrategy

@Nonnull private Function<ProfileRequestContext,IdentifierGenerationStrategy> idGeneratorLookupStrategy
Strategy used to locate the `IdentifierGenerationStrategy` to use.

### issuerLookupStrategy

@Nullable private Function<ProfileRequestContext,String> issuerLookupStrategy
Strategy used to obtain the request issuer value.

### requesterLookupStrategy

@Nonnull private Function<ProfileRequestContext,String> requesterLookupStrategy
Strategy used to obtain the original requester value.

### proxiedRequesterContextLookupStrategy

@Nonnull private Function<ProfileRequestContext,ProxiedRequesterContext> proxiedRequesterContextLookupStrategy
Strategy used to obtain the proxied requester context.

### nameIDLookupStrategy

@Nullable private Function<ProfileRequestContext,NameID> nameIDLookupStrategy
Optional strategy to populate request with a `NameID`.

### convertUnknownRequestedPrincipals

private boolean convertUnknownRequestedPrincipals
Convert requested principals of unknown types into SAML AC classes.

### idGenerator

@NonnullBeforeExec private IdentifierGenerationStrategy idGenerator
The generator to use.

### profileConfiguration

@NonnullBeforeExec private BrowserSSOProfileConfiguration profileConfiguration
Applicable profile configuration.

### issuerId

@Nullable private String issuerId
EntityID to populate into Issuer element.

## Constructor Details

### AddAuthnRequest

public AddAuthnRequest()
Constructor.

## Method Details

### setConvertUnknownRequestedPrincipals

public void setConvertUnknownRequestedPrincipals(boolean flag)
Sets whether to convert unknown/non-SAML `Principal` objects returned for use in the `RequestedAuthnContext` population step into SAML `AuthnContextClassRef` values.

Defaults to false.

Parameters:
  `flag` - flag to set
Since:
  5.1.0

### setOverwriteExisting

public void setOverwriteExisting(boolean flag)
Set whether to overwrite an existing message.

Parameters:
  `flag` - flag to set

### setIdentifierGeneratorLookupStrategy

public void setIdentifierGeneratorLookupStrategy(@Nonnull Function<ProfileRequestContext,IdentifierGenerationStrategy> strategy)
Set the strategy used to locate the `IdentifierGenerationStrategy` to use.

Parameters:
  `strategy` - lookup strategy

### setIssuerLookupStrategy

public void setIssuerLookupStrategy(@Nullable Function<ProfileRequestContext,String> strategy)
Set the strategy used to locate the issuer value to use.

Parameters:
  `strategy` - lookup strategy

### setRequesterLookupStrategy

public void setRequesterLookupStrategy(@Nonnull Function<ProfileRequestContext,String> strategy)
Set the strategy used to locate the requester value to use for the Scoping element's `RequesterID` value.

Parameters:
  `strategy` - lookup strategy
Since:
  4.3.0

### setProxiedRequesterContextLookupStrategy

public void setProxiedRequesterContextLookupStrategy(@Nonnull Function<ProfileRequestContext,ProxiedRequesterContext> strategy)
Set the strategy used to locate the `ProxiedRequesterContext` to use for the Scoping element's `RequesterID` values.

Parameters:
  `strategy` - lookup strategy
Since:
  4.3.0

### setNameIDLookupStrategy

public void setNameIDLookupStrategy(@Nullable Function<ProfileRequestContext,NameID> strategy)
Set optional strategy to derive a `NameID` to populate into the `AuthnRequest`'s `Subject` element.

Parameters:
  `strategy` - lookup strategy
Since:
  5.0.0

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

### buildRequestedAuthnContext

@Nullable private RequestedAuthnContext buildRequestedAuthnContext(@Nullable ProfileRequestContext profileRequestContext)
Build a `RequestedAuthnContext` if warranted.

Parameters:
  `profileRequestContext` - current profile request context
Returns:
  the object to include in the request, or null

### buildSubject

@Nullable private Subject buildSubject(@Nonnull ProfileRequestContext profileRequestContext)
Build a `Subject` element if necessary.

Parameters:
  `profileRequestContext` - profile request context
Returns:
  the `Subject` element to include
Since:
  5.0.0

### buildScoping

@Nullable private Scoping buildScoping(@Nonnull ProfileRequestContext profileRequestContext, @Nullable Integer count, @Nonnull Set<String> idplist)
Build a `Scoping` element, decrementing the proxy count if set.

Parameters:
  `profileRequestContext` - current profile request context
  `count` - proxy count
  `idplist` - list of IdP entityIDs
Returns:
  populated `Scoping`

### buildExtensions

@Nullable private Extensions buildExtensions(@Nonnull ProfileRequestContext profileRequestContext)
Build `RequestedAttributes` extension if required.

Parameters:
  `profileRequestContext` - current profile request context
Returns:
  extension or null