2011-03-09 2 views
3

응용 프로그램에 들어오는 사용자를 인증 할 GET 매개 변수로 토큰을 받아 들여야하는 흥미로운 프로젝트 요구 사항이 있습니다. 이는 신뢰할 수있는 제 3자가 다시 로그인하지 않고도 사용자를 사이트로 원활하게 보낼 수있게하는 것입니다.JAAS 인증시 새내기; URL 막대의 토큰을 사용하여 로그인

예는 다음과 같을 수 있습니다 http://www.myproj.com/appName/index.jsf?user_token=asdf123randomstuffaf12fsaasdf

APPNAME은 컨텍스트 루트가 될 것이며, user_token이 확인 될 수있는 토큰이 될 것입니다. 토큰은 한 번 사용 된 다음 버려지고 생성 된 후 몇 초 만료됩니다. 토큰 부분은 실제로 끊어져있는 것이 아니라 JAAS와의 통합입니다.

스프링 보안에서는 요청을 가로 채고 URL에서 토큰을 가져오고 UserDetailsService에 대해 사용자를 인증하는 필터를 설정할 수 있습니다. 안타깝게도,이 프로젝트에서는 무수히 많은 쟁점에 대해 Spring Security를 ​​사용할 수 없으므로 JAAS 인증을 사용해야 할 것입니다.

코드를 묻지는 않지만 모듈을 작성해야 할 때 약간의 기본 방향을 사용하여 연구를 계속할 수 있습니다. 모두 감사합니다,

+0

그 동안 해결책이 있습니까? 비슷한 시나리오를 구현하고 싶습니다. – Theo

+0

다른 것이 있습니까? –

+0

내 솔루션은 스프링 시큐리티 3 ... JEE6와 CDI 전체를 선호하고 싶었습니다. 나는 커스텀 AuthenticationEntryPoint를 구현했다 –

답변

1

JAAS는 웹 응용 프로그램에 실제로 적합하지 않습니다. 대화 형 입력을 지원하고 파일, 네트워크 소켓과 같은 JVM에서 관리하는 로컬 리소스에 액세스하는 데스크톱 응용 프로그램에 더 적합합니다.

하지만 JAAS 도로를 정말로 가고 싶다면 커스텀 LoginModule과 아마도 CallbackHandler와 Principal을 작성할 준비를하십시오. 가장 중요한 클래스는 LoginModule입니다. 기존의 Principal 클래스를 재사용 할 수 있습니다.

CallbackHandler는 토큰을 URL 밖으로 가져옵니다. LoginModule는, 일부의 데이타베이스에 대해서 그 토큰을 검색해, 건네받은 Subject를 Principal로 populate합니다.

문서가 가까운 거리에 있어야하므로 용어가 매우 가까이 있기 때문에 혼란스러워 할 수 있습니다 (제목 대 Principal, LoginModule 대 CallbackHandler).

이 모든 작업을 완료 한 후에는 새로운 로그인 컨텍스트 (또 다른 관련 용어)를로드하도록 웹 컨테이너의 정책을 구성해야합니다. 이것은 Linux에서 PAM을 구성하는 것과 같습니다. 관리자에게 요청하십시오.

아직 완료하지 않았습니다. 마지막 작업은 (나는 자바 서블릿을 기반으로 뭔가를 개발한다고 가정한다) 필터를 작성하는 것이다. 이 필터는 첫 번째 레벨에 연결해야합니다. 특별한 파라미터 값 (user_token 등)을 보면, 설정된 LoginContext 객체를 취득 해, login 메소드를 호출합니다.

이제 JAAS를 모두 스크랩하면 서블릿 필터만으로 할 수 있습니다. 이 필터에서 인증이 성공하면 성공을 의미하는 사용자 정의 객체 (예 : User 객체)로 세션 객체를 채울 수 있습니다. 훨씬 더 간단합니다.

+0

좋은 주인 ... 나는 봄 초 3을 고수 할 것 같아. –