2016-11-10 14 views
0

私はIDP(Azure AD)にSAMLリクエストを送信したいのですが、要求をどのように送信するかわかりません。SAMLリクエストの送信方法

まず、OpenSAMLを使用してAuthRequestを構築しました。どちらが私は文字列としてエンコードされます。

私はApacheHttpClientを使用してリクエストを送信し、応答を読んでいましたが、OpenSAMLがHTTP送信メソッドを提供しているかどうかはわかりません。

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

私はセットアップに要求は、それがGETで?saml=....のようなクエリパラメータである必要がないかを確認していないか、私はPOSTとして体内でエンコードされたSAML応答を入れて持っているので、私は今、立ち往生しています。 。

誰かがこの問題を助けることができますか?ギヨームの答えから

更新:

私は国内避難民メタデータから、これを持っている:

<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のドキュメントやメタデータにはそのことが言及されるべきです。いくつかはあります(GETを使用して)バインディング

  • リダイレクト、
  • バインディングアーティファクト(より複雑な、しかし、私はそれを要求するために使用さ見たことがない)
  • バインディングを抜いて最も一般的な要求
  • のためのPOSTは、
  • ...

私はリダイレクトがあなたのケースで使用されるバインディングと仮定(EDIT:あなたはあなたのIdPからメタデータを追加して、それはあなたが両方のリダイレクトやPOSTバインディングを使用することができることに言及します)。それは、ここで説明されていますhttps://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf 15ページ

ショートバージョン:あなたの必見は、まずSAMLRequest

という名前のクエリパラメータとして渡し、URLエンコーディングを使用して、それをエンコード、BASE64を使用してそれをエンコードし、あなたのXML要求を圧縮するdeflateアルゴリズムを使用
?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

だから、RedirectやPOSTバインディングのいずれかを使うことができます。これは非常にコモンです。 – Guillaume

+1

POSTバインディングが簡単になります。最初にリクエストをDEFLATEする必要はありません。これは、base64にフォームデータ(SAMLRequestと同じ名前)を渡します。 – Guillaume

関連する問題