我正在ASP.Net中为IdP启动的SSO做POC。 我在ADFS登录页面上使用AD凭据成功登录。 但是,在我的断言页面上,我如何获得SAML响应并验证用户? 我可以使用开发人员工具查看响应但是如何使用c#?
来获取它我尝试了什么:
我尝试从SAMLResponse查询字符串参数打印值(我在google搜索后发现了这个。所以不确定它是如何工作的。)
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 :(得分:0)
如果您的SAML配置为加密令牌,则无法访问证书就无法读取它。
否则,它只是Base64。有许多在线网站会为您解码SAML,以便您可以看到它的样子。
而不是自己动手使用像Kentor这样的SAML灵巧的侧边堆栈,它将为您完成所有工作。
答案 1 :(得分: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();