본문 바로가기
study

[JSCODE] JWT를 이용한 로그인 구현

by 당코 2023. 5. 24.

JWT

Json Web Token의 약자로 Json을 이용하여 사용자 인증을 위한 정보를 저장하는 토큰이다.

Base64로 인코딩 되어 Header, Payload, Signature 3가지 부분으로 이루어진다.

 

Header

typ : 토큰의 타입

alg : 사용된 암호화 알고리즘

{
  "alg": "HS256",
  "typ": "JWT"
}

 

Payload

Payload에는 클레임이라는 토큰에서 사용할 정보들이 담겨 있다.

  • iss: 토큰 발급자(issuer)
  • sub: 토큰 제목(subject)
  • aud: 토큰 대상자(audience)
  • exp: 토큰 만료 시간(expiration)
  • nbf: 토큰 활성 날짜(not before)
  • iat: 토큰 발급 시간(issued at)
  • jti: JWT 토큰 식별자(JWT ID)
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

 

Signature

Signature는 토큰을 인증하거나 암호화할 때 사용하는 고유한 코드이다.

Header와 Payload를 Base64로 인코딩하고 비밀 키를 이용하여 Header의 알고리즘으로 암호화 한 뒤에 다시 Base64로 인코딩하여 Signature를 생성한다.

 

어려웠던 점, 개선할 점

다른 분들의 코드를 참고하면서 로그인 기능을 구현하였다. 이론상의 Jwt에 대한 내용을 어떻게 코드로 바꾸는지에 대해 처음에는 막막했다. 직접 하나씩 코드로 처 보면서 이 메서드가 어떤 기능을 하는지 공부하고 이해해 보려 노력했다.

예전에 배웠던 필터에 대한 개념도 나왔고 스프링 시큐리티에 대한 전체적인 이해가 있어야 더 잘 사용할 수 있을 것 같다. 스프링 시큐리티에 대해 추가적인 공부를 하면서 나 스스로 구조를 설계해 보고 구현해 보아야겠다.