Пользовательский X509SecurityTokenManager игнорируется

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
662
2

Ответы 2

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

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

Проблема была в другом месте. Мой серверный проект был веб-приложением, и некоторые параметры не были доступны для веб-приложений только для веб-сайтов. Итак, я сделал небольшой проект веб-сайта, сравнил 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>

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

Другие вопросы по теме