2016-11-10 1 views
0

Je souhaite envoyer une demande SAML à mon IDP (Azure AD), mais je ne suis pas sûr de la manière d'envoyer la requête.Comment envoyer une demande SAML?

D'abord, j'ai utilisé OpenSAML pour créer une AuthRequest. Lequel j'ai encodé en tant que chaîne.

Maintenant, je voulais utiliser ApacheHttpClient pour envoyer la demande et lire la réponse et je ne suis pas sûr si OpenSAML fournit des méthodes d'envoi http du tout mon idée était d'utiliser Apaches HttpClient pour cela pour le moment.

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

Je suis coincé maintenant depuis que je ne suis pas sûr comment configurer la demande, at-il besoin d'être un paramètre de requête comme ?saml=.... GET ou dois-je mettre la réponse SAML codée dans le corps comme POST.

Quelqu'un peut-il aider ou clarifier ces problèmes?

Mise à jour de réponse Guillaumes:

Je cela du MetaData déplacés internes:

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

Répondre

2

dépend de liant vous êtes censé utiliser. La documentation IdP ou les métadonnées doivent le mentionner. Il existe plusieurs:

  • Redirect liaison (en utilisant un GET), de loin le plus commun pour les demandes
  • BORNE DE
  • artefact Reliure (plus complexe, mais je l'ai jamais vu utilisé pour les demandes)
  • ...

Je suppose que Redirect la liaison sera utilisée dans votre cas (EDIT: vous avez ajouté les métadonnées de votre IdP, il mentionne que vous pouvez utiliser les deux fixations et POST Redirect). Il est décrit ici: https://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf la page 15.

Version courte: votre devez d'abord utiliser l'algorithme deflate pour compresser votre demande XML, encoder en utilisant base64, encoder en utilisant le codage URL, puis passer comme paramètre de requête nommée 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

J'ai ajouté quelques informations à ma question. – Gobliins

+0

de sorte que vous pouvez utiliser les liaisons Redirect ou POST, qui sont assez communs. – Guillaume

+1

POST contraignant sera plus facile, vous n'avez pas besoin de DEFLATER la demande d'abord, juste pour la base64, puis le passer en tant que données de formulaire (avec le même nom SAMLRequest) – Guillaume