Пользовательский X509SecurityTokenManager игнорируется - PullRequest
1 голос
/ 17 сентября 2008

У меня есть веб-сервис, который использует безопасность уровня сообщений с сертификатами X.509 в WSE 3.0. Служба использует политику X509v3 для подписи различных элементов в soapheader.

Мне нужно выполнить некоторые пользовательские проверки сертификатов, поэтому я попытался реализовать пользовательский X509SecurityTokenManager и добавил раздел в web.config.

Когда я вызываю службу с помощью моего Wseproxy, я ожидаю ошибку (NotImplementedException), но вызов проходит через него, и в приведенном ниже примере на консоли выводится «foo».

Вопрос: что пропустили? Тип binarySecurityTokenManager в web.config соответствует полному имени класса 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>`

(Кстати, как же один формат 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);

В настоящее время я застрял в .NET 2.0 (VS2005), поэтому я полагаю, что о WCF не может быть и речи, в противном случае совместимость не является проблемой, поскольку я буду контролировать как клиентов, так и службы в системе.

Ответы [ 2 ]

1 голос
/ 18 сентября 2008

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

Эти строки были на сайте 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>

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

0 голосов
/ 17 сентября 2008

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

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

...