2016-11-10 2 views
0

Ich möchte eine SAML-Anfrage an meinen IDP (Azure AD) senden, aber ich bin mir nicht sicher, wie ich die Anfrage überhaupt senden soll.HowTo eine SAML-Anfrage senden?

Zuerst habe ich OpenSAML verwendet, um eine AuthRequest zu erstellen. Was ich als String kodiert habe.

Nun wollte ich ApacheHttpClient verwenden, um die Anfrage zu senden und die Antwort zu lesen, und ich bin mir nicht sicher, ob OpenSAML http sending Methoden überhaupt bietet, meine Idee war, dafür Apatches HttpClient zu verwenden.

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); 

ich jetzt stecken, da ich bin nicht sicher, wie der Antrag auf Einrichtung, braucht es einen Abfrageparameter wie ?saml=.... in GET sein oder muss ich als POST die codierte SAML-Antwort in den Körper gelegt. .

Kann jemand helfen oder dieses Problem klären?

Update von Guillaumes Antwort:

Ich habe dies aus der IDPs Metadata:

<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" /> 

Antwort

2

Abhängig von der Bindung Sie sollen verwenden. Die IdP-Dokumentation oder Metadaten sollten dies erwähnen. Es gibt mehrere:

  • Redirect Bindung (ein GET), die mit Abstand am häufigsten für Anfragen
  • POST Binding
  • Artifact Binding (komplexe, aber ich habe es nie für Anfragen verwendet gesehen)
  • ...

ich nehme an, dass Redirect in Ihrem Fall verwendet werden Binding (EDIT: Sie können die Metadaten aus Ihrem IdP hinzugefügt, erwähnt sie, dass Sie beide Redirect und POST-Bindungen verwenden können). Es ist hier beschrieben: https://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf Seite 15.

Kurzversion: Sie muss zuerst den DEFLATE Algorithmus verwenden, um die XML-Anfrage zu komprimieren, verschlüsselt base64 verwenden, kodieren sie URL-Codierung verwendet wird, dann ist es als Abfrageparameter übergibt namens 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

ich habe einige Informationen zu meiner Frage hinzugefügt. – Gobliins

+0

Sie können also entweder Redirect- oder POST-Bindungen verwenden, die ganz allgemein sind. – Guillaume

+1

POST-Bindung wird einfacher, Sie müssen nicht erst die Anfrage DEFLATE, nur um Base64 es dann als Formulardaten übergeben (mit dem gleichen Namen SAMLRequest) – Guillaume