Kerberos를 Java EE 응용 프로그램과 함께 사용하고 Windows Active Directory를 인증하기 위해 여러 주 동안 시행 된 웹 크롤링을 통해 성공적으로 SSO를 설정했습니다.
JBOSS 협상과 스프링 Kerberos가 모두 효과가 있습니다. 그러나 두 세트의 문서는 모두 사용자가 제대로 작동하지 못할 정도로 정확하지 않습니다. 어느 솔루션 에나 간단하게 입력하십시오.
- Active Directory에서 서비스 사용자 만들기.
- ktpass를 사용하여이 사용자의 키탭 파일을 만듭니다. (아래 나열된 ktpass를 가진 많은 문제)
- ksppass를 수정하려면 setspn -A를 사용하십시오.
- krb5.conf (linux) 또는 krb5.ini (windows)가 올바른지 확인하십시오.
- 서버와 동일한 상자에서 클라이언트를 실행하고 있지 않은지 확인하십시오.
- 시간이 도메인 전체에서 동기화되어 있는지 확인하십시오.
- JDK에서 kinit을 사용하여 Kerberos를 테스트하십시오.
- 제공된 필터를 통해 인증을 위임하도록 웹 응용 프로그램을 구성하십시오.
- 처음 생성 한대로 적절한 서비스 사용자를 사용하도록 XML 파일을 구성하십시오.
- 서비스를 주 사용자로 실행하십시오 !!!!!!!!!
- Spring을 사용하는 경우 UserDetailsService를 구현하여 LDAP (활성 디렉토리)를 쿼리하고 사용자 보안 주체에 역할을 설정할 수 있습니다.
- 응용 프로그램 내에서 사용자 보안 주체는! = null이어야합니다.
ktpass에서는 문제 :
- 는 서비스 사용자가 Active Directory에서 암호를 변경할 수있는 사용자로 설정되어 있는지 확인합니다.
- 명령 줄에 암호를 입력했는지 확인하십시오.
- 키탭을 생성 한 후에도 해당 사용자로 명령 프롬프트를 열 수 있는지 확인하십시오.
- KRB5_NT_PRINCIPAL을 지정해야합니다.
- 형식은 다음과
ktpass /out c:\service.keytab /mapuser [email protected] /princ HTTP/[email protected] /pass /ptype KRB5_NT_PRINCIPAL
- 이 SETSPN -A를 사용하여 완전한 서비스 주체를 추가해야합니다 :
setspn –A HTTP/hostname.testdomain.server.com userservice
- 는 서비스 사용자 사용자 암호를 재설정하지 마십시오 (당신은 당신의 키 테이블을 다시 생성해야합니다).
마지막으로 매 테스트마다 kinit purge를 사용하여 캐시 된 티켓을 지 웁니다.
또한 중복 SPN을 사용하면 문제가 심각하게 해결됩니다. Windows 서버 2008의 setspn -X는이를 의심스러워 할 때마다 새로운 서비스 사용자와 교장 이름을 새로 시작할 때마다이를 감지합니다 (스크립트의 경우 Google).
희망은 누군가가 내가 겪은 고통을 피하는 데 도움이되기를 바랍니다.
+1 그리고 리눅스에서 작동한다면 더 행복 할거야! – Daniel