我正在将服务设置为SAML2.0服务提供商(SP)。因此,我需要生成SAML请求,我需要接受SAML响应。 SAML响应(使用IDP发起的断言)可能没有请求。这只是SSO和SAML的世界,我有这么多工作。
我的感觉是SAML请求或响应可能会或可能不会缩小。 SP对SAML请求进行收缩似乎是一种很好的做法。
请求和响应也是Base 64编码。但这就是我的问题。让我们说我得到了SAML响应。它是Base 64编码。当我解码时,我得到一个字节数组。假设这没有被缩小,我现在需要从该字节数组中获取一个字符串,以便将其视为XML。
我应该为该字符串假设什么编码?
所以,在c#/。NET / MVC世界中:
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?
这是否符合某些标准我错过了(这不是因为不想看)?
非常感谢。
答案 0 :(得分:1)
我在SAML2规范中找不到任何有关使用哪种编码的权威内容。我使用过UTF8,它可以工作。
关于收缩步骤 - 取决于绑定。在重定向绑定中,消息在查询字符串中传递,它被放气。在POST绑定中,它作为表单字段过去,它没有放气。
另外,我建议您查看.NET的现有SAML2堆栈,而不是自己滚动。正确完成SAML2的工作很多,并且很容易出现XML签名包装等安全问题。
答案 1 :(得分:0)
SAML请求和响应为XML格式,因此可以归结为如何编码XML数据的问题。 例如,请参见:Meaning of - <?xml version="1.0" encoding="utf-8"?>
XML的默认编码(如果没有前置码,或者未指定编码)为UTF-8。因此,可以说XML规范权威地指定可以使用UTF-8。
对于我来说还不清楚是否所有SAML实现以及SAML规范本身都允许其他编码,但是使用UTF-8应该是安全的。