Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SAML对话使用的编码是什么?_C#_Character Encoding_Saml 2.0 - Fatal编程技术网

C# SAML对话使用的编码是什么?

C# SAML对话使用的编码是什么?,c#,character-encoding,saml-2.0,C#,Character Encoding,Saml 2.0,我正在将服务设置为SAML2.0服务提供商(SP)。因此,我需要生成SAML请求并接受SAML响应。SAML响应(带有IDP发起的断言)可能无需请求。这就是SSO和SAML的世界,我有很多工作要做 我的感觉是SAML的请求或响应可能会也可能不会被压缩。SP减少SAML请求似乎是一种好的做法 请求和响应也是基于64位编码的。但我的问题就在这里。假设我得到了一个SAML响应。它是base64编码的。当我解码时,我得到一个字节数组。假设这没有缩减,我现在需要从该字节数组中获取一个字符串,以便将其视为X

我正在将服务设置为SAML2.0服务提供商(SP)。因此,我需要生成SAML请求并接受SAML响应。SAML响应(带有IDP发起的断言)可能无需请求。这就是SSO和SAML的世界,我有很多工作要做

我的感觉是SAML的请求或响应可能会也可能不会被压缩。SP减少SAML请求似乎是一种好的做法

请求和响应也是基于64位编码的。但我的问题就在这里。假设我得到了一个SAML响应。它是base64编码的。当我解码时,我得到一个字节数组。假设这没有缩减,我现在需要从该字节数组中获取一个字符串,以便将其视为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数据进行编码的问题。 例如,见:

XML的默认编码(如果没有前导码,或者没有指定编码)是UTF-8。因此,我们可以说XML规范权威性地指定可以使用UTF-8


我不清楚所有SAML实现以及SAML规范本身是否允许其他编码,但使用UTF-8应该是安全的。

嘿,安德斯,谢谢!对.NET堆栈感到好奇。我唯一详细看过的是组件空间。它似乎提供了使用SAML做任何事情的选项,包括刷牙,这很好。它有点贵,这还不是世界末日,尽管我似乎只为了一件小事就想要SAML。不过,从文档上看,它们的dll的配置本身似乎很复杂,可能有些过火。你还有其他建议吗?感谢您坦率的回答。我是github.com/KentorIT/authservices的作者/维护者,因此这是我最了解的.NET SAML2库(当然我认为是最好的;-)