2009-06-26 3 views
1

최근 JAX-WS 엔진에서 실행되는 Java에서 웹 서비스 클라이언트를 빌드하여 통합 된 .NET 웹 서비스와 통신해야하는 프로젝트를 진행 중입니다. Windows 인증 (NTLM 프로토콜이라고도 함)IIS 용 JAX-WS 클라이언트 Windows 통합 인증 (NTLM)

인터넷에서 검색했습니다. 그것은 잘 알려진 문제로 보이지만 아직 아무도 좋은 해결책이 없습니다.

누구나 이전에이 작업을 수행 했습니까?

모든 의견을 환영합니다.

답변

0

Java HTTP 클라이언트 옵션 이 섹션에서는 사용자의 요구에 가장 잘 맞는 구현을 선택할 수 있도록 Java HTTP 클라이언트로 알려진 NTLM 지원 구현에 대해 설명합니다.

가능한 구현은 다음과 같습니다

일 JRE 1.4.2 이상 (무료) - Windows 플랫폼에서만 NTLM 프로토콜 (LM/NTLM/NTLM의 V2)의 완벽한 지원. 모든 NTLM 구성 수준을 지원합니다 (필자는 시도하지 않았습니다). Sun JRE 6 또는 5 (1.5_08 이상) (무료) - 모든 플랫폼에서 NTLM 프로토콜 (LM/NTLM/NTLM V2)을 완벽하게 지원합니다. 모든 NTLM 구성 수준을 지원합니다 (필자는 시도하지 않았습니다). 그러나 Windows 시스템에서는 현재 로그온 한 사용자를 사용하여 인증하려고한다고 가정합니다. 인증이 실패한 후에 만이 문제를 해결할 수 있습니다. 자카르타 (Apache) HTTP 클라이언트 (무료, Apache 라이센스) - 모든 Java 플랫폼에서 LM/NTLM (NTLM V2 아님) 프로토콜을 지원합니다. JRE 1.2 이상이 필요합니다. Java UrlConnection 클래스와 플러그 호환되지 않습니다. 특정 프록시 서버에서 요구하는대로 OEM 인코딩을 지원하지 않습니다. NTLM 지원은 꽤 오래 전에 추가되었으며 확장에 관심이없는 것으로 보입니다. NTLM 구성 수준 0-3 만 지원합니다. Luigi Dragone NTLM이 지원되는 혁신적인 HTTP 클라이언트 (무료, LGPL) -이 상태는 명확하지 않습니다. 안정적으로 작동하는 데 어려움을 겪었으며 2002 년부터 소프트웨어가 출시되지 않았습니다. Java URLConnection 클래스와 플러그 호환되지 않습니다. NTLM 구성 수준 0-3 만 지원할 수 있습니다. JCIFS (무료, LGPL) - 모든 Java 플랫폼에서 LM/NTLM (NTLM V2 아님)에 대한 플러그 호환 가능 지원. OEM 인코딩이 구현되었는지는 확실하지 않습니다. NTLM 구성 수준 0-3 만 지원합니다. 오클랜드 소프트웨어 Java HTTP 클라이언트 (비어 있지 않음) - 모든 Java 플랫폼 JRE 릴리스 1.2 이상에서 LM/NTLM/NTLMv2의 전체 플러그 호환 지원. 유니 코드 및 OEM 인코딩을 모두 지원합니다. 모든 NTLM 구성 수준을 지원합니다. Java 구현이 1.4.2 이상이고 Windows에서 Java를 실행중인 경우 내장 된 JRE 지원을 사용하면 완료됩니다. 일부 네트워킹 속성 설정과 함께 java.net.Authenticator 클래스를 선택적으로 사용하십시오.

Windows 컴퓨터를 NTLM 구성 수준 (NTLM V2가 필요하지 않음)보다 낮은 NTLM 구성 수준으로 변경할 수 있고 네트워크 보안 : NTLM SSP 기반 (보안 RPC 포함) 서버의 최소 세션 보안이 NTLM V2를 요구하지 않도록 설정 한 경우 Jakarta HTTP 클라이언트 (플러그 호환성을 신경 쓰지 않는다면) 또는 JCIFS HTTP 클라이언트를 사용하십시오. 또한 NTLM 용 OEM 인코딩 만 지원하는 프록시를 통해 HTTP 서버에 액세스하는 경우 Jakarta HTTP 클라이언트를 사용할 수 없습니다 (이는 JCIFS에도 해당됩니까?).

참고하지만, http://jcifs.samba.org/에서 JCIFS HTTP 클라이언트

+0

귀하의 주장은 아주 멀리 떨어져 있습니다. JCIFS는 클라이언트로서 NTLM의 모든 순열에 대한 코드를 가지고 있지만 JCIFS HTTP 클라이언트는 기본적으로 완전히 손상된 것을 의미하는 Sun 클라이언트에 대한 래퍼입니다. 그러나 JCIFS의 NTLM 코드는 HTTP 클라이언트 라이브러리와 함께 사용되어 매우 효과적인 솔루션을 만들 수 있습니다. 그러나 최상의 솔루션은 문서화되고 지원되며 이해하기 쉽고 사용하기 쉬운 NTLMv2 HTTP 클라이언트를 포함하는 Jespa 라이브러리입니다. – user8134

0

에 단점과 관련된 잠재적 인 호환성이있다, 그것은 JCIFS-1.3.1 출시/NTLM의 HTTP 필터 고정을 보여줍니다. 그 뜻은 문제없이 ntlmV2와 HTTP 필터를 사용할 수 있습니까?

3

우리는 Java 6에 내장 된 JAX-WS를 사용하고 있으며 Windows XP 및 Windows 2003 Server에서 클라이언트를 실행 중입니다.서버는 Windows 2003 Server의 IIS 7입니다.

통합 인증이 기본적으로 작동한다는 것을 알게되었습니다. 구성이 제공되지 않았습니다. HTTP 계층에서 추적 로깅을 설정하고 NTLM 인증이 사용되고 있음을 발견했습니다. 협상 인증 만 사용 중이며 NTLM이 해제 된 경우 작동하는지 확실하지 않습니다.

기본적으로 대답은 다음과 같습니다. 그냥 작동합니다. 테스트하려면

: JCIFS에 대한

package url.auth; 

import java.io.IOException; 
import java.io.InputStream; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.List; 
import java.util.Map; 

import org.apache.commons.io.IOUtils; 

public class DownloadUrl { 
    public static void main(String[] args) { 

     try { 
      URL url = new URL("http://myserver/url/that/requires/authentication"); 
      URLConnection conn = url.openConnection(); 
      InputStream is = conn.getInputStream(); 
      Map<String, List<String>> headers = conn.getHeaderFields(); 
      for(String header : headers.keySet()) { 
       System.out.println(header + ": " + headers.get(header)); 
      } 
      System.out.println(""); 
      System.out.println(IOUtils.toString(is)); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Linux에서 클라이언트를 사용해 보셨습니까? –

+0

아니요. Linux에서 시도한 적은 없지만 제대로 작동하지 않을 것이라고 확신합니다. 클라이언트 컴퓨터가 서버와 동일한 도메인에 있기 때문에 Windows에서만 작동합니다. –

+0

아마도 이것은 올바른 자격 증명을 가진 사용자로부터 Java 프로세스가 실행 중일 때 작동합니다. 테스트 결과가 다를 수도있는 서비스에서 실행 중인지 의심 스럽습니다. – Pool