2016-10-10 6 views
0

IdP Initiated SSOのASP.NetでPOCを実行しています。 ADFSログインページに自分のAD資格情報で正常にログインしています。 しかし、アサーションのページで、SAMLの応答を取得してユーザーを検証するにはどうすればよいですか? 私は開発者ツールを使用して応答を見ることができますが、どうすればC#で取得できますか?SAMLの返信を読むにはどうすればよいですか?

を私は(私はそれが実際にどのように動作するかについてとてもわからないグーグルの後、このどこかを見つけました。)SAML応答クエリ文字列パラメータの値を印刷してみました:私は試してみました何

ClaimsPrincipal claimsPrincipal = System.Threading.Thread.CurrentPrincipal as ClaimsPrincipal; 

Response.Write("Is user Authenticated = " + claimsPrincipal.Identity.IsAuthenticated.ToString()); 

私はこれを取得する:私が得るすべては、いくつかの暗号化された文字列であるSystem.Security.Principal.GenericPrincipal

string rawSamlData = Request["SAMLResponse"]; 
Response.Write("Raw data \n"); 
Response.Write(rawSamlData); 

rawSamlData = HttpUtility.UrlDecode(rawSamlData); 
Response.Write("after url decode \n"); 
Response.Write(rawSamlData); 

// read the base64 encoded bytes 
byte[] samlData = Convert.FromBase64String(rawSamlData); 
Response.Write("after base 64 \n"); 
Response.Write(samlData); 

// read back into a UTF string 
string samlAssertion = Encoding.UTF8.GetString(samlData); 
Response.Write("saml assertion \n"); 
Response.Write(samlAssertion); 

:私はこれを取得する偽

Response.Write(" Current Principal = " + System.Threading.Thread.CurrentPrincipal.ToString()); 

。 SAMLレスポンスをデコードしてユーザーを認証するにはどうすればよいですか?

答えて

0

SAMLがトークンを暗号化するように設定されている場合、証明書にアクセスすることなくSAMLを読み取ることはできません。

それ以外の場合は、Base64のみです。あなたのためにSAMLをデコードするオンラインサイトが数多くありますので、どのように見えるかを見ることができます。

自分でロールするのではなく、すべてをあなたのために行うKentorのようなSAMLクレンチサイドスタックを使用します。

0

私は同じ問題があり、ADFSがLogout Responseを圧縮して送信していることが判明しました。解凍するには、以下の使用します。

public static Stream Decompress(this byte[] input) 
{ 
     var output = new MemoryStream(); 

     using (var compressStream = new MemoryStream(input)) 
     using (var decompressor = new DeflateStream(compressStream, CompressionMode.Decompress)) 
      decompressor.CopyTo(output); 

     output.Position = 0; 
     return output; 
} 

をそして、あなたはXML文字列は次のように取得する:

  var decompressedStream = data.Decompress(); 
      StreamReader reader = new StreamReader(decompressedStream); 
      decodedSaml = reader.ReadToEnd(); 
関連する問題