2016-04-25 76 views
0

的價值我曾嘗試多種方法來解析SAMLC#SAML解析到XML得到觀衆

 string raw = txt.Text; 
     if (raw.Contains('%')) 
     { 
      raw = HttpUtility.UrlDecode(raw); 
     } 
     byte[] xmlMessageBytes = Convert.FromBase64String(raw); 
     XmlDocument document = new XmlDocument { PreserveWhitespace = true }; 
     document.LoadXml(Encoding.UTF8.GetString(xmlMessageBytes)); 

但我得到的響應隨機字符。但是當我使用Firefox插件SAMLTracer時,它工作得很好。

任何幫助,非常感謝。

+0

除非這樣做爲了好玩/學習,我建議你不要創建自己的SAML2執行。這是很多工作,很容易使關鍵的安全機制出錯(XML簽名包裝漏洞在SAML實現中很常見)。 –

回答

0

SAML消息是否作爲查詢字符串參數傳遞?在這種情況下,它使用Http Redirect綁定,並且消息內容是deflate編碼的。

以供參考,這是重定向從Kentor.AuthServices庫解碼:

using (var compressed = new MemoryStream(payload)) 
{ 
    using (var decompressedStream = new DeflateStream(compressed, CompressionMode.Decompress, true)) 
    { 
    using (var deCompressed = new MemoryStream()) 
    { 
     decompressedStream.CopyTo(deCompressed); 
     var xml = new XmlDocument() 
     { 
     PreserveWhitespace = true 
     }; 

     xml.LoadXml(Encoding.UTF8.GetString(deCompressed.GetBuffer())); 

     // Simplified, the real code does some more work. 
     return xml; 
    } 
    } 
} 
+0

非常感謝,有沒有一種方法可以在2.0中使用它,原因是它在4.0框架中不受支持 – learner999

+0

在CopyTo 2.0中存在問題 – learner999