Java Code Examples for org.apache.wss4j.common.saml.SamlAssertionWrapper#parseSubject()
The following examples show how to use
org.apache.wss4j.common.saml.SamlAssertionWrapper#parseSubject() .
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: SCTTokenValidator.java From cxf with Apache License 2.0 | 6 votes |
public Credential validate(Credential credential, RequestData data) throws WSSecurityException { Credential validatedCredential = super.validate(credential, data); SamlAssertionWrapper transformedToken = validatedCredential.getTransformedToken(); if (transformedToken == null || transformedToken.getSaml2() == null || !"DoubleItSTSIssuer".equals(transformedToken.getIssuerString())) { throw new WSSecurityException(WSSecurityException.ErrorCode.FAILURE); } transformedToken.parseSubject( new WSSSAMLKeyInfoProcessor(data), data.getSigVerCrypto(), data.getCallbackHandler() ); SAMLKeyInfo keyInfo = transformedToken.getSubjectKeyInfo(); byte[] secret = keyInfo.getSecret(); validatedCredential.setSecretKey(secret); return validatedCredential; }
Example 2
Source File: SAMLTokenRenewer.java From cxf with Apache License 2.0 | 4 votes |
private void validateAssertion( SamlAssertionWrapper assertion, ReceivedToken tokenToRenew, SecurityToken token, TokenRenewerParameters tokenParameters ) throws WSSecurityException { // Check the cached renewal properties Map<String, Object> props = token.getProperties(); if (props == null) { LOG.log(Level.WARNING, "Error in getting properties from cached token"); throw new STSException( "Error in getting properties from cached token", STSException.REQUEST_FAILED ); } String isAllowRenewal = (String)props.get(STSConstants.TOKEN_RENEWING_ALLOW); String isAllowRenewalAfterExpiry = (String)props.get(STSConstants.TOKEN_RENEWING_ALLOW_AFTER_EXPIRY); if (isAllowRenewal == null || !Boolean.valueOf(isAllowRenewal)) { LOG.log(Level.WARNING, "The token is not allowed to be renewed"); throw new STSException("The token is not allowed to be renewed", STSException.REQUEST_FAILED); } // Check to see whether the token has expired greater than the configured max expiry time if (tokenToRenew.getState() == STATE.EXPIRED) { if (!allowRenewalAfterExpiry || isAllowRenewalAfterExpiry == null || !Boolean.valueOf(isAllowRenewalAfterExpiry)) { LOG.log(Level.WARNING, "Renewal after expiry is not allowed"); throw new STSException( "Renewal after expiry is not allowed", STSException.REQUEST_FAILED ); } DateTime expiryDate = getExpiryDate(assertion); DateTime currentDate = new DateTime(); if ((currentDate.getMillis() - expiryDate.getMillis()) > (maxExpiry * 1000L)) { LOG.log(Level.WARNING, "The token expired too long ago to be renewed"); throw new STSException( "The token expired too long ago to be renewed", STSException.REQUEST_FAILED ); } } // Verify Proof of Possession ProofOfPossessionValidator popValidator = new ProofOfPossessionValidator(); if (verifyProofOfPossession) { STSPropertiesMBean stsProperties = tokenParameters.getStsProperties(); Crypto sigCrypto = stsProperties.getSignatureCrypto(); CallbackHandler callbackHandler = stsProperties.getCallbackHandler(); RequestData requestData = new RequestData(); requestData.setSigVerCrypto(sigCrypto); WSSConfig wssConfig = WSSConfig.getNewInstance(); requestData.setWssConfig(wssConfig); WSDocInfo docInfo = new WSDocInfo(((Element)tokenToRenew.getToken()).getOwnerDocument()); requestData.setWsDocInfo(docInfo); // Parse the HOK subject if it exists assertion.parseSubject( new WSSSAMLKeyInfoProcessor(requestData), sigCrypto, callbackHandler ); SAMLKeyInfo keyInfo = assertion.getSubjectKeyInfo(); if (keyInfo == null) { keyInfo = new SAMLKeyInfo((byte[])null); } if (!popValidator.checkProofOfPossession(tokenParameters, keyInfo)) { throw new STSException( "Failed to verify the proof of possession of the key associated with the " + "saml token. No matching key found in the request.", STSException.INVALID_REQUEST ); } } // Check the AppliesTo address String appliesToAddress = tokenParameters.getAppliesToAddress(); if (appliesToAddress != null) { if (assertion.getSaml1() != null) { List<AudienceRestrictionCondition> restrConditions = assertion.getSaml1().getConditions().getAudienceRestrictionConditions(); if (!matchSaml1AudienceRestriction(appliesToAddress, restrConditions)) { LOG.log(Level.WARNING, "The AppliesTo address does not match the Audience Restriction"); throw new STSException( "The AppliesTo address does not match the Audience Restriction", STSException.INVALID_REQUEST ); } } else { List<AudienceRestriction> audienceRestrs = assertion.getSaml2().getConditions().getAudienceRestrictions(); if (!matchSaml2AudienceRestriction(appliesToAddress, audienceRestrs)) { LOG.log(Level.WARNING, "The AppliesTo address does not match the Audience Restriction"); throw new STSException( "The AppliesTo address does not match the Audience Restriction", STSException.INVALID_REQUEST ); } } } }
Example 3
Source File: SAMLProtocolResponseValidator.java From cxf with Apache License 2.0 | 4 votes |
/** * Validate an internal Assertion */ private void validateAssertion( SamlAssertionWrapper assertion, Crypto sigCrypto, CallbackHandler callbackHandler, Document doc, boolean signedResponse ) throws WSSecurityException { Credential credential = new Credential(); credential.setSamlAssertion(assertion); RequestData requestData = new RequestData(); requestData.setSigVerCrypto(sigCrypto); WSSConfig wssConfig = WSSConfig.getNewInstance(); requestData.setWssConfig(wssConfig); requestData.setCallbackHandler(callbackHandler); if (assertion.isSigned()) { if (assertion.getSaml1() != null) { assertion.getSaml1().getDOM().setIdAttributeNS(null, "AssertionID", true); } else { assertion.getSaml2().getDOM().setIdAttributeNS(null, "ID", true); } // Verify the signature try { Signature sig = assertion.getSignature(); WSDocInfo docInfo = new WSDocInfo(sig.getDOM().getOwnerDocument()); requestData.setWsDocInfo(docInfo); SAMLKeyInfo samlKeyInfo = null; KeyInfo keyInfo = sig.getKeyInfo(); if (keyInfo != null) { samlKeyInfo = SAMLUtil.getCredentialFromKeyInfo( keyInfo.getDOM(), new WSSSAMLKeyInfoProcessor(requestData), sigCrypto ); } else if (!keyInfoMustBeAvailable) { samlKeyInfo = createKeyInfoFromDefaultAlias(sigCrypto); } if (samlKeyInfo == null) { LOG.warning("No KeyInfo supplied in the SAMLResponse assertion signature"); throw new WSSecurityException(WSSecurityException.ErrorCode.FAILURE, "invalidSAMLsecurity"); } assertion.verifySignature(samlKeyInfo); assertion.parseSubject( new WSSSAMLKeyInfoProcessor(requestData), requestData.getSigVerCrypto(), requestData.getCallbackHandler() ); } catch (WSSecurityException e) { LOG.log(Level.FINE, "Assertion failed signature validation", e); throw e; } } // Validate the Assertion & verify trust in the signature try { SamlSSOAssertionValidator assertionValidator = new SamlSSOAssertionValidator(signedResponse); assertionValidator.validate(credential, requestData); } catch (WSSecurityException ex) { LOG.log(Level.FINE, "Assertion validation failed: " + ex.getMessage(), ex); throw ex; } }