2016-10-10 165 views
0

我正在爲IdP啓動的SSO在ASP.Net中執行POC。 我使用ADFS登錄頁面上的AD憑據成功登錄。 但是,在我的斷言頁面上,如何獲得SAML響應並驗證用戶? 我可以看到使用開發人員工具的反應,但我怎樣才能得到它使用C#?如何閱讀SAML響應?

我曾嘗試:

我試圖打印從SAMLResponse查詢字符串參數值(我發現這個地方谷歌搜索後,所以不知道它是如何工作)。

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

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

我得到這個爲:假

Response.Write(" Current Principal = " + System.Threading.Thread.CurrentPrincipal.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); 

我得到的一些加密的字符串。我如何將其解碼爲SAML響應並對用戶進行身份驗證?

回答

0

如果您的SAML配置爲對令牌進行加密,則無法訪問證書就無法讀取它。

否則,它只是Base64。有許多在線網站會爲您解碼SAML,因此您可以看到它的樣子。

而不是自己動手使用像Kentor這樣的SAML clent側面堆棧,它將爲您完成所有操作。

0

我有同樣的問題,事實證明,ADFS發送壓縮的註銷響應。使用以下方法來解壓:

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