1

アプリケーション IdP から有効な SAML 2 トークンを取得しました。

以下のように WIF コードを使用して読み取ろうとすると、次のエラーが発生します。

BinarySecretSecurityToken の 'urn:oasis:names:tc:SAML:2.0:protocol' 名前空間で、'' ValueType を持つ 'Response' 要素からトークンを読み取ることができません。この要素が有効であると予想される場合は、指定された名前、名前空間、および値の型を持つトークンを消費するようにセキュリティが構成されていることを確認してください。

ここに私が使用しているコードと、失敗した場所を示すコメントがあります

        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 名前空間の例外ですが、「名前、名前空間、および値の型が指定されたトークンを使用するようにセキュリティが構成されていることを確認する」方法がわかりません。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

2

さて、私は問題を発見しました。それは、次のような型定義のない暗号化されたアサーションを使用した SAML 応答でした。

受信した SAML は次のとおりです。

<saml:EncryptedAssertion>

あるべきだったとき

<saml:EncryptedAssertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">

もちろん、私のコードでこれを修正することは可能ですが、根底にある問題は、System.Xml と WIF では、完全に有効な xml がないと通過できないということでした。

これが途中で誰かに役立つことを願っています。

于 2012-07-02T08:41:54.353 に答える