我有一个来自我的应用程序 IdP 的有效 SAML 2 令牌:
当我尝试使用如下 WIF 代码读取它时,出现以下错误:
无法从具有 BinarySecretSecurityToken 的“urn:oasis:names:tc:SAML:2.0:protocol”命名空间的“Response”元素中读取令牌,并带有“”ValueType。如果预计此元素有效,请确保将安全性配置为使用指定名称、命名空间和值类型的令牌。
这是我正在使用的代码,其中有一条注释显示它失败的地方
string certPath = @"G:\Projects\myAPp\SAMLHandlingTests\bin\Debug\SSO.cer";
X509Certificate2 cert = new X509Certificate2(certPath);
//X509Certificate2 cert = new X509Certificate2(certPath, "LetMeIn!");
// Open the SAML
string samlPath = @"G:\Projects\myAPp\SAMLHandlingTests\bin\Debug\SAML.xml";
string samlRaw = File.OpenText(samlPath).ReadToEnd();
XmlReader rdr = XmlReader.Create(samlPath);
List<System.IdentityModel.Tokens.SecurityToken> tokens = new List<System.IdentityModel.Tokens.SecurityToken>();
var token = new X509SecurityToken(cert);
tokens.Add(token);
SecurityTokenResolver resolver =
SecurityTokenResolver.CreateDefaultSecurityTokenResolver(
new System.Collections.ObjectModel.ReadOnlyCollection<SecurityToken>(tokens), true);
//Fails on next line!
SecurityToken securityToken = System.ServiceModel.Security.WSSecurityTokenSerializer.DefaultInstance.ReadToken(rdr, resolver);
SamlSecurityToken deserializedSaml = securityToken as SamlSecurityToken;
问题是 XML 命名空间异常,但我不知道如何“确保将安全配置为使用指定名称、命名空间和值类型的令牌”
有人可以指出我正确的方向吗?