2013-02-15 1 views
2

NTLMv2를 사용하여 XML을 반환하는 응용 프로그램에 간단한 URL을 호출 할 때 누군가가 내 태도를 고칠 수 있습니다.Java로 NTLM 자동 로그인 구현

나는 거의 모든 질문과 페이지를 읽었지만, 나는 호기심을 무시한 채로 남아 있습니다. 나는 현재 HTTPClient를 사용하고 있는데 (변경 될 수 있음에도 불구하고) 최신 JDK와 함께 쓰여지고있다. 여기

은 JCIFS 라이브러리 호출이 나타납니다 예를 들어 페이지입니다 : http://hc.apache.org/httpcomponents-client-ga/ntlm.html

모든 좋은 혼란에도 불구 보인다, 그러나 이것은 내가 본 대부분의 예제가 제기하는 질문을 강조 - 공급 NTCredentials의 문제를 .

나에게 NTLM의 요점은 내가 자격 증명을 제공 할 필요가 없다는 것입니다. 대상 응용 프로그램은 NTLM을 사용하도록 설정되어 있으므로 현재 로그인 한 사용자의 사용자 credential을 사용해야합니다. 왜 내가 신임장을 제공해야합니까?

여기에 분명하지 않은 내용이 있으면 사과드립니다. Java를 사용하여 가능한 가장 기본적인 NTLM SSO가 필요합니다. 나는 무엇의 버전이 무엇이든 상관하지 않으며, 나는 최신의 것들을 사용할 수있다.

보유 희망! 읽어 주셔서 감사합니다.

답변

0

불행히도 순수 Java 환경에서 싱글 사인온을 수행하는 방법이 있습니다.

NTLM은 Single Sign-On의 직접적인 솔루션이 아닙니다. NTLM은 챌린지/응답 인증 메커니즘이며 사용자의 암호에 대한 NTLM 해시가 필요합니다. Windows 시스템은 NTLM 해시가 유지되므로 NTLM을 사용하여 단일 로그온을 제공 할 수 있습니다. 그런 다음 지속 된 해시를 기반으로 한 챌린지에 대한 응답을 계산할 수 있습니다.

해시에 액세스 할 수 없다면 (내 지식으로는 단순히 요청할 수 없음) 직접 계산해야합니다. 그리고 그것은 사용자의 암호를 요구합니다.

마찬가지로 SPNEGO 인증을 사용하여 Kerberos 티켓을 사용하여 단일 사인온을 할 수 있지만 (물론 원격 시스템이이를 지원하도록 설정되어있는 경우) Java는 Kerberos 시스템 라이브러리 대신 Kerberos를 재 구현합니다. 따라서 이미 도메인에 로그인되어 있더라도 Java 용 Kerberos 티켓을 다시 가져와야합니다. 그리고 암호를 다시 입력해야합니다.

인증을 위해 암호를 입력하지 않는 유일한 방법은 기본 메소드를 호출하는 것입니다. Windows에서는 SSPI으로 NTLM 또는 SPNEGO 챌린지에 응답하는 기능을 제공합니다. 비 Windows 플랫폼의 경우 이것은 GSSAPI과 매우 유사하게 처리되며 SPNEGO (Kerberos)에 응답하는 기능을 제공합니다.