2

我有一个 SAML 响应,我想将其转换为 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.

我的回复开始于:(< 和 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">

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

4

1 回答 1

0

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

我编写了一个开源库,用于处理 ASP.NET 应用程序中的传入 SAML2 响应,您可以在其中找到用于读取和验证响应消息并将其转换为 .NET 标识的代码。

于 2013-11-05T19:56:02.170 回答