2016-11-10 33 views
0

Я хочу отправить запрос SAML моему IDP (Azure AD), но не знаю, как отправить запрос вообще.Как отправить запрос SAML?

Сначала я использовал OpenSAML для создания AuthRequest. Который я закодировал как String.

Теперь я хотел использовать ApacheHttpClient для отправки запроса и чтения ответа, и я не уверен, что OpenSAML предоставляет методы отправки http вообще, поэтому моя идея заключалась в том, чтобы использовать Apache HttpClient для этого пока.

String encodedAuthRequest = generateAuthRequest(); 
String url = "http://myidp/samlendpoint"; 
CloseableHttpClient client = HttpClientBuilder.create().build(); 
HttpGet request = new HttpGet(url); 

// add request header 
request.addHeader("User-Agent", USER_AGENT); 

// what is to add else? 

HttpResponse response = client.execute(request); 

Я застрял в настоящее время, так как я не знаю, как настроить запрос, это должно быть параметром запроса, как ?saml=.... в GET или же я должен поставить закодированный ответ SAML в теле, как POST. .

Может кто-нибудь помочь или прояснить эту проблему?

Обновление от Guillaumes ответа:

Я это от ВПЛ МЕТАДАННЫЕ:

<IDPSSODescriptor> 
    <SingleSignOnService 
     Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" 
     Location="https://myidp/saml2" /> 
    <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
     Location="https://myidp/saml2" /> 

ответ

2

Зависит от связывания вы должны использовать. Документация IdP или метаданные должны упоминать об этом. Есть несколько:

  • Redirect Binding (с использованием GET), на сегодняшний день наиболее распространенным для запросов
  • POST Binding
  • Артефакт Binding (более сложный, но я никогда не видел, как это используется для запросов)
  • ...

Я полагаю, что Redirect Binding будет использоваться в вашем случае (EDIT: вы добавили метаданные из вашего IdP, он упоминает, что вы можете использовать как перенаправлении и POST привязки). Он описан здесь: https://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf страницы 15.

Короткая версия: ваше сусло первого использовать алгоритм DEFLATE для сжатия XML запроса, кодировать его с помощью base64, кодировать его, используя кодировку URL, а затем передать его в качестве параметра запроса имени SAMLRequest

?SAMLRequest=<your url-encoded base64-encoded deflated authnrequest> 

https://en.wikipedia.org/wiki/SAML_2.0#SP_Redirect_Request.3B_IdP_POST_Response

+0

Я добавил некоторую информацию на мой вопрос. – Gobliins

+0

, поэтому вы можете использовать переадресацию или привязки POST, которые являются довольно обычными. – Guillaume

+1

Связывание POST будет проще, вам не нужно сначала отбрасывать запрос, а только base64, а затем передавать его как данные формы (с тем же именем SAMLRequest) – Guillaume