본문 바로가기

패스트캠퍼스/100% 환급 챌린지_2

패스트캠퍼스 환급챌린지 42일차 : Netplix 구독형 멤버십 프로젝트로 배우는 Spring Security 강의 후기

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

 

안녕하세요 :)

오늘은 챌린지 42일차로, 또다시 헬요일 시작입니다.. 흐엉 구해줘..

 

오늘 배울 내용은,

Part B. 스프링 시큐리티 심화

Ch 6. 실전: 인증 서버와 애플리케이션 서버 분리

"02. 토큰에 대해서" 입니다.


 

오늘은 토큰이 무엇인지에 대해 알아보는 시간을 가졌다. 토큰은 특정 엔드포인트에 접근하려는 클라이언트가 HTTP 헤더를 통해 전달하는 문자열이라고 할 수 있다. UUID 처럼 단순한 문자열 일수도 있고, JWT (JSON Web Token) 처럼 조금 더 복잡한 형식으로 구성될 수도 있다. 비유를 하면, 호텔 출입문 카드와 비슷하다고 생각할 수 있다. 모든 사람은 호텔 방에 접근할 수 없고, 호텔 방을 예약한 사람만 접근할 수 있는 권한이 생기고, 체크인 과정을 통해 특정 방에 접근할 수 있는 호텔 출입문 카드를 얻는다. 호텔이 허용한 방에만 해당 출입문 카드로 접근할 수 있고, 출입문 카드가 있다고 하더라도 모든 방에 대한 접근 권한이 생기는 것은 아니다.


UUID 기반의 토큰을 활용하는 시나리오를 한번 살펴보면 다음과 같다.

사용자 → 서버 → 데이터베이스
1. 사용자의 ID/PW로 인증을 시도함
2. 인증에 성공하면 사용자를 위한 토큰을 생성
3. 생성한 토큰을 데이터베이스에 저장
4. 생성한 토큰을 사용자에게 전달
5. 다른 엔드포인트 호출 w/ 토큰
6. 토큰 검증
7. 토큰이 유효하면 결과값 반환

토큰을 사용하는 장점에 대해 살펴보면, 먼저 토큰을 왜 사용할까?
장점 1. 토큰을 이용하면 요청할 때마다 자격 증명을 공유할 필요가 없다.
장점 2. 토큰의 수명을 짧게 지정할 수 있다.
장점 3. 자격 증명을 무효로 하지 않고 토큰을 무효로 할 수 있다.
장점 4. 클라이언트가 요청할 때 보내야 하는 사용자 권한과 같은 세부 정보를 토큰에 저장할 수 있다.
장점 5. 토큰을 이용하면 인증 책임을 시스템의 다른구성 요소에 위임할 수 있다.

JWT, JSON 웹 토큰에 대해 알아보면, JWT 는 JSON Web Token 의 약자로 애플리케이션에서 많이 사용되는 토큰 중 하나이다. OAuth2.0을 다룰 때에도 이를 활용하기 때문에 미리 한번 살펴볼 예정이다.

이름의 의미에 대해 살펴보면,
- JSON: 데이터의 형식이 JSON 형식
- Web: 웹 요청을 위해 설계됨
- Token: 토큰의구현
이다.

JWT 의 구성요소로는 UUID 는 일반적인 문자열이지만 JWT 는 세 부분으로 구성되어 있고 각 부분은 마침표(.) 으로 구분된다. 그리고 헤더.본문.디지털 서명 으로 구성되어 있다.

JWT 의 헤더와 본문(Payload)은 JSON 으로 형식이 지정되고 Base64 로 인코딩 된다. 세부 정보를 저장하는 위치이다. 헤더에는 토큰과 관련된 메타 데이터가 저장되고, 서명을 생성하는데 이용한 알고리즘의 이름이 저장될 수 있다. 본문에는 권한 부여에 필요한 세부 정보를 저장할 수 있다. 예시에서는 일련번호, 사용자 이름, 시간이 저장된다. 토큰은 짧게 유지하는 것이 좋으며, 본문에는 많은 데이터를 추가하지 않은 것이 좋다. 길이에 대한 제한은 없지만 길이가 길면 요청 속도가 느려지며 암호화 알고리즘이 서명하는 시간도 길어진다.

JWT 의 디지털 서명 (Digital Sign)은 JWT 의 마지막 부분으로 생략할 수 있다. 생략이 되어 버리면 네트워크에서 토큰을 전송할 때 보낸 발송자를 확인할 수 없고, 따라서, 통신 과정에서 토큰이 가로채어져 토큰 내용이 변경되었는지에 대한 확신을 할 수 없다.