2

Saml2SecurityToken に変換したい SAML レスポンスがあります。これが私がすることです:

// 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 ID に変換するためのコードがあります。

于 2013-11-05T19:56:02.170 に答える