Проверить ответ SAML - PullRequest
       3

Проверить ответ SAML

0 голосов
/ 09 октября 2018

У меня есть ответ SAML и несколько других данных.Исходя из этого, мне нужно проверить, был ли ответ подделан или нет.Как я могу это сделать?

Что у меня есть?

  1. Ответ SAML с подписанным сообщением и подтверждением

  2. IdP EntityId

  3. SP EntityId

  4. Конечная точка SP ACS

  5. Целевой URL

  6. Сертификат IdP в формате X509.

Необходимый язык: JAVA

1 Ответ

0 голосов
/ 10 октября 2018

Получил решение.Если кто-то ищет это.

try {
            InputStream is = new FileInputStream("<CERTIFICATE FILE>");
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            Certificate cert = cf.generateCertificate(is);
            X509Certificate x509Certificate = (X509Certificate) cert;
            PublicKey pk = x509Certificate.getPublicKey();
            BasicX509Credential publicCredential = new BasicX509Credential();
            publicCredential.setPublicKey(pk);
            SignatureValidator signatureValidator = new SignatureValidator(publicCredential);
            SignableSAMLObject signableSAMLObject = (SignableSAMLObject) <XML OBJECT>;
            Signature signature = signableSAMLObject.getSignature();
            signatureValidator.validate(signature);
        }catch(Exception ex){
            // fail this.
        }

Объект XML можно получить из сообщения SAML с помощью маршаллера следующим образом:

String encodedMessage = request.getParameter(PARAM_SAML);
String decodedMessage = new String(Base64.decodeBase64(encodedMessage.getBytes()));
DefaultBootstrap.bootstrap();
BasicParserPool ppMgr = new BasicParserPool();
ppMgr.setNamespaceAware(true);
Document responseRoot = ppMgr.parse(new StringReader(decodedMessage));
UnmarshallerFactory unmarshallFactory = Configuration.getUnmarshallerFactory();
Unmarshaller unmarshaller = unmarshallFactory.getUnmarshaller(responseRoot.getDocumentElement());
XMLObject obj = unmarshaller.unmarshall(responseRoot.getDocumentElement());
...