1

WSE3.0のX.509証明書でメッセージレイヤーセキュリティを使用するWebサービスがあります。このサービスは、X509v3ポリシーを使用して、soapheaderのさまざまな要素に署名します。

証明書に対してカスタムチェックを行う必要があるため、カスタムX509SecurityTokenManagerを実装して、web.configにセクションを追加しました。

Wseproxyを使用してサービスを呼び出すと、エラー(NotImplementedException)が発生しますが、呼び出しはトラフになり、以下の例では、コンソールに「foo」が出力されます。

問題は、何が欠けているのかということです。web.configのbinarySecurityTokenManagerタイプは、RDI.Server.X509TokenManagerの完全なクラス名と一致します。X509TokenManagerはX509SecurityTokenManagerを継承します(ただし、メソッドは単なるスタブです)。

using System;
using System.Xml;
using System.Security.Permissions;
using System.Security.Cryptography;
using Microsoft.Web.Services3;
using Microsoft.Web.Services3.Security.Tokens;

namespace RDI.Server
{

[SecurityPermissionAttribute(SecurityAction.Demand,Flags = SecurityPermissionFlag.UnmanagedCode)]
public class X509TokenManager : Microsoft.Web.Services3.Security.Tokens.X509SecurityTokenManager
{
    public X509TokenManager() : base()
    {
        throw new NotImplementedException("Stub");
    }

    public X509TokenManager(XmlNodeList configData) : base(configData)
    {
        throw new NotImplementedException("Stub");
    }

    protected override void AuthenticateToken(X509SecurityToken token)
    {
        base.AuthenticateToken(token);
        throw new NotImplementedException("Stub");
    }
}
}

簡潔にするために編集した、web.configの最初の数行

<?xml version="1.0"?>
  <configuration><configSections><section name="microsoft.web.services3" type="..." />
  </configSections>
  <microsoft.web.services3>
    <policy fileName="wse3policyCache.config" />
    <security>
      <binarySecurityTokenManager>
        <add type="RDI.Server.X509TokenManager" valueType="http://docs.oasis-open.org/..." />
      </binarySecurityTokenManager>
    </security>
  </microsoft.web.services3>`

(ところで、ここスタックオーバーフローで1つのフォーマットxmlをうまく行うにはどうすればよいですか?)

Administration.AdministrationWse test = new TestConnector.Administration.AdministrationWse();

X509Certificate2 cert = GetCert("RDIDemoUser2");
X509SecurityToken x509Token = new X509SecurityToken(cert);
test.SetPolicy("X509");
test.SetClientCredential(x509Token);

string message = test.Ping("foo");

Console.WriteLine(message);

私は当分の間.NET2.0(VS2005)で立ち往生しているので、WCFは問題外だと思います。そうでなければ、システム内のクライアントとサービスの両方を制御できるため、相互運用性は問題になりません。

4

2 に答える 2

1

問題は他の場所にありました。私のserverprojectはWebアプリであり、一部のオプションはWebサイト専用のWebアプリでは利用できませんでした。そこで、小さなWebサイトプロジェクトを作成し、web.configsを比較したところ、一部の行が異なっていることに気づきました。

これらの行はWebサイトweb.configにありましたが、他のプロジェクトにはありませんでした

  <soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  <soapExtensionImporterTypes>
    <add type="Microsoft.Web.Services3.Description.WseExtensionImporter, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </soapExtensionImporterTypes>

これらの行を追加した後、予期したエラーが発生しました。

于 2008-09-18T12:31:59.197 に答える
0

私が知っている特に建設的なアドバイスではありませんが、もし私があなただったら、できるだけ早くWSE3.0を降りるでしょう。今年の初めに、WCFおよびJavaクライアントと相互運用できるようにするためにいくつかの作業を行いましたが、これは絶対的なKNIGHTMAREでした。

一方、WCFは実質的に正気であり、このような領域に関するドキュメントはかなり優れています。それはあなたにとっての選択肢ですか?

于 2008-09-17T09:59:33.410 に答える