将SAML2响应反序列化为Saml2SecurityToken时出错

时间:2012-11-07 15:51:35

标签: c# .net c#-4.0 single-sign-on saml-2.0

我有一个SAML Reponse,我想将其转换为Saml2SecurityToken。 这就是我的工作:

// SAMLResponseString is a base64 encode SAML2 XML string
string SAMLResponse = SamlHelper.DecodeFrom64(SAMLResponseString);
XmlReader reader = new XmlTextReader(new StringReader(SAMLResponse));

var certificate = new X509Certificate2("[path]", "[password]");
List<SecurityToken> tokens = new List<SecurityToken>();
tokens.Add(new X509SecurityToken(certificate));

SecurityTokenResolver outOfBandTokenResolver =
  SecurityTokenResolver.CreateDefaultSecurityTokenResolver(new 
  ReadOnlyCollection<SecurityToken>(tokens), true);
var securityToken = (Saml2SecurityToken) WSSecurityTokenSerializer.DefaultInstance.ReadToken(reader, null);

在(WSSecurityTokenSerializer的)最后一行,我收到以下错误:

Cannot read the token from the 'Response' element with the 'urn:oasis:names:tc:SAML:2.0:protocol' namespace for BinarySecretSecurityToken, with a '' ValueType. If this element is expected to be valid, ensure that security is configured to consume tokens with the name, namespace and value type specified.

我的回复开始于:(没有&lt;和samlp:Response之间的空格):

< samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Version="2.0">

有谁知道这里出了什么问题?

1 个答案:

答案 0 :(得分:0)

虽然.NET支持SAML2断言(来自.NET 4.5),但它不支持samlp:Response所属的SAML2协议。您需要滚动自己的代码以从响应消息中获取断言并将其传递给框架方法,或者使用第三方库。

我已经编写了一个open source library来处理ASP.NET应用程序中的传入SAML2响应,在那里你可以找到用于读取和验证响应消息并将其转换为.NET身份的代码。