인증 관련 문의
- 작성자 :
- 최*훈
- 작성일 :
- 2011-05-19 12:31:43
- 조회수 :
- 2,621
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
수고 많으십니다.
인증에 대해 궁금한게 있어서 문의드립니다.
전자정부표준에서 제공하는 Server Security Service는 Spring Security를 확장해서 구현하다 보니 개념이나 사용처등이 혼재돼 헷갈리는 부분이 있습니다.
아래 질문에 답변 부탁드립니다.
질문1> 공통컴포넌트에서 사용하고 있는 인증은 실행환경과 달리 자체 인증을 먼저 하고 있는 것으로 알고 있습니다.
궁금한 건 자체 인증처리(EgovLoginController 내 actionLogin(), actionMain()처리)만으로도 될 듯한데..
spring-security.xml에 정의된 usersByUsernameQuery와 authoritiesByUsernameQuery를 통해 한번 더 쿼리를 하는 이유가 무엇인지 궁금합니다.
EgovLoginController 의 LoginVO에 정상적으로 값을 세팅이 된거면 1차 인증이 된 상태인데
usersByUsernameQuery의 쿼리를 변경하면 인증 실패하는 걸 보면 무언가 비교하는 과정이 있는건지...그 내부적인 처리를 좀 설명해주셨으면 합니다.
질문 2> 인증여부와 권한처리를 위해 isAuthenticated()와 getAuthenticatedUser()를 호출하는데.. 이는 세션을 사용하는 게 아니라 VO에서 추출한 값을 이용하는것이 될텐데요..
설명에는 "Spring Security의 UserDetails 인터페이스를 확장하여 세션정보를 담을 수 있다"라고 되어 있고
또 ThreadLocal을 이용해 개인의 정보를 저장하고 관리한다고 되어있습니다.
그런데 이 값을 애플리케이션단에서 인증/권한처리를 위해 따로 사용하고 있어보이진 않구요..Spring Security 내부적인 처리를 위해서만 사용되는 건가요?
질문이 좀 어수선한면이 있네요..
그래도 잘 이해하고 답변 주실거라 믿습니다 ^^
인증에 대해 궁금한게 있어서 문의드립니다.
전자정부표준에서 제공하는 Server Security Service는 Spring Security를 확장해서 구현하다 보니 개념이나 사용처등이 혼재돼 헷갈리는 부분이 있습니다.
아래 질문에 답변 부탁드립니다.
질문1> 공통컴포넌트에서 사용하고 있는 인증은 실행환경과 달리 자체 인증을 먼저 하고 있는 것으로 알고 있습니다.
궁금한 건 자체 인증처리(EgovLoginController 내 actionLogin(), actionMain()처리)만으로도 될 듯한데..
spring-security.xml에 정의된 usersByUsernameQuery와 authoritiesByUsernameQuery를 통해 한번 더 쿼리를 하는 이유가 무엇인지 궁금합니다.
EgovLoginController 의 LoginVO에 정상적으로 값을 세팅이 된거면 1차 인증이 된 상태인데
usersByUsernameQuery의 쿼리를 변경하면 인증 실패하는 걸 보면 무언가 비교하는 과정이 있는건지...그 내부적인 처리를 좀 설명해주셨으면 합니다.
질문 2> 인증여부와 권한처리를 위해 isAuthenticated()와 getAuthenticatedUser()를 호출하는데.. 이는 세션을 사용하는 게 아니라 VO에서 추출한 값을 이용하는것이 될텐데요..
설명에는 "Spring Security의 UserDetails 인터페이스를 확장하여 세션정보를 담을 수 있다"라고 되어 있고
또 ThreadLocal을 이용해 개인의 정보를 저장하고 관리한다고 되어있습니다.
그런데 이 값을 애플리케이션단에서 인증/권한처리를 위해 따로 사용하고 있어보이진 않구요..Spring Security 내부적인 처리를 위해서만 사용되는 건가요?
질문이 좀 어수선한면이 있네요..
그래도 잘 이해하고 답변 주실거라 믿습니다 ^^
A
안녕하세요.. 최재훈님..
질문1>
우선.. 말씀하신 것 처럼.. 자체 인증을 거치기 때문에 인증은 문제가 없지만..
인증 이후 권한확인(특정 URL을 접속할 수 있는지 판단하는 authority)을 spring security로 하기 때문에 spring security를 "/j_spring_security_check"로 호출하고 있습니다.
자체 인증을 하는 이유는 인증 부분에 대하여 확장할 수 있도록 제공하기 목적이 있습니다. (공통컴포넌트의 경우도 여러 회원 구분이 가능)
질문2>
isAuthenticated()는 단순히 인증이 되어 있는지 확인해야 하는 경우이고.
getAuthenticatedUser()는 인증된 사용자 정보를 확인해야 하는 경우에 사용됩니다.
둘다 대부분의 공통컴포넌트에서 사용하기 있습니다.
다만, getAuthenticatedUser()는 로그인한 사용자의 id를 얻기 위해 필수로 사용되지만..
isAuthenticated()의 경우는 권한 정의가 잘 되어 있으면.. 사실 필요하진 않습니다.
즉.. web.xml에 springSecurityFilterChain 필터가.. Controller(isAuthenticated를 호출하는)를 호출하기 전에.. 접근 권한이 있는지 없는지를 판단하기 때문에..
이 접근 권한 정의가 잘 되어 있으면.. isAuthenticated가 호출되는 일은 없겠죠?
그래서.. 많은 공통컴포넌트들이 isAuthenticated()는 호출하고 있진 않습니다.
추가적으로 사용자에 대한 정보는 session에 직접적으로 저장되어 있지 않고..
Spring security context 객체에 의해 한번 감추어져 있습니다.
그럼.. 즐거운 하루되십시오.
감사합니다.
질문1>
우선.. 말씀하신 것 처럼.. 자체 인증을 거치기 때문에 인증은 문제가 없지만..
인증 이후 권한확인(특정 URL을 접속할 수 있는지 판단하는 authority)을 spring security로 하기 때문에 spring security를 "/j_spring_security_check"로 호출하고 있습니다.
자체 인증을 하는 이유는 인증 부분에 대하여 확장할 수 있도록 제공하기 목적이 있습니다. (공통컴포넌트의 경우도 여러 회원 구분이 가능)
질문2>
isAuthenticated()는 단순히 인증이 되어 있는지 확인해야 하는 경우이고.
getAuthenticatedUser()는 인증된 사용자 정보를 확인해야 하는 경우에 사용됩니다.
둘다 대부분의 공통컴포넌트에서 사용하기 있습니다.
다만, getAuthenticatedUser()는 로그인한 사용자의 id를 얻기 위해 필수로 사용되지만..
isAuthenticated()의 경우는 권한 정의가 잘 되어 있으면.. 사실 필요하진 않습니다.
즉.. web.xml에 springSecurityFilterChain 필터가.. Controller(isAuthenticated를 호출하는)를 호출하기 전에.. 접근 권한이 있는지 없는지를 판단하기 때문에..
이 접근 권한 정의가 잘 되어 있으면.. isAuthenticated가 호출되는 일은 없겠죠?
그래서.. 많은 공통컴포넌트들이 isAuthenticated()는 호출하고 있진 않습니다.
추가적으로 사용자에 대한 정보는 session에 직접적으로 저장되어 있지 않고..
Spring security context 객체에 의해 한번 감추어져 있습니다.
그럼.. 즐거운 하루되십시오.
감사합니다.