当前位置: 首页 > 知识库问答 >
问题:

我的SAML重定向绑定签名有什么问题?

郏稳
2023-03-14

我正在尝试为重定向绑定创建SAML AuthnRequest。

这是我的(匿名)授权请求:

<samlp:AuthnRequest AssertionConsumerServiceURL="https://tempuri.org/sp/AssertionConsumerService"
                    Destination="https://anothertempuri.org/broker/sso"
                    ID="a18471d18a93430a8b97b05989ae238f"
                    IssueInstant="2017-07-23T14:15:26Z"
                    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
                    Version="2.0"
                    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
                    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">...</saml:Issuer>
</samlp:AuthnRequest>

我有一个中继状态:

RelayState: 821eea8785134bbc8263be6838eda19d

SigAlg是http://www.w3.org/2001/04/xmldsig-more#rsa-sha256

我对请求进行放气,然后进行base64编码,然后进行URL编码。(缩小后的base64编码结果在SAMLTool解码器中检出。)

用于创建签名的结果字符串如下所示:

SAMLRequest=fZL...5MP&RelayState=821eea8785134bbc8263be6838eda19d&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256

我尝试使用openssl创建签名:

openssl sha -sha256 -sign example.pem -out signed.sha256 theStringInAFile.txt
openssl base64 -in signed.sha256

并且使用C#

byte[] data = File.ReadAllBytes(FileToSign);
data = SignBytes(data);
X509Certificate2 certificate = new X509Certificate2(CertFile, Password);
using (RSA rsa = certificate.GetRSAPrivateKey())
{
    data = rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}
signedData = Convert.ToBase64String(data, Base64FormattingOptions.None);

以及(也使用c#):

var signatureDescription = (SignatureDescription)CryptoConfig.CreateFromName("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");
HashAlgorithm hashAlg = signatureDescription.CreateDigest();
hashAlg.ComputeHash(Encoding.UTF8.GetBytes(signString));

X509Certificate2 certificate = new X509Certificate2(CertFile, Password);

AsymmetricSignatureFormatter asymmetricSignatureFormatter = signatureDescription.CreateFormatter(certificate.GetRSAPrivateKey());

byte[] signatureValue = asymmetricSignatureFormatter.CreateSignature(hashAlg);
return Convert.ToBase64String(signatureValue);

这三种方法产生相同的base64编码字符串(openssl结果中的换行除外)。

不幸的是,当我尝试与经纪人一起使用时,他们说签名有问题,当我将相同的信息提供给SAMLTool AuthnRequest签名工具时,我得到不同的结果。

我做错了什么?

共有1个答案

江煜
2023-03-14

问题在于需要签名的字符串位于文本文件中,该文件(通常)在每行末尾都包含一个换行符。但是,应该签名的字符串不包括换行符。

这意味着解决方案是从字符串中删除换行符,例如通过替换

byte[] data = File.ReadAllBytes(FileToSign);

从C#码的第一块开始

string signString = File.ReadAllText(FileToSign);
signString = signString.TrimEnd('\r', '\n');
byte[] data = Encoding.UTF8.GetBytes(signString);
 类似资料:
  • 我正在通过HTTP-重定向绑定接收SAML请求,SAML请求的内容如下 {"SigAlg"= 它还有一个签名值 2.在一个新的研究的基础上,在一个新的研究的基础上,在一个新的研究的基础上,在一个新的研究的基础上,在一个新的研究的基础上,在一个新的研究的基础上,在一个新的研究的基础上,在一个新的研究的一个新的研究(2)在一个新的研究(2)在一个新的研究的一个新的研究(2)在一个新的研究(2)的研究(

  • 此查询是对后HTTP重定向绑定SAML请求中提出的问题的补充。 我试图通过HTTP重定向绑定发送SAML身份验证请求来实现dotnet SSO解决方案。在生成SAML AuthnRequest并使用SP的私有证书计算签名之后,我尝试了两种方法将签名添加到url中。 > < li> 生成SAML验证请求XML。 使用生成XML签名标签的SAML AuthnRequest XML计算签名,如下所示 在

  • 我刚刚开始与SSO Saml的工作,有一些混乱,想澄清。-如果我必须用三种机制编码AuthnRequest,Deflate编码,Base64编码,URL编码。我必须使用HTTP-Redirect来发送消息请求吗?-HTTP-重定向绑定我参考https://docs . oasis-open . org/security/SAML/v 2.0/SAML-bindings-2.0-OS . pdf第1

  • 我已经配置了一个SAML2。Okta中的0 IdP(即Okta是SAML2.0 SP)。 通过SAML成功完成IdP启动的身份验证后,我希望用户被重定向到自定义应用程序。因此,我将Okta(SP)上的“中继状态”配置为h_ttps://mydomain/customApp/customPath. 但是,出于安全原因,我认为SP没有将用户重定向到绝对URL,而是将get重定向到h_ttps://my

  • 初始值设置为true后,我与切换按钮的双向绑定将被分离。当我取消按钮时,它不再绑定。 我有两个切换按钮: 我希望绑定到的BackupViewModel(实例为BackupVM)中的我的属性: 当一个被切换时,我会显示一个特定的用户控件(视图)并隐藏另一个。我需要做的是告诉我的底层视图模型视图是隐藏的,这样我就可以停止刷新一些数据的计时器。加载IsChecked值后,由于某种原因绑定会被分离。以下是

  • 我用 上面写着 我知道是,因为它抱怨包不存在。我应该在哪里添加依赖项,以便我的代码能够成功地编译和调谐?