[java-identity-provider COMMIT] /trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/Populat...

noreply at shibboleth.net noreply at shibboleth.net
Mon Jun 2 11:41:07 EDT 2014


Author: scantor
Date: Mon Jun  2 11:41:07 2014
New Revision: 6023

URL: http://svn.shibboleth.net/view/java-identity-provider?rev=6023&view=rev
Log:
Add override when the requester specifically asks for NameID encryption.

Modified:
    trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/PopulateEncryptionParameters.java

Modified: trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/PopulateEncryptionParameters.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/PopulateEncryptionParameters.java?rev=6023&r1=6022&r2=6023&view=diff
==============================================================================
--- trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/PopulateEncryptionParameters.java (original)
+++ trunk/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/saml2/profile/impl/PopulateEncryptionParameters.java Mon Jun  2 11:41:07 2014
@@ -27,12 +27,15 @@
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
+import org.opensaml.profile.context.navigate.InboundMessageContextLookup;
 import org.opensaml.profile.context.navigate.OutboundMessageContextLookup;
 import org.opensaml.saml.common.messaging.context.SAMLMetadataContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.criterion.EntityRoleCriterion;
 import org.opensaml.saml.criterion.ProtocolCriterion;
 import org.opensaml.saml.criterion.RoleDescriptorCriterion;
+import org.opensaml.saml.saml2.core.AuthnRequest;
+import org.opensaml.saml.saml2.core.NameID;
 import org.opensaml.saml.saml2.profile.context.EncryptionContext;
 import org.opensaml.xmlsec.EncryptionConfiguration;
 import org.opensaml.xmlsec.EncryptionParameters;
@@ -55,6 +58,7 @@
 
 import org.opensaml.core.criterion.EntityIdCriterion;
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
+import org.opensaml.messaging.context.navigate.MessageLookup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -83,6 +87,9 @@
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(PopulateEncryptionParameters.class);
+
+    /** Strategy used to locate the {@link AuthnRequest} to operate on, if any. */
+    @Nonnull private Function<ProfileRequestContext,AuthnRequest> requestLookupStrategy;
     
     /** Strategy used to look up a {@link RelyingPartyContext} for configuration options. */
     @Nonnull private Function<ProfileRequestContext,RelyingPartyContext> relyingPartyContextLookupStrategy;
@@ -126,6 +133,9 @@
      * Initializes {@link #messageMetadataContextLookupStrategy} to {@link ChildContextLookup}.
      */
     public PopulateEncryptionParameters() {
+        
+        requestLookupStrategy =
+                Functions.compose(new MessageLookup<>(AuthnRequest.class), new InboundMessageContextLookup());
         
         relyingPartyContextLookupStrategy = new ChildContextLookup<>(RelyingPartyContext.class);
         
@@ -138,6 +148,17 @@
         peerContextLookupStrategy =
                 Functions.compose(new ChildContextLookup<>(SAMLPeerEntityContext.class),
                         new OutboundMessageContextLookup());
+    }
+    
+    /**
+     * Set the strategy used to locate the {@link AuthnRequest} to examine, if any.
+     * 
+     * @param strategy strategy used to locate the {@link AuthnRequest}
+     */
+    public void setRequestLookupStrategy(@Nonnull final Function<ProfileRequestContext,AuthnRequest> strategy) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+
+        requestLookupStrategy = Constraint.isNotNull(strategy, "AuthnRequest lookup strategy cannot be null");
     }
     
     /**
@@ -238,6 +259,7 @@
         }
     }
     
+// Checkstyle: CyclomaticComplexity OFF
     /** {@inheritDoc} */
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
@@ -258,16 +280,28 @@
         
         final SAML2ProfileConfiguration profileConfiguration = (SAML2ProfileConfiguration) rpContext.getProfileConfig();
         
+        final AuthnRequest request = requestLookupStrategy.apply(profileRequestContext);
+        if (request != null && request.getNameIDPolicy() != null) {
+            final String requestedFormat = request.getNameIDPolicy().getFormat();
+            if (requestedFormat != null && NameID.ENCRYPTED.equals(requestedFormat)) {
+                log.debug("{} Request asked for encrypted identifier, disregarding installed predicate");
+                encryptIdentifiers = true;
+            }
+        }
+
+        if (!encryptIdentifiers) {
+            encryptIdentifiers = profileConfiguration.getEncryptNameIDsPredicate().apply(profileRequestContext);
+            // Encryption can only be optional if the request didn't specify it above.

[... 25 lines stripped ...]


More information about the commits mailing list