Class ComputedPairwiseIdStore
- All Implemented Interfaces:
PairwiseIdStore
,Component
,DestructableComponent
,InitializableComponent
PairwiseIdStore
that generates a pairwise ID by computing the hash of
a given attribute value, the entity ID of the recipient, and a salt.
The salt may be global, or produced by a lookup function, and an exception map may be injected to override those values. The precedence is [map, function, global], and either a global value or function must be supplied.
In this version of the software, the first argument to the salt strategy function will always be null. Future versions will change this.
The original implementation and values in common use relied on base64 encoding of the result, but due to discovery of the lack of appropriate case handling of identifiers by applications, the ability to use base32 has been added to eliminate the possibility of case conflicts.
- Since:
- 4.0.0
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enum
Post-digest encoding types. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate String
JCE digest algorithm name to use.private ComputedPairwiseIdStore.Encoding
The encoding to apply to the digest.Override map to block or re-issue identifiers.(package private) NonnullSupplier<javax.servlet.http.HttpServletRequest>
Servlet request supplier.private final org.slf4j.Logger
Class logger.private byte[]
Default salt used when computing the ID.(package private) BiFunction<ProfileRequestContext,
PairwiseId, String> Optional source of salt for request.static final String
An override trigger to apply to all relying parties. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void
Get the JCE algorithm name of the digest algorithm to use (default is SHA).getBySourceValue
(PairwiseId pid, boolean allowCreate) Populate the pairwise ID field for the input object based on the supplied values.private byte[]
Get the effective salt to apply for a particular principal/RP pair, or null to refuse to generate one.Get the post-digest encoding to use.byte[]
getSalt()
Get the salt used when computing the ID.void
setAlgorithm
(String alg) Set the JCE algorithm name of the digest algorithm to use (default is SHA).void
setEncodedSalt
(String newValue) Set the base64-encoded salt used when computing the ID.void
Set the post-digest encoding to use.void
Install map of exceptions that override standard generation.void
setHttpServletRequestSupplier
(NonnullSupplier<javax.servlet.http.HttpServletRequest> supplier) Sets a supplier for the servlet request by which theProfileRequestContext
can be obtained.void
setSalt
(byte[] newValue) Set the salt used when computing the ID.void
Set the salt used when computing the ID.void
Sets an optional function to use to obtain the salt for the request.Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
destroy, doDestroy, initialize, isDestroyed, isInitialized
-
Field Details
-
WILDCARD_OVERRIDE
An override trigger to apply to all relying parties.- See Also:
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
salt
Default salt used when computing the ID. -
algorithm
JCE digest algorithm name to use. -
encoding
The encoding to apply to the digest. -
exceptionMap
Override map to block or re-issue identifiers. -
saltLookupStrategy
Optional source of salt for request. -
httpServletRequestSupplier
Servlet request supplier.
-
-
Constructor Details
-
ComputedPairwiseIdStore
public ComputedPairwiseIdStore()Constructor.
-
-
Method Details
-
getSalt
Get the salt used when computing the ID.- Returns:
- salt used when computing the ID
-
setSalt
public void setSalt(@Nullable byte[] newValue) Set the salt used when computing the ID.An empty/null input is ignored.
- Parameters:
newValue
- used when computing the ID
-
setSalt
Set the salt used when computing the ID.An empty/null input is ignored.
- Parameters:
newValue
- used when computing the ID
-
setEncodedSalt
Set the base64-encoded salt used when computing the ID.An empty/null input is ignored.
- Parameters:
newValue
- used when computing the ID
-
getAlgorithm
Get the JCE algorithm name of the digest algorithm to use (default is SHA).- Returns:
- JCE message digest algorithm
-
setAlgorithm
Set the JCE algorithm name of the digest algorithm to use (default is SHA).- Parameters:
alg
- JCE message digest algorithm
-
getEncoding
Get the post-digest encoding to use.- Returns:
- encoding
-
setEncoding
Set the post-digest encoding to use.- Parameters:
enc
- encoding
-
setExceptionMap
Install map of exceptions that override standard generation.The map is keyed by principal name (or '*' for all), and the values are a map of relying party to salt overrides. A relying party of '*' applies to all parties. A null mapped value implies that no value should be generated, while a string value is fed into the computation in place of the default salt. Specific rules trump wildcarded rules.
- Parameters:
map
- exceptions to apply
-
setSaltLookupStrategy
public void setSaltLookupStrategy(@Nullable BiFunction<ProfileRequestContext, PairwiseId, String> strategy) Sets an optional function to use to obtain the salt for the request.- Parameters:
strategy
- lookup strategy- Since:
- 4.3.0
-
setHttpServletRequestSupplier
public void setHttpServletRequestSupplier(@Nullable NonnullSupplier<javax.servlet.http.HttpServletRequest> supplier) Sets a supplier for the servlet request by which theProfileRequestContext
can be obtained.- Parameters:
supplier
- request supplier- Since:
- 4.3.0
-
doInitialize
- Overrides:
doInitialize
in classAbstractInitializableComponent
- Throws:
ComponentInitializationException
-
getBySourceValue
@Nullable public PairwiseId getBySourceValue(@Nonnull PairwiseId pid, boolean allowCreate) throws IOException Populate the pairwise ID field for the input object based on the supplied values.The input object must contain values for issuer and recipient entityIDs and the principal name, and the pairwise ID will be populated as applicable on output.
The object returned, if non-null, may be, but does not have to be, the same physical object used as input. The original input object should not be referenced further.
- Specified by:
getBySourceValue
in interfacePairwiseIdStore
- Parameters:
pid
- object to populateallowCreate
- true iff the caller is authorizing the issuance of a new identifier- Returns:
- object for the given inputs or null if none exists
- Throws:
IOException
- if an error occurs accessing the store
-
getEffectiveSalt
Get the effective salt to apply for a particular principal/RP pair, or null to refuse to generate one.- Parameters:
pid
- pairwise ID input- Returns:
- salt to use
-