sliver__

[Spring security] JWT(Json Web Token) 본문

Backend/Spring Security

[Spring security] JWT(Json Web Token)

sliver__ 2025. 1. 31. 00:02
728x90

Token은 왜 사용될까?

Client가 서버에 접근할 때, 해당 client가 올바른 계정 정보를 가지고 접근했는지 판단하기 위해 사용된다.

  1. Client가 username, password를 server로 전송하면
  2. Server는 username, password를 검증하고 token을 발급하여 client에게 전달한다.
  3. Client는 전달받은 token을 header에 추가하여 원하는 API에 접근하면
  4. Server는 token을 검증하고, 유효하다면 데이터를 return한다.

 

여러 Token 방식이 있는데, 그 중 JWT는 Json 형식의 데이터를 사용하여 token을 생성한다.

JWT 방식은 인증 서버 없이도 Client/Server app에서 유효한 지 검증이 가능하다.

구성은 아래와 같다.

 

{header}.{payload}.{signature}

 

header, payload의 정보는 base64로 encode하고 signature는 hmac(header + "." + payload, secret key)로 hashing한다.

hashing 하기 위한 secret key값은 고유한 key 값이므로 키 값에 대한 보안이 중요하다.

 

만약, client가 요청한 header와 payload의 정보가 바뀌면 token의 값도 변경되기 때문에 해당 token이 유효한지 검증이 가능하다.

 

이 사이트에서 JWT token을 생성해볼 수 있다.

https://jwt.io/

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

 

 

========================================================================================

 

JWT Token 생성/검증하기 위해서는 

  1. Login 시, JWT Token 생성 및 Client로 전송
  2. API 요청 시, JWT Token 유효성 검사

위 두 로직을 필터에 추가해야한다.

 

백엔드에서 생성 및 검증용 필터를 추가하고, 프론트엔드에서 백엔드로부터 전달받은 JWT token을 저장하도록 한다.

 

또한 API로 login을 제공하는 경우에, DTO를 통해 Response body 또는 header에 JWT token을 전송할 수 있다.

728x90
Comments