Package org.jboss.seam.security.external

Examples of org.jboss.seam.security.external.InvalidRequestException


   public void validateSignature(SamlRedirectMessage urlEncodedRedirectMessage, PublicKey publicKey) throws InvalidRequestException
   {
      if (urlEncodedRedirectMessage.getSignature() == null)
      {
         throw new InvalidRequestException("Signature parameter is not present.");
      }

      String urlDecodedSignature;
      try
      {
         urlDecodedSignature = URLDecoder.decode(urlEncodedRedirectMessage.getSignature(), "UTF-8");
      }
      catch (UnsupportedEncodingException e)
      {
         throw new RuntimeException(e);
      }

      byte[] base64DecodedSignature = Base64.decode(urlDecodedSignature);

      // Reconstruct the string that has been signed by the other party
      SamlRedirectMessage signedRedirectMessage = new SamlRedirectMessage();
      signedRedirectMessage.setRequestOrResponse(urlEncodedRedirectMessage.getRequestOrResponse());
      signedRedirectMessage.setSamlMessage(urlEncodedRedirectMessage.getSamlMessage());
      signedRedirectMessage.setRelayState(urlEncodedRedirectMessage.getRelayState());
      signedRedirectMessage.setSignatureAlgorithm(urlEncodedRedirectMessage.getSignatureAlgorithm());
      signedRedirectMessage.setUrlEncoded(true);
      String signedString = signedRedirectMessage.createQueryString();

      boolean isValid;
      try
      {
         isValid = validate(signedString.getBytes("UTF-8"), base64DecodedSignature, publicKey);
      }
      catch (UnsupportedEncodingException e)
      {
         throw new RuntimeException(e);
      }
      catch (GeneralSecurityException e)
      {
         throw new RuntimeException(e);
      }

      if (!isValid)
      {
         throw new InvalidRequestException("Invalid signature.");
      }
   }
View Full Code Here


   public void processSPRequest(HttpServletRequest httpRequest, HttpServletResponse httpResponse, RequestAbstractType request) throws InvalidRequestException
   {
      if (!(request instanceof AuthnRequestType))
      {
         throw new InvalidRequestException("Request should be an authentication request.");
      }

      samlIdentityProviderSpi.get().authenticate(responseHandler.createResponseHolder(httpResponse));
   }
View Full Code Here

   public void processSPRequest(HttpServletRequest httpRequest, HttpServletResponse httpResponse, RequestAbstractType request) throws InvalidRequestException
   {
      if (!(request instanceof LogoutRequestType))
      {
         throw new InvalidRequestException("Request should be a single logout request.");
      }

      LogoutRequestType logoutRequest = (LogoutRequestType) request;

      NameIDType nameIdJaxb = logoutRequest.getNameID();
View Full Code Here

         samlMessage = samlResponseParam;
         samlRequestOrResponse = SamlRequestOrResponse.RESPONSE;
      }
      else
      {
         throw new InvalidRequestException("SAML message should either have a SAMLRequest parameter or a SAMLResponse parameter");
      }

      InputStream is;
      if (httpRequest.getMethod().equals("POST"))
      {
         byte[] decodedMessage = Base64.decode(samlMessage);
         is = new ByteArrayInputStream(decodedMessage);
      }
      else
      {
         byte[] base64Decoded = Base64.decode(samlMessage);
         ByteArrayInputStream bais = new ByteArrayInputStream(base64Decoded);
         is = new InflaterInputStream(bais, new Inflater(true));
      }

      Document document = getDocument(is);
      String issuerEntityId;
      RequestAbstractType samlRequestMessage = null;
      StatusResponseType samlResponseMessage = null;
      if (samlRequestOrResponse.isRequest())
      {
         samlRequestMessage = getSamlRequest(document);
         issuerEntityId = samlRequestMessage.getIssuer().getValue();
      }
      else
      {
         samlResponseMessage = getSamlResponse(document);
         issuerEntityId = samlResponseMessage.getIssuer().getValue();
      }
      log.debug("Received: " + SamlUtils.getDocumentAsString(document));

      try
      {
         if (samlRequestOrResponse.isRequest() || samlResponseMessage.getInResponseTo() == null)
         {
            // Request or unsolicited response

            String destination = samlRequestOrResponse.isRequest() ? samlRequestMessage.getDestination() : samlResponseMessage.getDestination();
            if (!samlEntityBean.get().getServiceURL(service).equals(destination))
            {
               throw new InvalidRequestException("Destination (" + destination + ") is not valid.");
            }

            dialogueManager.beginDialogue();
            samlDialogue.get().setExternalProviderMessageId(samlRequestOrResponse.isRequest() ? samlRequestMessage.getID() : samlResponseMessage.getID());
            SamlExternalEntity externalProvider = samlEntityBean.get().getExternalSamlEntityByEntityId(issuerEntityId);
            if (externalProvider == null)
            {
               throw new InvalidRequestException("Received message from unknown entity id " + issuerEntityId);
            }
            samlDialogue.get().setExternalProvider(externalProvider);
         }
         else
         {
            String dialogueId = samlResponseMessage.getInResponseTo();
            if (!dialogueManager.isExistingDialogue(dialogueId))
            {
               throw new InvalidRequestException("No request that corresponds with the received response");
            }

            dialogueManager.attachDialogue(dialogueId);
            if (!(samlDialogue.get().getExternalProvider().getEntityId().equals(issuerEntityId)))
            {
               throw new InvalidRequestException("Identity samlEntityBean of request and response do not match");
            }
         }

         SamlExternalEntity externalProvider = samlEntityBean.get().getExternalSamlEntityByEntityId(issuerEntityId);
View Full Code Here

         RequestAbstractType request = jaxbRequest.getValue();
         return request;
      }
      catch (JAXBException e)
      {
         throw new InvalidRequestException("SAML message could not be parsed", e);
      }
   }
