我的应用程序IdP中有一个有效的SAML 2令牌:
当我尝试使用如下的WIF代码阅读时,我收到以下错误:
无法从'Response'元素读取带有'urn:oasis:names:tc:SAML:2.0:protocol'的BinarySecretSecurityToken命名空间的标记,带有''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命名空间异常,但我不知道如何'确保安全性配置为使用指定了名称,命名空间和值类型的令牌
有人能指出我正确的方向吗?
答案 0 :(得分:2)
我发现了这个问题,它是带有加密断言的SAML响应,没有类型定义如下:
收到的SAML如下:
<saml:EncryptedAssertion>
应该是什么时候
<saml:EncryptedAssertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
当然可以在我的代码中解决这个问题,但是潜在的问题是System.Xml和WIF不会让我在没有完全有效的xml的情况下通过。
我希望这可以帮助一路上的人。