Как отправить ответ OpenSaml?

Я создаю org.opensaml.saml.saml2.core.Response с помощью openSAML v3.2.0. Я подписал ответ и хотел бы отправить его.

Я пытался следовать книге openSAML (Руководство по OpenSAML v3), но, похоже, это не помогло в моем сценарии. У меня есть демонстрационный проект С#, который в основном отправляет ответ по HTTPPost. Я пишу то же самое в java с помощью opensaml. Должен ли я создавать артефакт, как предлагает книга? Пример книги предполагает, что я отправляю ArtifactResolve с использованием SOAP, даже если я создаю ответ.

С приведенным выше объектом ответа я хотел бы опубликовать объект ответа в IDP.

Каков наилучший способ добиться этого? - Является ли хорошей идеей создание объекта Envelope? Как с помощью объекта ответа из пакета saml2 создать org.opensaml.soap.soap11.Envelope?

Любая помощь высоко ценится! Спасибо!


person veggirice    schedule 11.09.2017    source источник
comment
API SAML имеет WSDL. Необходимо задокументировать, как выглядит запрос SAML и где его размещать.   -  person Minh Kieu    schedule 11.09.2017
comment
Я предполагаю, что мой вопрос больше о том, как создать клиент SOAP. Не могли бы вы подробнее рассказать о API SAML имеет WSDL?   -  person veggirice    schedule 11.09.2017
comment
Вам нужно отправить запрос SAML на сервер SAML, верно? Веб-служба сервера SAML имеет WSDL, который определяет, как выглядит XML-сообщение и где находятся конечные точки сервера. Я бы порекомендовал вам прочитать, как работает SAML. Затем получите образец запроса и ответа SAML. Вам понадобится открытый ключ SSL, чтобы иметь возможность связываться с сервером SAML. Если вы не знаете, о чем я говорю, спросите у человека, который обслуживает сервер.   -  person Minh Kieu    schedule 11.09.2017
comment
Я создал ответ saml и подписал его закрытым ключом. у поставщика услуг уже есть мой открытый ключ. Думаю, мне нужно уточнить мой вопрос. мой вопрос больше связан с использованием правильных API для создания моего решения. используя API org.opensaml.saml.saml2.core.Response для построения моего ответа, я не могу понять, какой API использовать для создания контекста сообщения, прежде чем даже отправка контекста repsonse/message вступит в игру .   -  person veggirice    schedule 14.09.2017
comment
Насколько я помню, вы отправляете своему провайдеру безопасности XML-запрос SAML, содержащий учетные данные субъекта, открытый ключ, подпись и т. д. То, что вы получаете от своего IDP, — это SamlResponse. Опять же, XML был подписан и не может быть изменен. Для дальнейших операций ответный XML используется для проверки подлинности, и это должно быть так. Я сбит с толку, когда вы сказали, что вам нужно создать ответ SAML?   -  person Minh Kieu    schedule 15.09.2017


Ответы (1)


Вам не нужно создавать артефакт, как предлагает книга. Использование Artifacts имеет некоторые преимущества в плане безопасности, конфиденциальности и другие преимущества. Посмотрите ответ Скотта Т., чтобы понять преимущества использования привязки артефакта - https://stackoverflow.com/a/13618537/1163424

По вашему вопросу вы также можете передать ответ SP, используя привязку POST. Способ сделать это — закодировать ваш ответ XML (с подписанным утверждением) в строку Base64 и заставить клиентское веб-приложение отправить его в SP ACS (служба потребителей утверждений).

Вы передаете параметр SAMLResponse со строкой base64 в качестве значения и параметр RelayState, который будет использоваться для установки состояния в веб-приложении SP, как написано в Спецификация привязок SAML 2 стр. 21.

Кроме того, я предлагаю использовать инструмент SAML для проверки вашего ответного сообщения.

person Tomer Sela    schedule 18.09.2017
comment
Закончилось использованием HTTPPostEncoder из org.opensaml.saml.saml2.binding.encoding.impl.HTTPPostEncoder. Спасибо. - person veggirice; 03.10.2017