问题描述
我们正在使用已签名的SAML响应与第三方集成。我们的安全团队也希望我们对此进行加密。我研究了如何做到这一点,包括研究了this个类似的问题,并尝试了答案中建议的方法,但是我无法使它起作用,并且老实说仍然有些笨拙。
为简洁起见,我省略了生成XML的代码,但如果有帮助,可以添加它。它使用SignedXML对XML进行签名。我们已经获得了X.509证书,该证书需要用于加密。我使用下面的代码来设置EncryptingCredentials:
var sec = @"<my cert data>";
X509Certificate2 signingCertFromMetadata = new X509Certificate2();
signingCertFromMetadata.Import(Encoding.Default.GetBytes(sec));
var x509EncryptingCredentials = new X509EncryptingCredentials(signingCertFromMetadata);
var encryptingCredentials = new EncryptingCredentials()
{
SecurityKey = x509EncryptingCredentials.SecurityKey,SecurityKeyIdentifier = x509EncryptingCredentials.SecurityKeyIdentifier,Algorithm = x509EncryptingCredentials.Algorithm
};
assertion.EncryptingCredentials = encryptingCredentials;
后来XML的编写如下:
Saml2SecurityTokenHandler tokenHandler = new Saml2SecurityTokenHandler();
Saml2SecurityToken token = new Saml2SecurityToken(assertion);
var buffer = new StringBuilder();
using (var stringWriter = new StringWriter(buffer))
using (var xmlWriter = XmlWriter.Create(stringWriter,new XmlWriterSettings()))
{
tokenHandler.Writetoken(xmlWriter,token);
}
tokenHandler.Writetoken
引发以下异常System.Security.Cryptography.CryptographicException: 'ID3064: Token EncryptingCredentials must specify a symmetric key.'
。当未分配assertion.EncryptingCredentials
时,此代码不会引发异常,但是(显然)它不会对SAML进行加密。
此异常所建议的证书/密钥是否存在问题,或者在加密过程中是否存在其他错误?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)