이번 시간에는 스프링(자바)에서 SSO 인증에 대한 부분을 심화 학습하도록 하겠습니다.
SSO 인증을 기존 스프링 시큐리티에서 어떻게 적용하는지 알아야 합니다.
그러기 위해서, 스프링 시큐리티 프레임워크에 대해서 먼저 학습하겠습니다.
# Spring Security의 보안요소 2가지
1. 인증(authentication)
2. 권한(authorization)
위 2가지는 java.security.Principal 인터페이스를 생성하게 구현하게 됩니다.
스프링은 이 프린시펄로 접근한 사용자가 권한을 가졌는지 검사할때,
사용자가 어떤 Role그룹에 속해 있는지 역할(Role)을 기반으로 권한을 체크하게 됩니다.
ROLE_ADMIN, ROLE_MANAGER, ROLE_USER 과 같이 역할을 할당하게 됩니다.
=============# 스프링 Security 프레임워크를 사용하기 위한 설정순서 #===============
1. Maven 설정파일에서 종속성(dependency) 추가
- www/pom.xml
- package 빌드시 라이브러리 dependency 파일들추가(아래 3.0.5버전은 프로젝트에 따라서 달라질수 있음)
>> -www/src/main/webapp/WEB-INF/lib (이폴더에 아래 jar 압축파일을 갖다놓고 이클립스에서 maven -package 하면된다)
>>> 상위/spring-security-core-3.0.5.RELEASE.jar
>>> 상위/spring-security-web-3.0.5.RELEASE.jar
>>> 상위/spring-security-config-3.0.5.RELEASE.jar
2. 클라이언트의 HTTP 요청에 대하여 보안을 적용하기 위해 web.xml 파일에 Spring Security 프레임워크가 제공하는 서블릿 필터를 추가
-www/src/main/webapp/WEB-INF/web.xml
>> 스프링 시큐리티 필터 서블릿 필수
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
>> (참조) SSO필터 서블릿이 있다면...
<filter>
<filter-name>singleSignOnFilter</filter-name>
<filter-class>org.springframework.security.SingleSignOnFilter</filter-class>
<init-param>
<param-name>agent.name</param-name>
<param-value>www</param-value>
</init-param>
<init-param>
<param-name>agent.mode</param-name>
<param-value>reverse</param-value>
</init-param>
<init-param>
<param-name>idp.url</param-name>
<param-value>https://sso.uniondomain.kr</param-value>
</init-param>
<init-param>
<param-name>agent.redirect</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>singleSignOnFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. 보안관련 설정 xml파일을 웹애플리케이션 컨텍스트에 추가
-www/src/main/webapp/WEB-INF/web.xml
> 아래설정은 www/src/main/webapp/WEB-INF/classes/egovframework/spring/com/폴더에서
context-로 시작하는 모든 xml 파일을 웹애플리케이션 컨텍스트 설정으로 사용하겠다는 의미 입니다.
보통 context-security.xml 파일처럼 해당설정이 무슨 목적의 설정인지 구분값으로 사용 합니다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:egovframework/spring/com/context-*.xml</param-value>
</context-param>
4. 인증관리자에 사용자 인증 및 권한정보를 등록한다.
- www/src/main/webapp/WEB-INF/classes/egovframework/spring/com/context-security.xml
> 아래와 같이 URL에 대한 요청을 가로챌 수 있도록 <http>요소를 추가 합니다. 여기서 auto-config=false 는 스프링 기본 로그인 페이지와 로그아웃 기능을 사용하지 않고, 사용자가 생성한 로그인페이지와 로그아웃 기능을 사용한다는 의미 입니다. 또한, 요청에 대해서, hsRole매서드로 사용권한도 확인 가능합니다.
<http auto-config="false">
<intercept-url pattern="/**" requires-channel="any" access="permitAll" />
<intercept-url pattern="/usr/**/**.do" requires-channel="any" access="hasRole('ROLE::USR')"/>
</http >
====== 여기서 url 패턴(pattern)에 대해서
* pattern="/user/**/**.do" 여기에서
*, ** 는 Ant(메이븐이전빌드툴) 스타일의 패턴으로 그 의미는 아래와 같다.
- ?: 1개의 문자와 매칭
- *: 0개 이상의 문자와 매칭
- **: 0개 이상의 디렉터리와 매칭
위를 해석하자면, /user/ 경로에서 **/ 모든폴더 경로아래에 ** 모든폴더에서 .do 확장자를 매칭(매핑) 한다.
참고로 /로 끝나는 경우 별도로 지정한 디폴트서블릿 파일과 매칭(매핑)
> 그러고, 인증과 권한을 DB에서 체크하는 부분을 추가 합니다. (여기서는 jdbcService 라는 서비스 ID를 사용한다고 추가합니다.
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="jdbcService">
</authentication-provider>
</authentication-manager>
5. jdbcService 서비스에 실제 쿼리가 존재하고, 그 쿼리 리턴값을 제일 처음에 언급한 java.security.Principal 멤버에 추가 하게 됩니다.
아두이노 ADK보드 + 안드로이드 앱 프로젝트: 구글 ADK 데모앱 사용후기 (0) | 2016.01.22 |
---|---|
아두이노ADK + 안드로이드 프로젝트 개발-환경구축 (0) | 2016.01.20 |
R&D 2016 프로젝트3-06 스프링기반 Json Parser for Android (0) | 2016.01.01 |
R&D 2016 프로젝트3-05 스프링기반 Json Parser for Android (0) | 2015.12.29 |
R&D 2016 프로젝트3-04 스프링기반 Json Parser for Android (0) | 2015.12.26 |
댓글 영역