SAML 对话使用什么编码?
What is encoding used for SAML conversations?
我正在将一项服务设置为 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?
这是我错过的某些标准吗(不是因为不想看)?
非常感谢。
我在 SAML2 规范中找不到关于使用何种编码的权威信息。我用过 UTF8 并且它有效。
关于放气步骤 - 这取决于绑定。在消息在查询字符串中传递的重定向绑定中,它被缩小了。在 POST 绑定中,它作为表单字段过去时未缩小。
另外,我建议您查看现有的 .NET SAML2 堆栈,而不是自己动手。正确执行 SAML2 需要大量工作,而且很容易出现 XML 签名包装等安全问题。
SAML 请求和响应采用 XML 格式,因此这归结为如何对 XML 数据进行编码的问题。
参见示例:Meaning of - <?xml version="1.0" encoding="utf-8"?>
XML 的默认编码(如果不存在前导码,或者未指定编码)是 UTF-8。因此,我们可以说XML规范权威地规定可以使用UTF-8。
我不清楚是否所有 SAML 实现和 SAML 规范本身都允许其他编码,但使用 UTF-8 应该是安全的。
我正在将一项服务设置为 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?
这是我错过的某些标准吗(不是因为不想看)?
非常感谢。
我在 SAML2 规范中找不到关于使用何种编码的权威信息。我用过 UTF8 并且它有效。
关于放气步骤 - 这取决于绑定。在消息在查询字符串中传递的重定向绑定中,它被缩小了。在 POST 绑定中,它作为表单字段过去时未缩小。
另外,我建议您查看现有的 .NET SAML2 堆栈,而不是自己动手。正确执行 SAML2 需要大量工作,而且很容易出现 XML 签名包装等安全问题。
SAML 请求和响应采用 XML 格式,因此这归结为如何对 XML 数据进行编码的问题。 参见示例:Meaning of - <?xml version="1.0" encoding="utf-8"?>
XML 的默认编码(如果不存在前导码,或者未指定编码)是 UTF-8。因此,我们可以说XML规范权威地规定可以使用UTF-8。
我不清楚是否所有 SAML 实现和 SAML 规范本身都允许其他编码,但使用 UTF-8 应该是安全的。