[TIL] - Spring 숙련 - 3

장동희·2023년 3월 7일
0

TIL

목록 보기
11/16

공부하면서 궁금했던것들 :

JWT

토큰 기반 인증 시스템의 대표적인 구현체입니다. Java를 포함한 많은 프로그래밍 언어에서 이를 지원하며, 보통 회원 인증을 할 때에 사용됩니다.

토큰 사용 방식의 특징

    1. 무상태성 :
      사용자의 인증 정보가 담겨있는 토큰을 클라이언트에 저장하기 때문에 서버에서 별도의 저장소가 필요 없어, 완전한 무상태(stateless)를 가질 수 있습니다. 그리고 이로인해 서버를 확장할 때 용이합니다.

    1. 확장성 :
      토큰 기반 인증을 사용하는 다른 시스템에 접근이 가능합니다. (ex. Facebook 로그인, Google 로그인)

    1. 무결성 :
      HMAC(Hash-based Message Authentication) 기법이라고도 불리며, 발급 후의 토큰의 정보를 변경하는 행위가 불가능합니다. 즉, 토큰이 변조되면 바로 알아차릴 수 있습니다.

    1. 보안성 :
      클라이언트가 서버에 요청을 보낼 때, 쿠키를 전달하지 않기 때문에 쿠키의 취약점은 사라지집니다.

JWT 구성 요소

1. 헤더(header)

헤더는 토큰의 타입과 해싱 알고리즘을 지정하는 정보를 포함합니다

  • typ : 토큰의 타입을 지정합니다. JWT라는 문자열이 들어가게 됩니다.
  • alg: 해상 알고리즘을 지정합니다.

2. 정보(payload)

토큰에 담을 정보가 들어갑니다. 정보의 한 덩어리를 클레임(claim)이라고 부르며, 클레임은 key-value의 한 쌍으로 이루어져있습니다. 클레임의 종류는 세 종류로 나눌 수 있습니다.

2-1. 등록된(registered) 클레임

  • 토큰에 대한 정보를 담기 위한 클레임들이며, 이미 이름이 등록되어있는 클레임
  • iss : 토큰 발급자(issuer)
  • sub : 토큰 제목(subject)
  • aud : 토큰 대상자(audience)
  • exp : 토큰의 만료시간(expiraton). 시간은 NumericDate 형식으로 되어있어야 하며,(예: 1480849147370) 항상 현재 시간보다 이후로 설정되어있어야한다.
  • nbf : Not Before 를 의미하며, 토큰의 활성 날짜와 비슷한 개념. NumericDate 형식으로 날짜를 지정하며, 이 날짜가 지나기 전까지는 토큰이 처리되지 않는다.
  • iat : 토큰이 발급된 시간 (issued at)
  • jti : JWT의 고유 식별자로서, 주로 일회용 토큰에 사용한다.

2-2. 공개(public) 클레임

  • 말 그대로 공개된 클레임, 충돌을 방지할 수 있는 이름을 가져야하며, 보통 클레임 이름을 URI로 짓는다.

2-3.비공개(private) 클레임

  • 클라이언트 - 서버간에 통신을 위해 사용되는 클레임

3. 서명(signature)

해당 토큰이 조작되었거나 변경되지 않았음을 확인하는 용도로 사용하며, 헤더(header)의 인코딩 값과 정보(payload)의 인코딩값을 합친 후에 주어진 비밀키를 통해 해쉬값을 생성합니다.

정리 :

다음주차에는 스프링 시큐리티에서 JWT를 적용하는 방법에 대해서 공부하게 될것같습니다. 시큐리티를 사용하기전에 JWT에 대해서 공부하는 시간을 갖게되어 좋았습니다.

0개의 댓글