我正在尝试为重定向绑定创建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签名工具时,我得到不同的结果。
我做错了什么?
问题在于需要签名的字符串位于文本文件中,该文件(通常)在每行末尾都包含一个换行符。但是,应该签名的字符串不包括换行符。
这意味着解决方案是从字符串中删除换行符,例如通过替换
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值后,由于某种原因绑定会被分离。以下是
我们的一个客户正在为他们的标识提供程序提供包含参数的URL。元数据如下所示(为简洁起见,进行了大量缩写): 可以看到,有一个名为“parameter”的参数,其值为“value”。生成的重定向URL中不存在此参数。我稍微调试了一下,发现从绑定(对于HTTP重定向来说是)获取,并委托对消息进行编码。编码器依次在其方法中执行以下操作: 所以出于某种原因,参数被故意无条件地剥离。 为什么会这样?我如何才