New here - OpenSAML and conditions/audience restrictions problem

o haya ohaya at yahoo.com
Fri Feb 15 14:55:06 EST 2019


Hi,

I am just getting started with OpenSAML, and using Java and OpenSAML 2.6.6 and writing a small app to generate a SAML assertion.  The assertion that I am trying to generate needs to have  <Conditions> and in particular, I need to include an AudienceRestriction.

I have code now that, in fact does add the <Conditions>, but I am ending up with two <saml:AudienceRestriction> elements. 

One of them has the URI I want, but the other is empty, e.g.:

<saml2:Conditions NotOnOrAfter="2019-02-15T19:27:56.620Z" NotBefore="2019-02-15T19:27:56.603Z">
    <saml2:AudienceRestriction/>
    <saml2:AudienceRestriction>
        <saml2:Audience>https://sandboxdtm01.xxx.dev/fed</saml2:Audience>
    </saml2:AudienceRestriction>
</saml2:Conditions>

whereas I think that what I want is (i.e., just the one saml2:AudienceRestriction with the URI):

<saml2:Conditions NotOnOrAfter="2019-02-15T19:27:56.620Z" NotBefore="2019-02-15T19:27:56.603Z">
    <saml2:AudienceRestriction>
        <saml2:Audience>https://sandboxdtm01.xxx.dev/fed</saml2:Audience>
    </saml2:AudienceRestriction>
</saml2:Conditions>

The part of my code that is building that is:

            SAMLObjectBuilder audienceRestrictionConditionBuilder = (SAMLObjectBuilder) SAMLWriter.getSAMLBuilder().getBuilder(AudienceRestriction.DEFAULT_ELEMENT_NAME);
            Condition condition = (Condition) audienceRestrictionConditionBuilder.buildObject();

            SAMLObjectBuilder conditionsBuilder = (SAMLObjectBuilder) SAMLWriter.getSAMLBuilder().getBuilder(Conditions.DEFAULT_ELEMENT_NAME);
            Conditions conditions = (Conditions) conditionsBuilder.buildObject();
            conditions.getConditions().add(condition);
            // add notBefore and notOnOrAfter to the Conditions
            conditions.setNotBefore(now);
            conditions.setNotOnOrAfter(now2);
            
            // From: https://www.programcreek.com/java-api-examples/?code=mwdb/OA2C/OA2C-master/OAuth2Client_Java/src/com/sap/security/oa2/LocalSamlTokenFactory.java
            // try add audience - from Example 6 at https://www.programcreek.com/java-api-examples/?api=org.opensaml.saml2.core.AudienceRestriction
            SAMLObjectBuilder audienceRestrictionnBuilder = null;
            SAMLObjectBuilder audienceBuilder = null;
            audienceRestrictionnBuilder = (SAMLObjectBuilder) getSAMLBuilder().getBuilder(AudienceRestriction.DEFAULT_ELEMENT_NAME);
    	    audienceBuilder = (SAMLObjectBuilder) getSAMLBuilder().getBuilder(Audience.DEFAULT_ELEMENT_NAME);
            String audienceURI = "https://sandboxdtm01.xxx.dev/fed";
            
        	// Create the audience
        	Audience audience = (Audience) audienceBuilder.buildObject();
        	audience.setAudienceURI(audienceURI);

        	// Create the audience restriction
        	AudienceRestriction audienceRestriction = (AudienceRestriction) audienceRestrictionnBuilder.buildObject();

        	// add in the audience
        	audienceRestriction.getAudiences().add(audience);
        	conditions.getAudienceRestrictions().add(audienceRestriction);

It seems like just instantiating the builder is making the empty saml2:AudienceRestriction, but I don't know how to make an "empty" builder?

Can someone tell me how I should be/can do that?

Thanks,
Jim


More information about the dev mailing list