
1.보안 용어 이해
1) 인증(Authentication)
- 사용자 확인
- 서버는 사용자 일치 확인 후 사용자에게 토큰 전달
2) 인가(Authorization)
- 사용자 접근 권한 확인
- 사용자가 리소스 접근 시 인증 통해 받은 토큰으로 인가 수행
3) 접근 주체
- 애플리케이션 사용 주체
- 사용자, 디바이스, 시스템 등이 될 수 있음
2. 스프링 시큐리티와 동작 구조
1) 스프링 시큐리티
인증, 인가 등의 보안 기능을 제공하는 스프링 하위 프로젝트 중 하나
2) 동작 구조
- 서블릿 필터(Servlet Filter) 기반으로 동작
- 클라이언트와 DispatchServlet 앞에 필터 배치
- 클라이언트와 DispatchServlet 사이 필터 체인(Filter Chain) 배치
- Filter Chain : 서블릿 컨테이너에서 관리하는 ApplicationFilterChain

3. JWT(Json Web Token)
[JWT 구조]
xxx.yyy.zzz
xxx : 헤더 (Header)
yyy : 내용 (Payload)
zzz : 서명 (Signature)
- 당사자 간 정보를 JSON 형태로 전송하기 위한 토큰
- 주로 서버와 통신에서 권한 인가를 위해 사용
1) 구조
-
헤더(Header)
-
검증과 관련된 내용
-
alg, typ 속성 포함
{
"alg": "HS256", # 해싱 알고리즘
"typ": "JWT" # 토큰 타입
}
```
-
내용(Payload)
-
토큰에 담는 정보 포함
-
포함된 속성들을 클레임(Claim)이라 함
- 등록된 클레임(Registered Claims) - 토큰에 대한 정보 담기 위해 이름이 정해진 클레임
- 공개 클레임(Public Claims) - 키 값 임의로 설정 가능
- 비공개 클레임(Private Claims) - 통신 간에 상호 합의되고 위 클레임들에 속하지 않는 클레임
-
서명(Signature)
-
인코딩된 헤더
-
인코딩 내용
-
비밀키
-
헤더 알고리즘의 속성값
2) 역할
- UserDetails
- UserDetailsService 통해 입력된 로그인 정보를 통해 DB에서 사용자 정보 가져오는 역할 수행
- JwtTokenProvider