모바일 앱 개발의 보안강화를 위한 스프링
시큐리티 프레임워크
‘스프링
프레임워크
(Spring
Framework)’
는
자바
플랫폼
을
위한
오픈소스
애플리케이션
프레임워크
로서
간단히
스프링
(Spring)
이라고도
불린다
.
아키텍처의
중요성이
강조되면서
조명받기
시작하여
엔터프라이즈
어플리케이션
개발의
복잡성을
줄여주고
,
모든
기능을
종합적으로
제공하는
경량화된
솔루션이다
.
우리나라
전자정부의
웹
서비스
개발
시
,
사용을
권장하고
있는
전자정부
표준프레임워크
의
기반
기술로도
쓰이고
있다.
그
중에서도
‘
스프링
시큐리티
’
는
스프링
프레임워크의
하위
개념으로
,
‘
웹
보안
’
에
관련된
프레임워크이다
.
스프링
시큐리티는
강력하면서도
사용하기가
쉽고,
게다가
단
몇
십줄의
코드만으로도
대형
웹
서비스사와
비슷한
수준의
보안을
유지할
수
있다는
장점이
있다
.
물론
기업에서
필요한
시스템에
적합한
시스템을
만들기위해서는
적절한
튜닝이
필요하겠지만
그에
따른
스프링
시큐리티는
정말
최상
중
최상의
선택이
아닐
수
없다
.
스프링
시큐리티는
수
년간의
오픈소스
개발로
인하여
많은
노하우가
녹아있지만
,
국내에서는
상대적으로
유명하지
않고
소개되어
있는
곳도
많지
않은
편인
‘
스프링
시큐리티
’
에
대해
KBS
기술본부
시스템운용부
강자원
기술사로부터
조언을
구할
수
있었다.
1. 스프링 시큐리티 프레임워크의 정의와 역할
2. 스프링 프레임워크의 핵심
3. 스프링 시큐리티 프레임워크 사용방법
4. 스프링 시큐리티 프레임워크
아키텍처 |
Q)
스프링
시큐리티
프레임워크를
한마디로
정의하자면
무엇인가요
?
스프링
시큐리티
프레임워크는
필요한
인증
,
권한
및
보안관련
기능들을
손쉽게
사용할
수
있게
지원해주는
프레임워크입니다
.
구현은
servlet
filter 및
Spring
AOP
기반이며
유연한
설계로
다양한
확장
및
커스터마이징이
가능합니다
.
또한
,
비즈니스
로직과
인증
,
권한
로직을
90%
이상
분리가
가능하며
구축된
프레임워크의
재활용과
기존
스프링
기반의
레거시
시스템에
적용할
때
매우
유용한
장점이
있습니다
.
Q)
왜
스프링
시큐리티
프레임워크를
사용하는
건가요
?
보안강화를
위해서
어떤
역할을
하는지
궁금합니다.
기본
설정만으로도
일반적인
기업
인증
시스템과의
연동이
바로
가능하고
설정을
제외하고
아주
적은
노력만으로도
각
상황에
보안을
적용할
수
있습니다.
또한
,
스프링
시큐리티를
사용하면
다음과
같은
일들을
할
수
있습니다.
-
시스템
사용자를
개별
사용자를
세분화
한다.
-
사용자
역할에
따라
권한부여
레벨을
부여한다
-
사용자
군에
사용자
역할을
부여한다
-
애플리케이션
리소스에
대해
전역으로
인증규칙을
적용한다.
-
모든
애플리케이션
아키텍처
레벨에서
권한
부여
규칙을
적용한다.
-
사용자의
세션을
조작하거나
훔치려는
일반적인
공격을
차단한다.
Q)
스프링
시큐리티
프레임워크의
핵심은
무엇인가요?
스프링
시큐리티는
주체를
고유
식별하는데
사용되는
자바
표준
보안개념인
인증입니다.
Principal(java.security.Principal)
을
확장해
사용하고
,
전형적인
Principal
에서는
시스템
사용자에
대한
1:1
매핑을
사용하지만
이러한
Principal
은
시스템의
어떠한
클라이언트
,
이를
테면
앱
서비스
클라이언트
,
자동배치피드
등에도
매핑할
수
있습니다.
스프링
시큐리티의
모듈
구성은
아래
그림과
같습니다.
[
그림
1
참조
]
<
그림
1>
Spring security Modules & sub-Modules
스프링
시큐리티에서
주로
영향을
주는
방식은
일련의
ServletRequest
필터를
사용한
방식입니다.
필터들이
앱에
대한
모든
요청을
감싸서
처리하게
되는데
,
스프링
시큐리티에서
여러
개의
필터들은
체인
형태를
이루면서
동작을
합니다.
자동설정
옵션을
사용하면
10
개의
스프링
시큐리티
필터가
자동으로
설정되게
됩니다.
[
그림
2
참조
]
<
그림
2>
스프링
시큐리티의
필터
체인
내의
동작과정
각
순서와
기능을
간단히
요약하면
다음과
같습니다.
<
표
1>
자동설정으로
구성되는
필터체인
내의
10
개의
필터
필터
체인의
제일
마지막에
위치한
‘Filter
Security Interceptor’
는
앞에
지나온
모든
필터들의
정보를
토대로
최종
결정을
내리게
됩니다.
Spring
Security
는
대략
25
개의
필터를
제공합니다.
이런
필터들은
모두
조건적으로
적용될
수
있습니다.
물론
javax.servlet.Filter
인터페이스를
직접
구현해서
추가할
수도
있고
위에
나열된
필터들을
명시적으로
포함시키거나
제외시킬
수도
있습니다.
Q)
스프링
시큐리티를
사용하면
기본
옵션에서
벗어난
요구사항들은
어떻게
충족시킬
수
있을까요?
스프링
시큐리티는
커스터마이징을
하거나
확장시킬
수가
있는데
,
이렇게
하려면
전체
스프링
시큐리티
필터
체인과
지원
인프라
스트럭처를
처음부터
하나씩
직접
설정해야
합니다
.
이렇게
하나씩
작성할
때에는
빈
의존관계를
염두해서
설정해야
하는데요
.
스프링
시큐리티의
필터들은
순서가
존재하기
때문에
이
순서를
어길
경우에는
예상치
못한
결과가
나올
수도
있습니다
.
그러므로
특별한
경우가
아니라면
순서를
지켜주는
것이
좋습니다.
<
그림
3.
빈
의존관계
구성도
>
Q)
스프링
시큐리티
프레임워크를
사용할
때
‘
기본설정
’
과
‘
커스터
마이징
방법
’
중
어떤
것을
사용하는
것이
좋을까요?
너무나도
당연한
답이지만
선택은
사용자의
몫입니다
.
기본
설정으로
사용을
하는
것은
예상하지
못한
결과를
초래하지
않는
최선의
방법이
되겠지만
,
각각
아래와
같은
장점이
있으므로
개발하려는
목적에
맞게
사용하시면
될
것
같습니다.
<
기본
설정의
장점
>
-
일반적인
웹
기반
및
메소드
기반
설정에
적용할
수
있는
강력한
기능의
축약
구문
-
복잡한
설정을
적용하기
위해
개발자들이
내부적으로
일어나는
세부
내용에
대해
알
필요가
없음
-
security 네임스페이스
핸들러
코드가
다양한
설정
이슈
관련
문제를
파악하고
경고해줌
-
설정
과정에서
필요한
부분을
빼놓고
설정할
위험이
극히
적음
<
커스터
마이징의
장점
>
-
화장
,
오버라이드
,
표준
스프링
스탤에서
의도적으로
일부를
생략하는
것과
같은
유연성을
허용함
-
filter-chain 엘리먼트의
pattern
어트리뷰트를
사용해
URL
패턴에
의존한
커스텀
필터
체인
및
인증을
허용하는데
이러한
기능은
웹
서비스
또는
REST
인증과
사용자
기반
인증이
함께
사용될
때
필요할
수
있음.
-
설정
파일들이
스프링
시큐리티
네임스페이스
처리와
직접적인
연관성이
없음.
-
인증
관리자를
명시적으로
설정하거나
오버라이드
할
수
있음.
-
단순한
security
네임스페이스를
적용할
때보다
훨씬
더
많은
설정
옵션을
사용할
수
있음.
Q)
마지막으로
스프링
시큐리티
프레임워크에
대해
정리
부탁드리겠습니다.
스프링
시큐리티의
기본
아키텍처는
다음과
같습니다.
<
그림
4>
Spring Sequrity Basic Architecture
웹
어플리케이션
인증절차를
아키텍처를
기반으로
간단히
설명을
하자면
다음과
같습니다
.
인증요청
시
보호된
자원일
경우
로그인
여부를
판단하고
로그인
성공
시
권한을
체크하여
리소스에
접근권한을
줍니다
.
만약
접근
권한이
없다면
403,
로그인
실패라면
페이지
재호출을
하게
됩니다
.
요청
->
Filter Chain
호출
->
인터셉터
호출
->
자원접근
그에
대한
과정과
상세화는
아래
그림과
같습니다
.
자료
:
구글
이미지
따라서
,
기본
아키텍처와
상세화
부분을
매칭시키면
아래와
같습니다
.
시스템을
개발하면
거의
필수적으로
포함되어야
하는
보안에
관한
이슈가
생기는데
,
수
년간의
오픈소스
개발로
인하여
많은
노하우가
녹아있는
스프링
시큐리티에
대한
소개였습니다.
<
참고문헌
>