WSE 3.0のX.509証明書でメッセージ層セキュリティを使用するWebサービスがあります。このサービスは、X509v3ポリシーを使用してsoapheader内のさまざまな要素に署名します。カスタムX509SecurityTokenManagerが無視されました
私はカスタムX509SecurityTokenManagerを実装しようとしたので、web.configにセクションを追加したので、証明書のカスタムチェックを行う必要があります。
サービスを私のWseproxyで呼び出すと、エラー(NotImplementedException)が発生すると予想されますが、コールはトラフになり、下の例ではコンソールに "foo"が表示されます。
質問:何が欠けていますか? web.configのbinarySecurityTokenManager型は、RDI.Server.X509TokenManagerの完全なクラス名と一致します。 X509TokenManagerは X509SecurityTokenManagerから継承しています(詳細なメソッドは単なるスタブです)。簡潔にするために編集した私のweb.configの
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");
}
}
}
最初の数行
<?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>`
(ところで、stackoverflowの時にきれいにここに一つのフォーマットの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);
私は」 NET 2.0(VS2005)で当時のところ止まっていたので、私はWCFが間違っていると推測しています。そうでなければ、相互運用性は問題ではありません。