Java Code Examples for org.apache.wss4j.common.saml.bean.AudienceRestrictionBean#setAudienceURIs()
The following examples show how to use
org.apache.wss4j.common.saml.bean.AudienceRestrictionBean#setAudienceURIs() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: SamlTokenTest.java From cxf with Apache License 2.0 | 5 votes |
@org.junit.Test public void testAudienceRestrictionServiceName() throws Exception { SpringBusFactory bf = new SpringBusFactory(); URL busFile = SamlTokenTest.class.getResource("client.xml"); Bus bus = bf.createBus(busFile.toString()); BusFactory.setDefaultBus(bus); BusFactory.setThreadDefaultBus(bus); URL wsdl = SamlTokenTest.class.getResource("DoubleItSaml.wsdl"); Service service = Service.create(wsdl, SERVICE_QNAME); QName portQName = new QName(NAMESPACE, "DoubleItSaml2TransportPort2"); DoubleItPortType saml2Port = service.getPort(portQName, DoubleItPortType.class); String portNumber = PORT2; if (STAX_PORT.equals(test.getPort())) { portNumber = STAX_PORT2; } updateAddressPort(saml2Port, portNumber); // Create a SAML Token with an AudienceRestrictionCondition ConditionsBean conditions = new ConditionsBean(); List<AudienceRestrictionBean> audienceRestrictions = new ArrayList<>(); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(Collections.singletonList( service.getServiceName().toString())); audienceRestrictions.add(audienceRestriction); conditions.setAudienceRestrictions(audienceRestrictions); SamlCallbackHandler callbackHandler = new SamlCallbackHandler(); callbackHandler.setConditions(conditions); ((BindingProvider)saml2Port).getRequestContext().put( SecurityConstants.SAML_CALLBACK_HANDLER, callbackHandler ); saml2Port.doubleIt(25); }
Example 2
Source File: SAMLSSOResponseValidatorTest.java From cxf with Apache License 2.0 | 5 votes |
@org.junit.Test public void testAudienceRestrictionMultipleValues() throws Exception { SubjectConfirmationDataBean subjectConfirmationData = new SubjectConfirmationDataBean(); subjectConfirmationData.setAddress("http://apache.org"); subjectConfirmationData.setInResponseTo("12345"); subjectConfirmationData.setNotAfter(new DateTime().plusMinutes(5)); subjectConfirmationData.setRecipient("http://recipient.apache.org"); List<String> values = new ArrayList<>(); values.add("http://unknown-service.apache.org"); values.add("http://service.apache.org"); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(values); Response response = createResponse(subjectConfirmationData, Collections.singletonList(audienceRestriction), null); // Validate the Response SAMLSSOResponseValidator validator = new SAMLSSOResponseValidator(); validator.setEnforceAssertionsSigned(false); validator.setIssuerIDP("http://cxf.apache.org/issuer"); validator.setAssertionConsumerURL("http://recipient.apache.org"); validator.setClientAddress("http://apache.org"); validator.setRequestId("12345"); validator.setSpIdentifier("http://service.apache.org"); validator.validateSamlResponse(response, false); }
Example 3
Source File: SAMLSSOResponseValidatorTest.java From cxf with Apache License 2.0 | 5 votes |
@org.junit.Test public void testBadAudienceRestriction() throws Exception { SubjectConfirmationDataBean subjectConfirmationData = new SubjectConfirmationDataBean(); subjectConfirmationData.setAddress("http://apache.org"); subjectConfirmationData.setInResponseTo("12345"); subjectConfirmationData.setNotAfter(new DateTime().plusMinutes(5)); subjectConfirmationData.setRecipient("http://recipient.apache.org"); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs( Collections.singletonList("http://unknown-service.apache.org")); Response response = createResponse(subjectConfirmationData, Collections.singletonList(audienceRestriction), null); // Validate the Response SAMLSSOResponseValidator validator = new SAMLSSOResponseValidator(); validator.setEnforceAssertionsSigned(false); validator.setIssuerIDP("http://cxf.apache.org/issuer"); validator.setAssertionConsumerURL("http://recipient.apache.org"); validator.setClientAddress("http://apache.org"); validator.setRequestId("12345"); validator.setSpIdentifier("http://service.apache.org"); try { validator.validateSamlResponse(response, false); fail("Expected failure on bad response"); } catch (WSSecurityException ex) { // expected } }
Example 4
Source File: SAMLResponseValidatorTest.java From cxf with Apache License 2.0 | 5 votes |
@org.junit.Test public void testAssertionBadSubjectConfirmationMethod() throws Exception { SubjectConfirmationDataBean subjectConfirmationData = new SubjectConfirmationDataBean(); subjectConfirmationData.setAddress("http://apache.org"); subjectConfirmationData.setInResponseTo("12345"); subjectConfirmationData.setNotAfter(new DateTime().plusMinutes(5)); subjectConfirmationData.setRecipient("http://recipient.apache.org"); // Create a AuthenticationAssertion SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler(); callbackHandler.setStatement(SAML2CallbackHandler.Statement.AUTHN); callbackHandler.setIssuer("http://cxf.apache.org/issuer"); callbackHandler.setConfirmationMethod("xyz"); callbackHandler.setSubjectConfirmationData(subjectConfirmationData); ConditionsBean conditions = new ConditionsBean(); conditions.setNotBefore(new DateTime()); conditions.setNotAfter(new DateTime().plusMinutes(5)); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(Collections.singletonList("http://service.apache.org")); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestriction)); callbackHandler.setConditions(conditions); Response response = createResponse(subjectConfirmationData, callbackHandler); // Validate the Response SAMLProtocolResponseValidator protocolValidator = new SAMLProtocolResponseValidator(); try { protocolValidator.validateSamlResponse(response, null, null); fail("Expected failure on bad response"); } catch (WSSecurityException ex) { // expected } }
Example 5
Source File: SAMLResponseValidatorTest.java From cxf with Apache License 2.0 | 5 votes |
@org.junit.Test public void testResponseInvalidVersion() throws Exception { SubjectConfirmationDataBean subjectConfirmationData = new SubjectConfirmationDataBean(); subjectConfirmationData.setAddress("http://apache.org"); subjectConfirmationData.setInResponseTo("12345"); subjectConfirmationData.setNotAfter(new DateTime().plusMinutes(5)); subjectConfirmationData.setRecipient("http://recipient.apache.org"); // Create a AuthenticationAssertion SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler(); callbackHandler.setStatement(SAML2CallbackHandler.Statement.AUTHN); callbackHandler.setIssuer("http://cxf.apache.org/issuer"); callbackHandler.setConfirmationMethod(SAML2Constants.CONF_SENDER_VOUCHES); callbackHandler.setSubjectConfirmationData(subjectConfirmationData); ConditionsBean conditions = new ConditionsBean(); conditions.setNotBefore(new DateTime()); conditions.setNotAfter(new DateTime().plusMinutes(5)); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(Collections.singletonList("http://service.apache.org")); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestriction)); callbackHandler.setConditions(conditions); Response response = createResponse(subjectConfirmationData, callbackHandler); response.setVersion(SAMLVersion.VERSION_10); // Validate the Response SAMLProtocolResponseValidator protocolValidator = new SAMLProtocolResponseValidator(); try { protocolValidator.validateSamlResponse(response, null, null); fail("Expected failure on bad response"); } catch (WSSecurityException ex) { // expected } }
Example 6
Source File: JMSWSSecurityTest.java From cxf with Apache License 2.0 | 5 votes |
@Test public void testUnsignedSAML2AudienceRestrictionTokenBadServiceName() throws Exception { QName serviceName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldService"); QName portName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldPort"); URL wsdl = getWSDLURL("/wsdl/jms_test.wsdl"); HelloWorldService service = new HelloWorldService(wsdl, serviceName); HelloWorldPortType greeter = service.getPort(portName, HelloWorldPortType.class); SamlCallbackHandler callbackHandler = new SamlCallbackHandler(); callbackHandler.setSignAssertion(true); callbackHandler.setConfirmationMethod(SAML2Constants.CONF_BEARER); ConditionsBean conditions = new ConditionsBean(); conditions.setTokenPeriodMinutes(5); List<String> audiences = new ArrayList<>(); audiences.add("{http://cxf.apache.org/hello_world_jms}BadHelloWorldService"); AudienceRestrictionBean audienceRestrictionBean = new AudienceRestrictionBean(); audienceRestrictionBean.setAudienceURIs(audiences); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestrictionBean)); callbackHandler.setConditions(conditions); Map<String, Object> outProperties = new HashMap<>(); outProperties.put(ConfigurationConstants.ACTION, ConfigurationConstants.SAML_TOKEN_UNSIGNED); outProperties.put(ConfigurationConstants.SAML_CALLBACK_REF, callbackHandler); WSS4JOutInterceptor outInterceptor = new WSS4JOutInterceptor(outProperties); Client client = ClientProxy.getClient(greeter); client.getOutInterceptors().add(outInterceptor); try { greeter.sayHi(); fail("Failure expected on a bad audience restriction"); } catch (SOAPFaultException ex) { // expected } ((java.io.Closeable)greeter).close(); }
Example 7
Source File: JMSWSSecurityTest.java From cxf with Apache License 2.0 | 5 votes |
@Test public void testUnsignedSAML2AudienceRestrictionTokenServiceName() throws Exception { QName serviceName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldService"); QName portName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldPort"); URL wsdl = getWSDLURL("/wsdl/jms_test.wsdl"); HelloWorldService service = new HelloWorldService(wsdl, serviceName); String response = new String("Bonjour"); HelloWorldPortType greeter = service.getPort(portName, HelloWorldPortType.class); SamlCallbackHandler callbackHandler = new SamlCallbackHandler(); callbackHandler.setSignAssertion(true); callbackHandler.setConfirmationMethod(SAML2Constants.CONF_BEARER); ConditionsBean conditions = new ConditionsBean(); conditions.setTokenPeriodMinutes(5); List<String> audiences = new ArrayList<>(); audiences.add("{http://cxf.apache.org/hello_world_jms}HelloWorldService"); AudienceRestrictionBean audienceRestrictionBean = new AudienceRestrictionBean(); audienceRestrictionBean.setAudienceURIs(audiences); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestrictionBean)); callbackHandler.setConditions(conditions); Map<String, Object> outProperties = new HashMap<>(); outProperties.put(ConfigurationConstants.ACTION, ConfigurationConstants.SAML_TOKEN_UNSIGNED); outProperties.put(ConfigurationConstants.SAML_CALLBACK_REF, callbackHandler); WSS4JOutInterceptor outInterceptor = new WSS4JOutInterceptor(outProperties); Client client = ClientProxy.getClient(greeter); client.getOutInterceptors().add(outInterceptor); String reply = greeter.sayHi(); assertNotNull("no response received from service", reply); assertEquals(response, reply); ((java.io.Closeable)greeter).close(); }
Example 8
Source File: JMSWSSecurityTest.java From cxf with Apache License 2.0 | 5 votes |
@Test public void testUnsignedSAML2AudienceRestrictionTokenBadURI() throws Exception { QName serviceName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldService"); QName portName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldPort"); URL wsdl = getWSDLURL("/wsdl/jms_test.wsdl"); HelloWorldService service = new HelloWorldService(wsdl, serviceName); HelloWorldPortType greeter = service.getPort(portName, HelloWorldPortType.class); SamlCallbackHandler callbackHandler = new SamlCallbackHandler(); callbackHandler.setSignAssertion(true); callbackHandler.setConfirmationMethod(SAML2Constants.CONF_BEARER); ConditionsBean conditions = new ConditionsBean(); conditions.setTokenPeriodMinutes(5); List<String> audiences = new ArrayList<>(); audiences.add("jms:jndi:dynamicQueues/test.jmstransport.text.bad"); AudienceRestrictionBean audienceRestrictionBean = new AudienceRestrictionBean(); audienceRestrictionBean.setAudienceURIs(audiences); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestrictionBean)); callbackHandler.setConditions(conditions); Map<String, Object> outProperties = new HashMap<>(); outProperties.put(ConfigurationConstants.ACTION, ConfigurationConstants.SAML_TOKEN_UNSIGNED); outProperties.put(ConfigurationConstants.SAML_CALLBACK_REF, callbackHandler); WSS4JOutInterceptor outInterceptor = new WSS4JOutInterceptor(outProperties); Client client = ClientProxy.getClient(greeter); client.getOutInterceptors().add(outInterceptor); try { greeter.sayHi(); fail("Failure expected on a bad audience restriction"); } catch (SOAPFaultException ex) { // expected } ((java.io.Closeable)greeter).close(); }
Example 9
Source File: JMSWSSecurityTest.java From cxf with Apache License 2.0 | 5 votes |
@Test public void testUnsignedSAML2AudienceRestrictionTokenURI() throws Exception { QName serviceName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldService"); QName portName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldPort"); URL wsdl = getWSDLURL("/wsdl/jms_test.wsdl"); HelloWorldService service = new HelloWorldService(wsdl, serviceName); String response = new String("Bonjour"); HelloWorldPortType greeter = service.getPort(portName, HelloWorldPortType.class); SamlCallbackHandler callbackHandler = new SamlCallbackHandler(); callbackHandler.setSignAssertion(true); callbackHandler.setConfirmationMethod(SAML2Constants.CONF_BEARER); ConditionsBean conditions = new ConditionsBean(); conditions.setTokenPeriodMinutes(5); List<String> audiences = new ArrayList<>(); audiences.add("jms:jndi:dynamicQueues/test.jmstransport.text"); AudienceRestrictionBean audienceRestrictionBean = new AudienceRestrictionBean(); audienceRestrictionBean.setAudienceURIs(audiences); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestrictionBean)); callbackHandler.setConditions(conditions); Map<String, Object> outProperties = new HashMap<>(); outProperties.put(ConfigurationConstants.ACTION, ConfigurationConstants.SAML_TOKEN_UNSIGNED); outProperties.put(ConfigurationConstants.SAML_CALLBACK_REF, callbackHandler); WSS4JOutInterceptor outInterceptor = new WSS4JOutInterceptor(outProperties); Client client = ClientProxy.getClient(greeter); client.getOutInterceptors().add(outInterceptor); String reply = greeter.sayHi(); assertNotNull("no response received from service", reply); assertEquals(response, reply); ((java.io.Closeable)greeter).close(); }
Example 10
Source File: SamlCallbackHandler.java From cxf with Apache License 2.0 | 4 votes |
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { Message m = PhaseInterceptorChain.getCurrentMessage(); for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof SAMLCallback) { SAMLCallback callback = (SAMLCallback) callbacks[i]; if (saml2) { callback.setSamlVersion(Version.SAML_20); } else { callback.setSamlVersion(Version.SAML_11); } callback.setIssuer(issuer); String subject = m != null ? (String)m.getContextualProperty("saml.subject.name") : null; if (subject == null) { subject = subjectName; } String subjectQualifier = "www.mock-sts.com"; SubjectBean subjectBean = new SubjectBean( subject, subjectQualifier, confirmationMethod ); callback.setSubject(subjectBean); ConditionsBean conditions = new ConditionsBean(); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(Collections.singletonList(audience)); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestriction)); callback.setConditions(conditions); AuthDecisionStatementBean authDecBean = new AuthDecisionStatementBean(); authDecBean.setDecision(Decision.INDETERMINATE); authDecBean.setResource("https://sp.example.com/SAML2"); authDecBean.setSubject(subjectBean); ActionBean actionBean = new ActionBean(); actionBean.setContents("Read"); authDecBean.setActions(Collections.singletonList(actionBean)); callback.setAuthDecisionStatementData(Collections.singletonList(authDecBean)); AuthenticationStatementBean authBean = new AuthenticationStatementBean(); authBean.setSubject(subjectBean); authBean.setAuthenticationInstant(new DateTime()); authBean.setSessionIndex("123456"); authBean.setSubject(subjectBean); // AuthnContextClassRef is not set authBean.setAuthenticationMethod( "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"); callback.setAuthenticationStatementData( Collections.singletonList(authBean)); AttributeStatementBean attrBean = new AttributeStatementBean(); attrBean.setSubject(subjectBean); List<String> roles = m != null ? CastUtils.<String>cast((List<?>)m.getContextualProperty("saml.roles")) : null; if (roles == null) { roles = Collections.singletonList("user"); } List<AttributeBean> claims = new ArrayList<>(); AttributeBean roleClaim = new AttributeBean(); roleClaim.setSimpleName("subject-role"); roleClaim.setQualifiedName(SAMLClaim.SAML_ROLE_ATTRIBUTENAME_DEFAULT); roleClaim.setNameFormat(SAML2Constants.ATTRNAME_FORMAT_UNSPECIFIED); roleClaim.setAttributeValues(new ArrayList<>(roles)); claims.add(roleClaim); List<String> authMethods = m != null ? CastUtils.<String>cast((List<?>)m.getContextualProperty("saml.auth")) : null; if (authMethods == null) { authMethods = Collections.singletonList("password"); } AttributeBean authClaim = new AttributeBean(); authClaim.setSimpleName("http://claims/authentication"); authClaim.setQualifiedName("http://claims/authentication"); authClaim.setNameFormat("http://claims/authentication-format"); authClaim.setAttributeValues(new ArrayList<>(authMethods)); claims.add(authClaim); attrBean.setSamlAttributes(claims); callback.setAttributeStatementData(Collections.singletonList(attrBean)); if (signAssertion) { try { Crypto crypto = CryptoFactory.getInstance(cryptoPropertiesFile); callback.setIssuerCrypto(crypto); callback.setIssuerKeyName(issuerKeyName); callback.setIssuerKeyPassword(issuerKeyPassword); callback.setSignAssertion(true); } catch (WSSecurityException e) { throw new IOException(e); } } } } }
Example 11
Source File: SAMLSSOResponseValidatorTest.java From cxf with Apache License 2.0 | 4 votes |
@org.junit.Test public void testSignedResponseInvalidDestination() throws Exception { Document doc = DOMUtils.createDocument(); Status status = SAML2PResponseComponentBuilder.createStatus( SAMLProtocolResponseValidator.SAML2_STATUSCODE_SUCCESS, null ); Response response = SAML2PResponseComponentBuilder.createSAMLResponse( "http://cxf.apache.org/saml", "http://cxf.apache.org/issuer", status ); // Create an AuthenticationAssertion SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler(); callbackHandler.setStatement(SAML2CallbackHandler.Statement.AUTHN); callbackHandler.setIssuer("http://cxf.apache.org/issuer"); callbackHandler.setConfirmationMethod(SAML2Constants.CONF_BEARER); ConditionsBean conditions = new ConditionsBean(); conditions.setNotBefore(new DateTime()); conditions.setNotAfter(new DateTime().plusMinutes(5)); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(Collections.singletonList("http://service.apache.org")); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestriction)); callbackHandler.setConditions(conditions); SubjectConfirmationDataBean subjectConfirmationData = new SubjectConfirmationDataBean(); subjectConfirmationData.setAddress("http://apache.org"); subjectConfirmationData.setInResponseTo("12345"); subjectConfirmationData.setNotAfter(new DateTime().plusMinutes(5)); subjectConfirmationData.setRecipient("http://recipient.apache.org"); callbackHandler.setSubjectConfirmationData(subjectConfirmationData); SAMLCallback samlCallback = new SAMLCallback(); SAMLUtil.doSAMLCallback(callbackHandler, samlCallback); SamlAssertionWrapper assertion = new SamlAssertionWrapper(samlCallback); response.getAssertions().add(assertion.getSaml2()); response.setDestination("xyz"); Crypto issuerCrypto = new Merlin(); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); ClassLoader loader = Loader.getClassLoader(SAMLResponseValidatorTest.class); InputStream input = Merlin.loadInputStream(loader, "alice.jks"); keyStore.load(input, "password".toCharArray()); ((Merlin)issuerCrypto).setKeyStore(keyStore); signResponse(response, "alice", "password", issuerCrypto, true); Element policyElement = OpenSAMLUtil.toDom(response, doc); doc.appendChild(policyElement); assertNotNull(policyElement); Response marshalledResponse = (Response)OpenSAMLUtil.fromDom(policyElement); // Validate the Response SAMLSSOResponseValidator validator = new SAMLSSOResponseValidator(); validator.setIssuerIDP("http://cxf.apache.org/issuer"); validator.setAssertionConsumerURL("http://recipient.apache.org"); validator.setClientAddress("http://apache.org"); validator.setRequestId("12345"); validator.setSpIdentifier("http://service.apache.org"); try { validator.validateSamlResponse(marshalledResponse, false); fail("Expected failure on bad response"); } catch (WSSecurityException ex) { // expected } }
Example 12
Source File: SamlTokenTest.java From cxf with Apache License 2.0 | 4 votes |
@org.junit.Test public void testDisableAudienceRestrictionValidation() throws Exception { SpringBusFactory bf = new SpringBusFactory(); URL busFile = SamlTokenTest.class.getResource("client.xml"); Bus bus = bf.createBus(busFile.toString()); BusFactory.setDefaultBus(bus); BusFactory.setThreadDefaultBus(bus); URL wsdl = SamlTokenTest.class.getResource("DoubleItSaml.wsdl"); Service service = Service.create(wsdl, SERVICE_QNAME); QName portQName = new QName(NAMESPACE, "DoubleItSaml2TransportPort2"); DoubleItPortType saml2Port = service.getPort(portQName, DoubleItPortType.class); String portNumber = PORT2; if (STAX_PORT.equals(test.getPort())) { portNumber = STAX_PORT2; } updateAddressPort(saml2Port, portNumber); // Create a SAML Token with an AudienceRestrictionCondition ConditionsBean conditions = new ConditionsBean(); List<AudienceRestrictionBean> audienceRestrictions = new ArrayList<>(); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(Collections.singletonList( service.getServiceName().toString() + ".xyz")); audienceRestrictions.add(audienceRestriction); conditions.setAudienceRestrictions(audienceRestrictions); SamlCallbackHandler callbackHandler = new SamlCallbackHandler(); callbackHandler.setConditions(conditions); ((BindingProvider)saml2Port).getRequestContext().put( SecurityConstants.SAML_CALLBACK_HANDLER, callbackHandler ); // It should fail with validation enabled try { saml2Port.doubleIt(25); fail("Failure expected on unknown AudienceRestriction"); } catch (javax.xml.ws.soap.SOAPFaultException ex) { // expected } // It should pass with validation disabled portQName = new QName(NAMESPACE, "DoubleItSaml2TransportPort3"); saml2Port = service.getPort(portQName, DoubleItPortType.class); updateAddressPort(saml2Port, portNumber); ((BindingProvider)saml2Port).getRequestContext().put( SecurityConstants.SAML_CALLBACK_HANDLER, callbackHandler ); saml2Port.doubleIt(25); // It should pass because we explicitly allow the given audience restriction portQName = new QName(NAMESPACE, "DoubleItSaml2TransportPort4"); saml2Port = service.getPort(portQName, DoubleItPortType.class); updateAddressPort(saml2Port, portNumber); ((BindingProvider)saml2Port).getRequestContext().put( SecurityConstants.SAML_CALLBACK_HANDLER, callbackHandler ); saml2Port.doubleIt(25); }
Example 13
Source File: SAML2ITCase.java From syncope with Apache License 2.0 | 4 votes |
private static org.opensaml.saml.saml2.core.Response createResponse( final String inResponseTo, final boolean signAssertion, final String subjectConfMethod, final String issuer) throws Exception { Status status = SAML2PResponseComponentBuilder.createStatus( SAMLProtocolResponseValidator.SAML2_STATUSCODE_SUCCESS, null); org.opensaml.saml.saml2.core.Response response = SAML2PResponseComponentBuilder.createSAMLResponse( inResponseTo, issuer, status); response.setDestination("http://recipient.apache.org"); // Create an AuthenticationAssertion SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler(); callbackHandler.setIssuer(issuer); callbackHandler.setSubjectName("puccini"); callbackHandler.setSubjectConfirmationMethod(subjectConfMethod); SubjectConfirmationDataBean subjectConfirmationData = new SubjectConfirmationDataBean(); subjectConfirmationData.setAddress("http://apache.org"); subjectConfirmationData.setInResponseTo(inResponseTo); subjectConfirmationData.setNotAfter(new DateTime().plusMinutes(5)); subjectConfirmationData.setRecipient("http://recipient.apache.org/saml2sp/assertion-consumer"); callbackHandler.setSubjectConfirmationData(subjectConfirmationData); ConditionsBean conditions = new ConditionsBean(); conditions.setNotBefore(new DateTime()); conditions.setNotAfter(new DateTime().plusMinutes(5)); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(List.of("http://recipient.apache.org/")); conditions.setAudienceRestrictions(List.of(audienceRestriction)); callbackHandler.setConditions(conditions); SAMLCallback samlCallback = new SAMLCallback(); SAMLUtil.doSAMLCallback(callbackHandler, samlCallback); SamlAssertionWrapper assertion = new SamlAssertionWrapper(samlCallback); if (signAssertion) { Crypto issuerCrypto = new Merlin(); KeyStore keyStore = KeyStore.getInstance("JKS"); InputStream input = Files.newInputStream(keystorePath); keyStore.load(input, "security".toCharArray()); ((Merlin) issuerCrypto).setKeyStore(keyStore); assertion.signAssertion("subject", "security", issuerCrypto, false); } response.getAssertions().add(assertion.getSaml2()); return response; }
Example 14
Source File: SAMLSSOResponseValidatorTest.java From cxf with Apache License 2.0 | 4 votes |
@org.junit.Test public void testAssertionBadIssuer() throws Exception { SubjectConfirmationDataBean subjectConfirmationData = new SubjectConfirmationDataBean(); subjectConfirmationData.setAddress("http://apache.org"); subjectConfirmationData.setInResponseTo("12345"); subjectConfirmationData.setNotAfter(new DateTime().plusMinutes(5)); subjectConfirmationData.setRecipient("http://recipient.apache.org"); // Create a AuthenticationAssertion SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler(); callbackHandler.setStatement(SAML2CallbackHandler.Statement.AUTHN); callbackHandler.setIssuer("http://cxf.apache.org/bad-issuer"); callbackHandler.setConfirmationMethod(SAML2Constants.CONF_BEARER); callbackHandler.setSubjectConfirmationData(subjectConfirmationData); ConditionsBean conditions = new ConditionsBean(); conditions.setNotBefore(new DateTime()); conditions.setNotAfter(new DateTime().plusMinutes(5)); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(Collections.singletonList("http://service.apache.org")); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestriction)); callbackHandler.setConditions(conditions); Response response = createResponse(subjectConfirmationData, callbackHandler); // Validate the Response SAMLSSOResponseValidator validator = new SAMLSSOResponseValidator(); validator.setEnforceAssertionsSigned(false); validator.setIssuerIDP("http://cxf.apache.org/issuer"); validator.setAssertionConsumerURL("http://recipient.apache.org"); validator.setClientAddress("http://apache.org"); validator.setRequestId("12345"); validator.setSpIdentifier("http://service.apache.org"); try { validator.validateSamlResponse(response, false); fail("Expected failure on bad response"); } catch (WSSecurityException ex) { // expected } }
Example 15
Source File: SAMLSSOResponseValidatorTest.java From cxf with Apache License 2.0 | 4 votes |
private Response createResponse( SubjectConfirmationDataBean subjectConfirmationData, List<AudienceRestrictionBean> audienceRestrictions, String authnClassRef ) throws Exception { Document doc = DOMUtils.createDocument(); Status status = SAML2PResponseComponentBuilder.createStatus( SAMLProtocolResponseValidator.SAML2_STATUSCODE_SUCCESS, null ); Response response = SAML2PResponseComponentBuilder.createSAMLResponse( "http://cxf.apache.org/saml", "http://cxf.apache.org/issuer", status ); // Create an AuthenticationAssertion SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler(); callbackHandler.setStatement(SAML2CallbackHandler.Statement.AUTHN); callbackHandler.setIssuer("http://cxf.apache.org/issuer"); callbackHandler.setConfirmationMethod(SAML2Constants.CONF_BEARER); callbackHandler.setSubjectConfirmationData(subjectConfirmationData); ConditionsBean conditions = new ConditionsBean(); conditions.setNotBefore(new DateTime()); conditions.setNotAfter(new DateTime().plusMinutes(5)); if (audienceRestrictions == null) { AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(Collections.singletonList("http://service.apache.org")); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestriction)); } else { conditions.setAudienceRestrictions(audienceRestrictions); } callbackHandler.setConditions(conditions); SAMLCallback samlCallback = new SAMLCallback(); SAMLUtil.doSAMLCallback(callbackHandler, samlCallback); SamlAssertionWrapper assertion = new SamlAssertionWrapper(samlCallback); response.getAssertions().add(assertion.getSaml2()); if (authnClassRef != null) { AuthnStatement authnStatement = response.getAssertions().get(0).getAuthnStatements().get(0); authnStatement.getAuthnContext().setAuthnContextClassRef( SAML2PResponseComponentBuilder.createAuthnContextClassRef(authnClassRef)); } Element policyElement = OpenSAMLUtil.toDom(response, doc); doc.appendChild(policyElement); assertNotNull(policyElement); return (Response)OpenSAMLUtil.fromDom(policyElement); }
Example 16
Source File: CombinedValidatorTest.java From cxf with Apache License 2.0 | 4 votes |
private Response createResponse(Document doc) throws Exception { Status status = SAML2PResponseComponentBuilder.createStatus( SAMLProtocolResponseValidator.SAML2_STATUSCODE_SUCCESS, null ); Response response = SAML2PResponseComponentBuilder.createSAMLResponse( "http://cxf.apache.org/saml", "http://cxf.apache.org/issuer", status ); response.setDestination("http://recipient.apache.org"); // Create an AuthenticationAssertion SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler(); callbackHandler.setStatement(SAML2CallbackHandler.Statement.AUTHN); callbackHandler.setIssuer("http://cxf.apache.org/issuer"); callbackHandler.setConfirmationMethod(SAML2Constants.CONF_BEARER); callbackHandler.setSubjectName("alice"); SubjectConfirmationDataBean subjectConfirmationData = new SubjectConfirmationDataBean(); subjectConfirmationData.setAddress("http://apache.org"); subjectConfirmationData.setInResponseTo("12345"); subjectConfirmationData.setNotAfter(new DateTime().plusMinutes(5)); subjectConfirmationData.setRecipient("http://recipient.apache.org"); callbackHandler.setSubjectConfirmationData(subjectConfirmationData); ConditionsBean conditions = new ConditionsBean(); conditions.setNotBefore(new DateTime()); conditions.setNotAfter(new DateTime().plusMinutes(5)); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(Collections.singletonList("http://service.apache.org")); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestriction)); callbackHandler.setConditions(conditions); SAMLCallback samlCallback = new SAMLCallback(); SAMLUtil.doSAMLCallback(callbackHandler, samlCallback); SamlAssertionWrapper assertion = new SamlAssertionWrapper(samlCallback); Crypto issuerCrypto = new Merlin(); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); ClassLoader loader = Loader.getClassLoader(CombinedValidatorTest.class); InputStream input = Merlin.loadInputStream(loader, "alice.jks"); keyStore.load(input, "password".toCharArray()); ((Merlin)issuerCrypto).setKeyStore(keyStore); assertion.signAssertion("alice", "password", issuerCrypto, false); response.getAssertions().add(assertion.getSaml2()); return response; }
Example 17
Source File: SamlSso.java From cxf-fediz with Apache License 2.0 | 4 votes |
protected Element createResponse(String requestID, String racs, String requestIssuer) throws Exception { DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); Document doc = docBuilder.newDocument(); Status status = SAML2PResponseComponentBuilder.createStatus( "urn:oasis:names:tc:SAML:2.0:status:Success", null ); String issuer = messageContext.getUriInfo().getAbsolutePath().toString(); Response response = SAML2PResponseComponentBuilder.createSAMLResponse(requestID, issuer, status); // Create an AuthenticationAssertion SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler(); callbackHandler.setIssuer(issuer); String user = messageContext.getSecurityContext().getUserPrincipal().getName(); callbackHandler.setSubjectName(user); // Subject Confirmation Data SubjectConfirmationDataBean subjectConfirmationData = new SubjectConfirmationDataBean(); subjectConfirmationData.setAddress(messageContext.getHttpServletRequest().getRemoteAddr()); subjectConfirmationData.setInResponseTo(requestID); subjectConfirmationData.setNotAfter(new DateTime().plusMinutes(5)); subjectConfirmationData.setRecipient(racs); callbackHandler.setSubjectConfirmationData(subjectConfirmationData); // Audience Restriction ConditionsBean conditions = new ConditionsBean(); conditions.setTokenPeriodMinutes(5); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(Collections.singletonList(requestIssuer)); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestriction)); callbackHandler.setConditions(conditions); SAMLCallback samlCallback = new SAMLCallback(); SAMLUtil.doSAMLCallback(callbackHandler, samlCallback); SamlAssertionWrapper assertion = new SamlAssertionWrapper(samlCallback); Crypto issuerCrypto = CryptoFactory.getInstance("stsKeystoreB.properties"); assertion.signAssertion("realmb", "realmb", issuerCrypto, false); response.getAssertions().add(assertion.getSaml2()); Element policyElement = OpenSAMLUtil.toDom(response, doc); doc.appendChild(policyElement); return policyElement; }
Example 18
Source File: SamlResponseCreator.java From cxf-fediz with Apache License 2.0 | 4 votes |
private Assertion createSAML2Assertion(RequestContext context, Idp idp, SamlAssertionWrapper receivedToken, String requestID, String requestIssuer, String remoteAddr, String racs) throws Exception { // Create an AuthenticationAssertion SAML2CallbackHandler callbackHandler = new SAML2CallbackHandler(); String issuer = isUseRealmForIssuer() ? idp.getRealm() : idp.getIdpUrl().toString(); callbackHandler.setIssuer(issuer); callbackHandler.setSubject(receivedToken.getSaml2().getSubject()); // Test Subject against received Subject (if applicable) SAMLAuthnRequest authnRequest = (SAMLAuthnRequest)WebUtils.getAttributeFromFlowScope(context, IdpConstants.SAML_AUTHN_REQUEST); if (authnRequest.getSubjectNameId() != null && receivedToken.getSaml2().getSubject().getNameID() != null) { NameID issuedNameId = receivedToken.getSaml2().getSubject().getNameID(); if (!authnRequest.getSubjectNameId().equals(issuedNameId.getValue())) { LOG.debug("Received NameID value of {} does not match issued value {}", authnRequest.getSubjectNameId(), issuedNameId.getValue()); throw new ProcessingException(ProcessingException.TYPE.INVALID_REQUEST); } } // Subject Confirmation Data SubjectConfirmationDataBean subjectConfirmationData = new SubjectConfirmationDataBean(); subjectConfirmationData.setAddress(remoteAddr); subjectConfirmationData.setInResponseTo(requestID); subjectConfirmationData.setNotAfter(new DateTime().plusMinutes(5)); subjectConfirmationData.setRecipient(racs); callbackHandler.setSubjectConfirmationData(subjectConfirmationData); // Audience Restriction ConditionsBean conditions = new ConditionsBean(); conditions.setTokenPeriodMinutes(5); AudienceRestrictionBean audienceRestriction = new AudienceRestrictionBean(); audienceRestriction.setAudienceURIs(Collections.singletonList(requestIssuer)); conditions.setAudienceRestrictions(Collections.singletonList(audienceRestriction)); callbackHandler.setConditions(conditions); // Attributes callbackHandler.setAttributeStatements(receivedToken.getSaml2().getAttributeStatements()); SAMLCallback samlCallback = new SAMLCallback(); SAMLUtil.doSAMLCallback(callbackHandler, samlCallback); SamlAssertionWrapper assertion = new SamlAssertionWrapper(samlCallback); Crypto issuerCrypto = CertsUtils.getCryptoFromCertificate(idp.getCertificate()); assertion.signAssertion(issuerCrypto.getDefaultX509Identifier(), idp.getCertificatePassword(), issuerCrypto, false); return assertion.getSaml2(); }