0

인트라넷에서 모든 사용자는 Active Directory 도메인에서 Windows에 로그인합니다. Active Directory에 대해 사용자를 인증하는 솔루션을 개발해야합니다.이 솔루션은 Tomcat에서 실행되며 Servlet과 Axis2 모두에서 작동합니다.Tomcat, HTTP 인증 및 Active Directory

기본 JavaSE를 사용하여 인증을 수동으로 확인할 수 있습니다. 나는 또한 POST에서 로그인과 패스워드를받는 테스트 서블릿을 만들었고 HTTPS를 사용했다면 적어도이 못생긴 해결책을 사용할 수 있었다.

HTTP 표준은 HTTP 표준이며 Servlet과 Axis2 및 브라우저와 모든 종류의 SOAP 클라이언트에서 작동하기 때문에 HTTP 인증이 가장 좋은 방법이라고 생각합니다.

브라우저의 경우 원하는 동작은 브라우저가 로그인 모달 창을 열고 사용자가 로그인과 암호를 입력 한 다음 Servlet 내에서 검색하고 AD에 대해 확인하는 것입니다. Axis2의 경우 클라이언트가 HTTP 헤더를 설정하는 방법을 처리하고 Axis2가 WebService를 생성하는 데 사용하는 클래스에서 가져온다. (어떻게하는지는 모르지만 아직 검색하지 않았다 ...) 확인.

문제는 내가 많은 가능성에 직면하고 있으며 그 중 어떤 것도 작동시키지 못한다는 것입니다. 대부분의 자습서는 conf/tomcat-users.xml을 사용하며 암호를 알려주지 않습니다. 다른 사람들은 NTLM이나 Kerberos를 사용하고 있습니다. Servlet에 이미 spnego를 사용하려고 시도했지만 전혀 작동하지 않았으며 Axis2에서는 사용할 수 없습니다. 차라리 타사 라이브러리가 필요없는 기본 솔루션을 사용하고 싶습니다.

어디에서 시작할 수 있습니까?

답변

2

사용자에게 싱글 사인온 (SSO)이 필요하지 않은 것으로 보입니다. 이 경우 NTLM 또는 Kerberos가 필요하지 않습니다. Active Directory를 사용한 서버 측 인증 만 있으면됩니다.

다행히 AD는 몇 가지 단점을 제외하고는 LDAP로 자체를 나타냅니다. Configuring Tomcat to authenticate using Windows Active Directory

AD에 대한 영역 및 컨테이너 (Tomcat) 인증을 올바르게 구성하면 인증을 수행하기 위해 헤더를 검색하거나 코드를 작성할 필요가 없습니다. 컨테이너 (Tomcat)는 다음을 수행합니다. 너를 위해서해라.

편집 :

웹 XML 샘플 :

<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>Wildcard means whole app</web-resource-name> 
    <url-pattern>/*</url-pattern> 
    <http-method>GET</http-method> 
    <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
    <role-name>user</role-name> 
    </auth-constraint> 
</security-constraint> 

     <login-config> 
      <auth-method>BASIC</auth-method> 
      <realm-name>default</realm-name> 
     </login-config> 
     <security-role> 
      <role-name>user</role-name> 
     </security-role> 
+0

팁 주셔서 감사하지만 그건 내 필요를 해결하지 못합니다. 사용자 이름과 비밀번호가 있으면 이미 광고를 통해 자동 인증 할 수 있습니다. 물론, Tomcat이나 spnego와 같은 일부 소프트웨어로 끝난다면 request.getRemoteUser()를 사용하면 좋겠지 만 몇 줄에서 수동으로 할 수도 있습니다. 내 문제는 인증 된 * 사용자 이름 * 사용자 이름이 응용 프로그램에서 사용 권한을 처리하는 데 사용된다는 것입니다. – Hikari

+0

서블릿에서 쿠키에서 인증 할 수없고 요청 헤더에서 로그인 및 비밀번호를 찾지 못하면 브라우저에 로그인 및 비밀번호를 요청하도록 HTTP 헤더를 쉽게 설정할 수 있습니다. 그래서 Tomcat을 설정하는 것은 가치가 없다고 생각합니다. 필요한 것은 Servlet 내에서 그리고 Axis2 WebService를 생성하는 클래스에서 HTTP 인증을 처리하는 방법을 배우는 것입니다. (각 작업 매개 변수에 인증 빈을 추가하고 HTTPSer에 WebService를 던지는 것을 심각하게 생각합니다.이 경우 HTTPS를 강제하도록 Tomcat을 구성해야합니다.) – Hikari

+1

기본 인증에서 브라우저는'WWW-Authenticate'헤더를 통해 프롬프트되며, 응답은 Base64의 ID와 비밀번호가 포함 된'Authorization Basic :'헤더로 돌아옵니다. 'getRemoteUser'를 사용하려면 웹 어플리케이션이 반드시 auth constraint을 지정해야합니다. - 응답에 스 니펫을 추가했습니다. Tomcat에서 원격 사용자를 프로그래밍 방식으로 추가하는 것은 밸브를 작성하지 않는 한 가능하지 않습니다. –

1

Active Directory 환경에서 유일하게 합리적인 접근 방법은 Kerberos 만입니다. 사용자에게 가장 좋은 방법은 Kerberos입니다. Tomcat 7을 사용하고 있다면 기본적으로 지원됩니다. Java 6는 작동하도록 모든 것을 갖추고 있습니다. 이것은 내가 몇 년 동안하고있는 일이다.