사용자가 인트라넷 웹 앱에 투명하게 로그인되어있는 경우 Active Directory를 사용하는 SSO는 어떻게 작동합니까?


40

로그인이 필요없는 웹 응용 프로그램을 만들 수 있다고 들었습니다. 사용자는 Windows에 로그인하여 Active Directory (LDAP) 조회를 통해 인증합니다. 그런 다음 웹 애플리케이션으로 이동하여 로그인 프롬프트가 표시되지 않아야합니다. 이 고객들은 이것을 싱글 사인온 (SSO)이라고 불렀습니다.

그러나 Tomcat 문서에서 Single Sign On을 읽은 내용은 다음과 같습니다.

단일 사인온 밸브는 사용자에게 가상 호스트와 연관된 웹 애플리케이션 중 하나에 사인온 한 다음 동일한 가상 호스트의 다른 모든 웹 애플리케이션이 해당 ID를 인식 할 수 있도록하려는 경우에 사용됩니다 .

이것은 나에게 분명하다. 사용자는 한 번 로그인해야하며 tomcat 인스턴스의 모든 webapp에 액세스 할 수 있습니다. 그러나 내가해야 할 일은 Tomcat 서버에 자격 증명을 제공하지 않고 어떻게 든 로그인 할 수있게하는 것입니다.

따라서이 작업을 수행하려면 다음과 같이 상상하십시오.

  • 사용자가 일부 페이지를 요청 함
  • 서버가 세션 토큰을 보지 못한 후 클라이언트에게 자격 증명을 요청합니다.
  • 사용자의 개입없이 클라이언트 브라우저는 서버에 일부 자격 증명을 제공합니다.
  • 그런 다음 클라이언트 브라우저에서 제공 한 자격 증명을 사용하여 LDAP에서 조회를 수행합니다.

클라이언트 측 인증서를 사용하는 몇 가지 예를 보았습니다. 특히 DoD PKI 시스템이 의미가 있습니다.이 경우 클라이언트 측 인증서를 요청하도록 Tomcat을 구성 하지만 Windows에 로그인하면 어떻게되는지 알 수 없습니다. 작동하고 브라우저가 서버 등에 전달할 정보는 무엇입니까? 이것이 NTLM에 사용되는 것입니까?

답변:


40

우선-다른 사용자가이 페이지를 방문하는 경우 프롬프트없는 SSO를 수행 할 수있는 특정 인증 방법 만 있습니다. 이들은 NTLMKerberos를 . 반면에 LDAP는 즉각적인 SSO를 제공하지 않습니다.

NTLM은 실제로 NTLMv1 및 NTLMv2입니다. 이들은 매우 다르며 심각한 보안 문제로 인해 NTLMv1은 더 이상 사용되지 않습니다. NTLMv1 또는 NTLMv2를 지원 하는지를 제대로 식별하지 못하는 Java 인증 솔루션은 문서에 "NTLM"이라는 단어 만 사용하므로 부끄러워해야합니다. 보안 솔루션 개발자는 화재 탈출구를 찾아야 할 더 많은 이유를 스스로 모를 가능성이 높습니다.

NTLMv1과 NTLMv2는 Microsoft에 의해 완전히 문서화되어 있지만 기존의 개념과는 달리 프로토콜을 '역 엔지니어링'했다고 주장하는 솔루션을 찾을 수 있습니다. 2006 년이나 2007 년경에 믿었던 프로토콜을 Microsoft가 문서화하기 전에 이것이 필요했던 것은 사실입니다. 어쨌든 NTLMv1은 절대 아닙니다. NTLMv2 자체에는 아무런 문제가 없지만 Microsoft는 Kerberos 인증을 위해 모든 제품에서 NTLM (모든 형태)을 단계적으로 폐지하고 있습니다. NTLMv1은 오래 사용되지 않으며 도메인 컨트롤러를 사용할 수없는 경우에만 Microsoft에서 NTLMv2를 사용합니다. 결론 : NTLM (어떤 형태로든)은 실제로 발전하지 않습니다. 실제로 표준 기반 접근 방식을 취한 것에 대해 Microsoft에 경의를 표해야합니다.

이것은 Kerberos를 남겨 둡니다. Microsoft는 HTTP를 통해 인증 정보를 협상하고 전송하기위한 프로토콜을 만들었습니다. 이것은 Microsoft 제품에서 " 통합 Windows 인증 " 으로 알려져 있지만 SPNEGO 라는 이름으로 공식 표준으로 쓰러졌습니다 . 이것이 당신이 찾고있는 것입니다. SPNEGO는 기본 인증 메커니즘으로 NTLMv2와 Kerberos를 모두 지원하지만 위의 이유로 NTLMv2가 아닌 Kerberos를 대상으로해야합니다.

