Актуальную версию документа см. на сайте Министерства цифрового развития, связи и массовых коммуникаций Российской Федерации по адресу https://digital.gov.ru/ru/documents/6186/.

Считывание ответа <Response>

Для считывания ответа <Response>, например, из сервлета, ответ извлекается из структуры "HttpServletRequest":

responseMessage = request.getParameter("SAMLResponse").toString();

Извлеченное сообщение "responseMessage" необходимо преобразовать (unmarshal) и извлечь сообщение <Response>:

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

documentBuilderFactory.setNamespaceAware(true);

DocumentBuilder docBuilder = documentBuilderFactory.newDocumentBuilder();

Document document = docBuilder.parse(new ByteArrayInputStream(authReqStr.trim().getBytes()));

Element element = document.getDocumentElement();

UnmarshallerFactory unmarshallerFactory = Configuration.getUnmarshallerFactory();

Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(element);

Response response = (Response) unmarshaller.unmarshall(element);

Далее с извлеченным SAML 2.0 Response message можно выполнять операции. Например, извлечем Subject's Name Id и сертификат:

String subject = response.getAssertions().get(0).getSubject().getNameID().getValue();

String certificate =

response.getSignature().getKeyInfo().getX509Datas().get(0).getX509Certificates().get(0).getValue();