study

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

당코 2023. 5. 24. 19:53

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에 대한 내용을 어떻게 코드로 바꾸는지에 대해 처음에는 막막했다. 직접 하나씩 코드로 처 보면서 이 메서드가 어떤 기능을 하는지 공부하고 이해해 보려 노력했다.

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