2013-10-19 5 views
1

몇 가지 애플리케이션에 대해 Spring Jasig CAS SSO를 설정했습니다. 여기에는 CasAuthenticationFilter이 사용됩니다. 그래서 나는 이런 웹 애플리케이션을 만들었습니다 -CasAuthenticationFilter에 대한 사전 인증 필터 설정하기

Cas Server (Cas 3.5.2) - Cas.war, App1 - App1.warApp2 - App2.war. 응용 프로그램은 Spring 3.2.3 및 Spring Security 3.1.4.RELEASE를 사용합니다.

Spring Security Config : http://pastie.org/private/qxcx1h8i9ys0w3lmwegiw

상황이이 설정 정상적으로 작동하는 것. 이제 Spring Cas를 통하지 않고 Cas Server에서 OAuth를 사용할 수있게되었을 때, 저는 설정 한 일반적인 폼 기반 인증과 인증을 통합 할 수 없었습니다. 페이 스북 (Facebook) OAuth 통합은 페이스 북 프로필 속성이 로그에서 성공적으로 검색된 것을 볼 수 있으므로 제대로 작동하는 것 같습니다. 문제는 페이스 북 로그인 후, CasAuthenticationFilter가 폼 기반 로그인과 비슷한 메커니즘으로 "FacebookProfile # XYZXYZ"사용자를 인증하려고 시도하고 분명히 사용자를 위해 데이터베이스 테이블에서 해당 사용자를 찾지 못한다는 것입니다. 내 생각 엔 내가 AbstractPreAuthenticatedProcessingFilterPRE_AUTH_FILTER 전에 위치 (위의 pastie 구성 확인)하고 어떻게 든 Authentication 권한을 설정해야합니다으로, 그래서 CasAuthenticationFilter 사용자가 이미 로그인되어 있음을 알아야한다을 확장하는 사용자 정의 필터를 작성해야한다는 것입니다.

이 URL이 로그에 따라 CasAuthenticationFilter에 의해 인증되는 것입니다 - /j_spring_cas_security_proxyreceptor?pgtIou=PGTIOU-1-pR9r9LVJvB5EkezbMJHN-talenteye.in&pgtId=TGT-2-QXvAHIRciBNR9HU5FOvpOaHcJaBj5OJTUPPz5ZwA7yK1xH54iL-myorg.in

CasAuthenticationFilterrequiresAuthentication은 다음과 같습니다 구현 :

protected boolean requiresAuthentication(final HttpServletRequest request, final HttpServletResponse response) { 
    final boolean serviceTicketRequest = serviceTicketRequest(request, response); 
    final boolean result = serviceTicketRequest || proxyReceptorRequest(request) || (proxyTicketRequest(serviceTicketRequest, request)); 
    if(logger.isDebugEnabled()) { 
     logger.debug("requiresAuthentication = "+result); 
    } 
    return result; 
} 

그리고 로그 말하는 -

19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter -  serviceTicketRequest = false 
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - proxyReceptorConfigured = true 
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - proxyReceptorRequest = true 
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - requiresAuthentication = true 
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - Request is to process authentication 
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - proxyReceptorConfigured = true 
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - proxyReceptorRequest = true 
19:23:42.835 [http-bio-8080-exec-8] DEBUG o.s.s.c.web.CasAuthenticationFilter - Responding to proxy receptor request 

이 작업을 함께하는 방법에 관해서 혼란스러워합니다. 내가 너무 복잡해 지는지 궁금해. 내가 이미 이틀을 낭비 했으므로 어떤 포인터라도 도움이 될 것입니다.

답변

1

나는이 문제를 직접 해결 했으므로 유사한 문제가있는 다른 사람들을 위해 여기에 게시합니다.

CAS를 사용하는 요점은 인증을 중앙 집중화하는 것입니다. 나는 AbstractCasAssertionUserDetailsService을 확장하는 커스텀 클래스를 작성했다. 이것은 인증을하지 않습니다. CAS 서버에서 수행해야합니다. CAS 클라이언트 웹 응용 프로그램에서 사용하는 UserDetails 개체를 준비하기 만하면됩니다. 그래서 저는 사전 허가서가 필요하지 않았습니다. 또한 불필요한 프록시 수용기 구성을 제거했습니다. 그것은 지금 잘 작동합니다.