0

2つのSAML2.0アサーションシグネチャを検証する必要があります。すべてのキーとトークンのパラメーターを解析できます。次に、.NET CryptoUtils.VerifySignature()またはその他の関数を使用して署名を検証します。署名されたテキストとbyte[]配列としての署名、およびハッシュOIDがあります。署名値、係数、指数などのRSAおよびSAMLトークンパラメーターがあります。不足しているのは、.NET VerificationSignature()ルーチンに送信するx509証明書です。パラメータからプログラムで証明書を作成する方法がわかりません。

また、SAML 2.0トークン(リクエストとレスポンス)の作成、解析、検証を処理するライブラリ、c#およびJavaに関する提案もありがたいです。

4

1 に答える 1

1

C#では、次を使用できます...

System.Security.Cryptography.Xml.SignedXml.CheckSignature(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, bool verifySignatureOnly)

...署名を検証します。基本的に、次のように機能します。

 using System.Xml;
 using System.Security.Cryptography.X509Certificates;
 using System.Security.Cryptography.Xml;
 using System.Text;

 namespace MySamlDocumentExample
 {
     public class Saml20Transaction : SignedXml
     {
         public Saml20Transaction(XmlDocument doc) 
             : base (doc)
         {

         }
     }

     public class SamlVerifier
     {
         readonly XmlDocument _mySamlDocument = new XmlDocument();

         public SamlVerifier(string saml)
         {
             _mySamlDocument.LoadXml(saml);
         }

         public X509Certificate2 X509Certificate
         {
             get
             {
                 return new X509Certificate2(
                     Encoding.ASCII.GetBytes(X509CertificateString));
             }
         }

         public string X509CertificateString
         {
             get
             {
                 XmlNodeList xmlNodeList = _mySamlDocument.GetElementsByTagName("X509Certificate");
                 return xmlNodeList[0].InnerText;
             }
         }

         public bool ValidateSignature()
         {
             Saml20Transaction saml20Transaction = new Saml20Transaction(_mySamlDocument);
             XmlNodeList xmlNodeList = _mySamlDocument.GetElementsByTagName("Signature");
             saml20Transaction.LoadXml((XmlElement)xmlNodeList[0]);
             return saml20Transaction.CheckSignature(X509Certificate, true);
         }
     }
 }
于 2012-06-15T17:40:26.800 に答える