2011-02-08 8 views
3

저는 Windows 사용자 자격 증명을 얻는 Java 프로그램을 만든 다음 유닉스 상자에서 Kerberos에 연결하고 LDAP 서버의 예를 들어 서비스 인증 및 사용을 허용하려고합니다.Kerberos SSO가 Java로 구현되었습니다.

나는 암호를 알아달라고 요청하는 모든 예를보고 싶다. 나는 이것을 원하지 않는다. 나는 프로그램을 실행할 수 있기를 바란다. 마술에 의해서라면 kerberos가 인증을 받았다.

모든 링크와 예제가 인정됩니다.

+0

+1 그리고 리눅스에서 작동한다면 더 행복 할거야! – Daniel

답변

5

Kerberos를 Java EE 응용 프로그램과 함께 사용하고 Windows Active Directory를 인증하기 위해 여러 주 동안 시행 된 웹 크롤링을 통해 성공적으로 SSO를 설정했습니다.

JBOSS 협상과 스프링 Kerberos가 모두 효과가 있습니다. 그러나 두 세트의 문서는 모두 사용자가 제대로 작동하지 못할 정도로 정확하지 않습니다. 어느 솔루션 에나 간단하게 입력하십시오.

  1. Active Directory에서 서비스 사용자 만들기.
  2. ktpass를 사용하여이 사용자의 키탭 파일을 만듭니다. (아래 나열된 ktpass를 가진 많은 문제)
  3. ksppass를 수정하려면 setspn -A를 사용하십시오.
  4. krb5.conf (linux) 또는 krb5.ini (windows)가 올바른지 확인하십시오.
  5. 서버와 동일한 상자에서 클라이언트를 실행하고 있지 않은지 확인하십시오.
  6. 시간이 도메인 전체에서 동기화되어 있는지 확인하십시오.
  7. JDK에서 kinit을 사용하여 Kerberos를 테스트하십시오.
  8. 제공된 필터를 통해 인증을 위임하도록 웹 응용 프로그램을 구성하십시오.
  9. 처음 생성 한대로 적절한 서비스 사용자를 사용하도록 XML 파일을 구성하십시오.
  10. 서비스를 주 사용자로 실행하십시오 !!!!!!!!!
  11. Spring을 사용하는 경우 UserDetailsService를 구현하여 LDAP (활성 디렉토리)를 쿼리하고 사용자 보안 주체에 역할을 설정할 수 있습니다.
  12. 응용 프로그램 내에서 사용자 보안 주체는! = null이어야합니다.

ktpass에서는 문제 :

  1. 는 서비스 사용자가 Active Directory에서 암호를 변경할 수있는 사용자로 설정되어 있는지 확인합니다.
  2. 명령 줄에 암호를 입력했는지 확인하십시오.
  3. 키탭을 생성 한 후에도 해당 사용자로 명령 프롬프트를 열 수 있는지 확인하십시오.
  4. KRB5_NT_PRINCIPAL을 지정해야합니다.
  5. 형식은 다음과 ktpass /out c:\service.keytab /mapuser [email protected] /princ HTTP/[email protected] /pass /ptype KRB5_NT_PRINCIPAL
  6. 이 SETSPN -A를 사용하여 완전한 서비스 주체를 추가해야합니다 : setspn –A HTTP/hostname.testdomain.server.com userservice
  7. 는 서비스 사용자 사용자 암호를 재설정하지 마십시오 (당신은 당신의 키 테이블을 다시 생성해야합니다).

마지막으로 매 테스트마다 kinit purge를 사용하여 캐시 된 티켓을 지 웁니다.

또한 중복 SPN을 사용하면 문제가 심각하게 해결됩니다. Windows 서버 2008의 setspn -X는이를 의심스러워 할 때마다 새로운 서비스 사용자와 교장 이름을 새로 시작할 때마다이를 감지합니다 (스크립트의 경우 Google).

희망은 누군가가 내가 겪은 고통을 피하는 데 도움이되기를 바랍니다.

관련 문제