2016-04-15 9 views
1

サービスをSAML2.0サービスプロバイダ(SP)に設定しています。 SAMLリクエストを生成する必要があり、SAMLレスポンスを受け入れる必要があります。 SAMLレスポンス(IDPによって開始されたアサーションを持つ)は、要求なしで来るかもしれません。これは単なるSSOとSAMLの世界であり、私はこれを大いに活用しています。SAML会話に使用されるエンコーディングとは何ですか?

私の感覚は、SAMLリクエストまたはレスポンスが収縮しているかどうかです。 SPがSAML要求を収縮させることは良い習慣のようです。

リクエストとレスポンスもBase64エンコードされています。しかし、ここに私の質問があります。 SAMLレスポンスを取得したとしましょう。それはBase 64 Encodedです。私がそれをデコードすると、バイト配列が得られます。これが収縮しないと仮定すると、XMLとして扱うために、バイト配列から文字列を取得する必要があります。

この文字列のエンコーディングについて教えてください。

ので、C#で/ MVC/NETの世界:。

public ActionResult ConsumeSamlAssertion(string samlResponse) 
    { 
     if (string.IsNullOrWhiteSpace(samlResponse)) 
     { 
      return Content("Consumption URL hit without a SAML Response"); 
     } 

     // MVC Already gives me this URL-decoded 

     byte[] bytes = Convert.FromBase64String(samlResponse); 

     // For this question, assume that this is not deflated. 

     string samlXmlIfAscii = Encoding.ASCII.GetString(bytes); 
     string samlXmlIfUtf8 = Encoding.UTF8.GetString(bytes); 

     // Which is correct? Or is there a different one? 

は、これは私が(見ての希望のためではないです)見逃しているいくつかの標準にですか?

多くのありがとうございます。

答えて

1

SAML2仕様では、どのエンコーディングを使用するべきかについて権威のあるものは見つかりません。私はUTF8を使用して、それは動作します。

deflateステップについては、バインディングに依存します。メッセージがクエリ文字列で渡されるリダイレクトバインディングでは、それは収縮します。フォームフィールドとして過去のPOSTバインディングでは、それは収縮しません。

また、独自のSAML2スタックを.NETの代わりに使用することをお勧めします。 SAML2の作業は大変な作業ですが、XML署名の折り返しなどのセキュリティ上の問題が発生するのは簡単です。

+1

ちょっとアンデルス、ありがとう! .NETスタックについて興味があります。私が詳細に見てきた唯一のものはコンポーネントスペースです。それは、私の歯を磨くことを含むすべてを行うためにSAMLを使用するオプションを与えるようです。ちょっと高価ですが、これは世界の終わりではありませんが、私はSAMLをちょっとしたものにしたいと思っています。ほとんどの場合、ドキュメントを見ると、単にDLLの設定自体が複雑で恐ろしいものになっているようです。あなたは他の提案がありますか?率直な答えを感謝します。 –

+0

私はgithub.com/KentorIT/authservicesの作成者ですので、私が最もよく知っている.NET SAML2ライブラリです(もちろん、私が一番いいと思うのは;-) –

+0

ありがとう、ありがとう。私はそれをチェックすることを楽しみにしています。 –