2013-08-31 12 views
0

테스트 Windows Server 2012 도메인이 있습니다. 이 도메인의 구성원 인 두 대의 컴퓨터가 있습니다.WCF 상호 운용성 Kerberos SPNego 사용 웹 서비스

하나의 컴퓨터가 Oracle Corporation에서 개발 중이며 가상 컴퓨터에서 Linux 버전을 실행 중입니다. 이 컴퓨터는 아마도 IBM WebSphere가 호스팅하는 SPNego Kerberos 인증 웹 서비스를 호스팅합니다.

다른 컴퓨터는 Microsoft 가상 컴퓨터에서 호스팅되는 Windows XP 클라이언트입니다.

Kerberos를 사용하여 사용자를 인증하기 위해 Active Directory 내부에 SPN을 만들었습니다.

그런 다음 브라우저를 사용하여 웹 서비스를 테스트했습니다. WSDL 주소는 SOAP 데이터를 완벽하게 가져 왔습니다.

Kerberos가 해제되어 클라이언트 프록시 코드가 WCF 4.0 클라이언트에 통합되어 인증 테스트를 위해 다시 켜질 수 있습니다. 클라이언트 프록시에서 제공하는 방법을 사용하여 웹 서비스에 연결하려고 할 때

그러나, 보안과 관련된 모든 종류의 오류가 제기되고있다 : 아래

 The remote HTTP server did not satisfy the mutual authentication requirement. 
    The remote server returned an error: (405) Method Not Allowed.

, 클라이언트 측 응용 프로그램입니다. 사용 설정 파일은 웹 서비스에 연결 :

<configuration> 
<system.serviceModel> 
    <client> 
     <endpoint address="http://oag:8080/pos/GetStoreConfigurationService" 
        binding="wsFederationHttpBinding" 
        bindingConfiguration="wsFederationHttpBinding_ESLGetStoreConfigurationBinding" 
        behaviorConfiguration="ServiceBehavior" 
        contract="ESLGetStoreConfigurationPortType" 
        name="wsFederationHttpBinding_ESLGetStoreConfigurationPort" > 
      <identity> 
       <servicePrincipalName value="http/oag:8080"/> 
      </identity> 
     </endpoint> 
    </client> 
    <bindings> 
     <customBinding> 
      <binding name="UsernameBinding"> 
       <binaryMessageEncoding /> 
       <security authenticationMode="Kerberos" 
          requireSecurityContextCancellation ="false" 
          requireSignatureConfirmation="false" 
          messageProtectionOrder ="EncryptBeforeSign" 
          requireDerivedKeys="false" 
          enableUnsecuredResponse="true" 
          allowInsecureTransport="true" 
          securityHeaderLayout="Lax" > 
       </security> 
       <httpTransport authenticationScheme="Negotiate" 
           transferMode="Buffered" 
           maxReceivedMessageSize="67819876"/> 
      </binding> 
     </customBinding> 
     <wsFederationHttpBinding> 
      <binding name="wsFederationHttpBinding_ESLGetStoreConfigurationBinding" > 
       <security mode="Message"> 
        <message negotiateServiceCredential="true" 
          establishSecurityContext="false" 
          algorithmSuite="Basic128" > 
         <issuer address="http://192.168.100.25" 
           bindingConfiguration="UsernameBinding" 
           binding="customBinding"> 
          <identity> 
           <dns value="WIN-7TN6ALB4TVK.oag-dev.sei"/> 
          </identity> 
         </issuer> 
        </message> 
       </security> 
      </binding> 
     </wsFederationHttpBinding> 
    </bindings> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="ServiceBehavior"> 
       <clientCredentials> 
        <windows allowedImpersonationLevel="Identification"/> 
       </clientCredentials> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
</system.serviceModel> 
<system.web> 
    <identity impersonate="false" userName="oag-server" password="Password!"/> 
</system.web> 
네트워크 자격 증명을 제공

또한 코드에서 이루어졌다; 그러나 아아, 아무 소용이 없습니다.

감사합니다.

답변

1

하나의 스택 (예 : 클라이언트와 서버가 자바)에서 생성 된 샘플 작업 요청/응답 쌍 (또는 spnego의 경우 여러 메시지)을 얻을 수 있다면 가장 좋습니다. 그런 다음이 메시지 중 하나에 WCF를 튜닝하는 게임이 될 것입니다. 현재 너무 많이 알려지지 않았습니다. 또한 AFAIK SPNEGO는 WCF에서만 지원되는 프로토콜 (SOAP 메시지 수준에서 Windows 자격 증명 협상)이므로 서버가 다른 용도로 사용할 수 있습니다.

특정 오류는 SOAP12를 보내는 동안 서버에서 SOAP11을 사용한다는 것을 의미 할 수 있습니다 (예 : 기본 http 바인딩이 필요할 수 있음). 그러나 모든 구성 변경은 서버에서 허용하는 SOAP에 대해 더 많이 알고있는 맥락에서 수행되어야합니다.

+0

귀하의 신속하고 간결한 응답에 감사드립니다. 오라클에 문의하여 사용중인 SOAP 버전을 정확히 확인하고 추가로 반영 할 수 있도록이 게시물을 알려줄 것입니다. –