[Spring security + JWT] #2 JWT

devwuu·2023년 7월 27일
0

security

목록 보기
2/6

이 게시글은 강의를 듣고 정리한 내용이 주를 이루고 있습니다.
수강 강의 : (인프런) 스프링부트 시큐리티 & JWT 강의
🏠 https://github.com/devwuu/spring-security-exam


1. JWT ?

  • 공식 문서 : https://jwt.io
  • Json Web Token의 약자
  • 암호화된 메세지를 주고 받을 수도 있지만 서명에 중점을 두었다.
  • Header, Payload, Signature로 이루어져있고 각각을 순서대로 .을 이용해 연결하여 표현한다


2. JWT를 이용한 인증

  1. client 에서 로그인 시도
  2. Server는 User 인증 완료시 JWT 토큰 생성
    (1) Header : 암호화 알고리즘 (e.g. HS256)
    (2) Payload : 내용 ( e.g. { userId: "" } )
    (3) Signature : BASE64(Header) + BASE64(Payload) + [ BASE64(비밀키) | 비밀키 | ... ]를 Header에 적인 암호화 알고리즘으로 암호화 한 내용.
    암호화 방식에 따라서 무엇을 암호화 할 것인지에 대해 조금씩 차이가 있으며 디버거에서 각 암호화 알고리즘을 눌러 확인해볼 수 있음.
    (4) header, payload, signature 각각을 BASE64로 인코딩한 뒤 .을 이용하여 순서대로 연결해서 JWT 토큰을 완성함
  3. Server에서 JWT 토큰을 응답함
  4. Client에서 응답 받은 JWT 토큰을 저장함 ( e.g. localStorage)
  5. 이후 발생하는 Request는 JWT 토큰을 헤더에 넣어 요청함
  6. Server는 request 헤더에 있는 JWT 토큰의 Header, Payload와 자신의 비밀키를 Header에 적인 암호화 알고리즘을 이용하여 암호화한다. 이 값이 JWT 토큰의 signature와 일치하면 정상적으로 reponse한다.


3. JWT의 암호화 알고리즘

3-1. HS256

  • HMAC + SHA256
  • 대칭키 방식 + 해시
  • HMAC은 비밀키를 포함하여 암호화한다
  • 대칭키 방식이기 때문에 토큰을 발급해주는 주체와 인증(소비)하는 주체가 동일할 때 사용하면 된다.
    (키를 공유하면 안됨)

3-2. RS256

  • RSA + SHA256
  • 비대칭키 방식 + 해시
  • 비대칭키 방식이기 때문에 개인키로 암호화하여 서명하고 공개키로 복호화하여 인증한다
  • 토큰 발급 주체와 인증(소비)하는 주체가 다를 경우에 사용하면 된다.

이 외에도 여러가지 방식이 있지만 강의에서는 HS256을 사용한다.

profile
일단 한다

1개의 댓글

comment-user-thumbnail
2023년 7월 27일

정리가 잘 된 글이네요. 도움이 됐습니다.

답글 달기

관련 채용 정보