View Full Code Here

         StatusResponseType statusResponse = jaxbResponseType.getValue();
         return statusResponse;
      }
      catch (JAXBException e)
      {
         throw new InvalidRequestException("SAML message could not be parsed", e);
      }
   }
View Full Code Here

      {
         throw new RuntimeException(e);
      }
      catch (SAXException e)
      {
         throw new InvalidRequestException("SAML request could not be parsed", e);
      }
      catch (IOException e)
      {
         throw new RuntimeException(e);
      }
View Full Code Here

      SamlExternalIdentityProvider idp = (SamlExternalIdentityProvider) samlDialogue.getExternalProvider();

      StatusType status = statusResponse.getStatus();
      if (status == null)
      {
         throw new InvalidRequestException("Response does not contain a status");
      }

      String statusValue = status.getStatusCode().getValue();
      if (!SamlConstants.STATUS_SUCCESS.equals(statusValue))
      {
         String statusCodeLevel1 = statusValue;
         String statusCodeLevel2 = null;
         if (status.getStatusCode().getStatusCode() != null)
         {
            statusCodeLevel2 = status.getStatusCode().getStatusCode().getValue();
         }
         samlServiceProviderSpi.get().loginFailed(statusCodeLevel1, statusCodeLevel2, responseHandler.createResponseHolder(httpResponse));
      }

      if (!(statusResponse instanceof ResponseType))
      {
         throw new InvalidRequestException("Response does not have type ResponseType");
      }

      ResponseType response = (ResponseType) statusResponse;

      List<Object> assertions = response.getAssertionOrEncryptedAssertion();
      if (assertions.size() == 0)
      {
         throw new RuntimeException("IDP response does not contain assertions");
      }

      SamlSpSessionImpl session = createSession(response, idp);
      if (session == null)
      {
         throw new InvalidRequestException("Not possible to login based on the supplied assertions");
      }
      else
      {
         session.setIdentityProvider(idp);
         loginUser(httpRequest, httpResponse, session, statusResponse.getInResponseTo() == null, httpRequest.getParameter(SamlRedirectMessage.QSP_RELAY_STATE));
View Full Code Here

   public void processIDPRequest(HttpServletRequest httpRequest, HttpServletResponse httpResponse, RequestAbstractType request) throws InvalidRequestException
   {
      if (!(request instanceof LogoutRequestType))
      {
         throw new InvalidRequestException("Request should be a single logout request.");
      }

      LogoutRequestType logoutRequest = (LogoutRequestType) request;
      SamlExternalIdentityProvider idp = (SamlExternalIdentityProvider) samlDialogue.getExternalProvider();
View Full Code Here

   public void validateSignature(Key publicKey, Document signedDoc) throws InvalidRequestException
   {
      NodeList nl = signedDoc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
      if (nl == null || nl.getLength() == 0)
      {
         throw new InvalidRequestException("Signature element is not present or has zero length.");
      }

      try
      {
         DOMValidateContext valContext = new DOMValidateContext(publicKey, nl.item(0));
         XMLSignature signature = fac.unmarshalXMLSignature(valContext);
         boolean signatureValid = signature.validate(valContext);

         if (log.isTraceEnabled() && !signatureValid)
         {
            boolean sv = signature.getSignatureValue().validate(valContext);
            log.trace("Signature validation status: " + sv);

            @SuppressWarnings("unchecked")
            List<Reference> references = signature.getSignedInfo().getReferences();
            for (Reference ref : references)
            {
               log.trace("[Ref id=" + ref.getId() + ":uri=" + ref.getURI() + "] validity status:" + ref.validate(valContext));
            }
         }

         if (!signatureValid)
         {
            throw new InvalidRequestException("Invalid signature.");
         }
      }
      catch (XMLSignatureException e)
      {
         throw new RuntimeException(e);
View Full Code Here

TOP

Related Classes of org.jboss.seam.security.external.InvalidRequestException

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.