2008-09-17 8 views
1

WSE 3.0에서 X.509 인증서와 함께 메시지 계층 보안을 사용하는 웹 서비스가 있습니다. 이 서비스는 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>` 

(, BTW 유래에 잘 여기에서 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가 궁금하다. 그렇지 않으면 시스템에서 클라이언트와 서비스를 모두 제어 할 수 있으므로 상호 운용성이 문제가되지 않는다.

답변

0

내가 아는 건설적인 조언은 아니지만 가능한 한 빨리 WSE3.0에서 퇴장 할 것입니다. 우리는 올해 초 WCF와 Java 클라이언트와 상호 운용되도록 노력하면서 약간의 작업을 수행했으며 이는 절대적인 견해였습니다.

반면에 WCF는 실제적으로 제정신이며 이와 같은 영역에 대한 문서는 꽤 좋습니다. 그게 당신을위한 선택입니까?

1

문제는 다른 곳에 있습니다. 내 serverproject는 웹 앱이었고 일부 옵션은 웹 사이트 용 웹 앱에만 사용할 수 없었습니다. 그래서 나는 작은 웹 사이트 프로젝트를 만들고 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> 

했다.