SourceForgeSPNEGO Project를 사용하여 여러 Tomcat 응용 프로그램 (Linux / Solaris에서 실행)을 Active Directory와 성공적으로 통합했습니다 . 나는 이것이 가장 간단한 접근법이라는 것을 알았습니다. 이를 통해 예를 들어 Sharepoint 서버와 유사한 SSO를 신속하게 제공 할 수 있습니다. 이것은 'SSO'에 대해 이야기 할 때 사용자가 기대하는 것입니다. Kerberos 구성을 올바르게 설정하고 키를 생성하고 Active Directory에서 '더미'계정을 설정하는 것은 번거로울 수 있지만 일단 올바르게 설정하면 매력처럼 작동합니다.

SourceForgeSPNEGO 프로젝트에 대해 내가 싫어하는 유일한 점 은 인증이 얼마나 자주 수행되는지 이해하지 못한다는 것입니다. 나의 불쾌한 의심은 각 세션마다 한 번이 아니라 모든 페이지보기에 대해한다는 것입니다. 아마도 나는 이것에 틀렸다. 어쨌든 : 이것은 SSO 솔루션에서 고려해야 할 또 다른 사항을 강조합니다. 불필요한 요청으로 아이덴티티 공급자 (예 : Active Directory)를 '스팸'하는 솔루션을 구현하고 싶지 않습니다.


2
고마워, 이것을 받아 들였다. 프롬프트없는 로그인 목록에 추가해야 할 한 가지는 x509 인증서 로그인입니다. 정부 CAC 카드처럼.
blak3r

6 살이더라도 환상적인 답변입니다! 가능하다면 x10을 찬성했습니다!
Tim S.

2

Windows Active Directory 환경에서 싱글 사인온 (SSO)은 내부 웹 페이지를 방문하면 Windows 로그인 권한이 있으며 웹 서버가이를 사용할 수 있음을 의미합니다. NTLM에 사용되는 것이지만 최신 구현에서는 Kerberos를 대신 사용합니다.

Sharepoint Server 웹 사이트를 열면 로그인 사용자 이름과 암호가 필요하지 않은 사람을 알고 있지만 동일한 네트워크의 내부 웹 사이트에서만 작동하지만 공용 웹 사이트에서 작동하는 것은별로 의미가 없다고 생각합니다. (Apache vhost 또는 아웃소싱 호스트 서버에서와 같이 "가상 호스트"를 의미하는지 알 수 없습니다).

다음은 IIS / ASP.Net을 실행하는 웹 서버에서 Kerberos 인증이 작동하는 방법을 설명하는 Microsoft 문서입니다. http://msdn.microsoft.com/en-us/library/ff647076.aspx

Apache / Tomcat / Java와 관련이있는 것으로 보입니다. 다음은 그 영국 대학 구현을 설명하는 PDF입니다 http://gfivo.ncl.ac.uk/documents/UsingKerberosticketsfortrueSingleSignOn.pdf 과의 CodePlex의 프로젝트 : http://tomcatspnego.codeplex.com/ 와의 Openfire이 일부 여기에서 일반적으로 Java / Kerberos와 함께 작업하는 것과 관련된 문서 ( http://community.igniterealtime.org/docs/DOC-1060 ).


0

Microsoft가 Windows 통합 인증이라고하는 것을 설명하는 것 같습니다.

이 기사를 기반으로 Tomcat이 Windows 인증을 지원하는 것 같습니다 .


-1

우선 로그인을 피할 수 없습니다. 사용자를 식별하려면 로그인해야합니다. NTLM을 잊어 버리면 Kerberos가 구출됩니다. 완전히 투명한 방식으로 모든 것을 할 수 있습니다.

SingleSignOnValve가 원하는 것이 아닙니다. Tomcat 7을 사용하는 경우 SpnegoAuthenticator를 즉시 사용할 수 있지만 6 일에는 이것을 사용해야 합니다 .


조금 혼란스러워 ... 첫 번째와 두 번째 문장이 모순되는 것 같습니다. Kerberos를 사용하면 사용자에게 로그인하라는 메시지가 표시되지 않습니까?
blak3r

1
아닙니다. Kerberos 덕분에 사용자는 자신의 자격 증명 수동으로 한 번 입력 후 모든 로그인이 자동으로 이루어집니다. 그렇다고 로그인이 전혀 발생하지 않는다는 의미는 아닙니다. 이것이 당신이 쓴 것입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.