У меня есть веб-сервис, который использует безопасность уровня сообщений с сертификатами X.509 в WSE 3.0. Служба использует политику X509v3 для подписи различных элементов в soapheader.Пользовательский X509SecurityTokenManager игнорируется
Мне нужно сделать некоторые пользовательские проверки сертификатов, поэтому я попытался реализовать пользовательский X509SecurityTokenManager и добавил раздел в web.config.
Когда я вызываю службу с помощью моего Wseproxy, я ожидаю ошибку (NotImplementedException), но вызов идет в корыто, а в приведенном ниже примере на консоли отображается «foo».
Вопрос в том, что пропустили? Тип binarySecurityTokenManager в файле web.config соответствует полному классу RDI.Server.X509TokenManager. X509TokenManager наследует от X509SecurityTokenManager (методы altough - это просто заглушки).
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>`
(Кстати, как один формат XML красиво здесь в StackOverflow?)
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);
Я m застрял на .NET 2.0 (VS2005), поэтому я предполагаю, что WCF не может быть и речи, иначе интероперабельность не является проблемой, так как я буду контролировать как клиентов, так и службы в системе.