2008-09-17 8 views
1

У меня есть веб-сервис, который использует безопасность уровня сообщений с сертификатами 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 не может быть и речи, иначе интероперабельность не является проблемой, так как я буду контролировать как клиентов, так и службы в системе.

ответ

0

Неконкретный конструктивный совет Я знаю, но если бы я был вами, я как можно скорее сошел с WSE3.0. Мы проделали определенную работу, пытаясь заставить ее взаимодействовать с WCF и Java-клиентом в начале этого года, и это был обонятельный KNIGHTMARE.

WCF, с другой стороны, практически нормальный и документация по таким областям довольно хороша. Это вариант для вас?

1

Проблема была обнаружена в другом месте. Мой серверный проект был веб-приложением, и некоторые параметры недоступны для веб-приложений только для веб-сайтов. Поэтому я сделал небольшой проект веб-сайта и сравнил web.configs и заметил, что некоторые строки различаются.

Эти строки были в сайте web.config, но не в моем другом Projekt

<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> 

После того как я добавил эти строки я получил ожидаемую ошибку.