如何使用Microsoft.IdentityModel.Tokens.Saml2加密SAML声明

问题描述

我们正在使用已签名的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 (将#修改为@)