make it simple
article thumbnail
Published 2023. 4. 17. 04:26
JWT(JSON WEB TOKEN) 이란? DevOps&Network

개요

  • 인증방식은 어떤 서비스를 하던 거의 쓰이며 중요하다. 보통 Cookie/Session/JWT 세가지 방식이 있는데 JWT를 보편적으로 실무에서 많이 사용한다. 위 세가지 방식에 대해 차이점과 왜 JWT가 보편적으로 많이 사용하는지 알아보자.

Cookie / Session 차이점

Cookie

  • 웹 브라우저에 저장되는 키-값 쌍의 작은 데이터 파일
  • 서버에서 클라이언트에게 쿠키를 설정하도록 요청하고, 클라이언트는 쿠키를 저장하고 다음 요청에 함께 보내게 됨
  • 클라이언트 측에서 쿠키를 관리하므로 서버에서는 쿠키를 조작할 수 없음
  • 브라우저를 종료해도 쿠키는 보존될 수 있으며, 만료 기간을 설정할 수 있음

-> 단점: 클라이언트에서  관리하므로 보안이 약하다. 또한, 네트워크에 부담이 간다.

Session

  • 서버 측에서 클라이언트 상태를 저장하는 방법
  • 서버에서 클라이언트에게 고유한 세션 ID를 부여하고, 클라이언트는 이를 쿠키에 저장하여 세션을 인식함
  • 클라이언트 측에서는 세션 ID만 저장하므로, 서버에서 세션 데이터를 관리하고 조작할 수 있음
  • 브라우저를 종료하면 세션도 함께 종료됨

-> 단점: 서버에서 처리하기 때문에 요청이 많아지면 서버에 무리가 간다.


JWT란?

JWT( Json Web Token)는 웹 표준으로, 데이터가 JSON 객체로 안전하게 전송될 수 있도록 디자인된 개방형 표준입니다.

보안적으로 안전하고 신뢰할 수 있는 방식으로 정보를 전송하는 데 사용됩니다. JWT는 보통 인증을 위해 사용됩니다.

JWT (.) 기준으로 부분으로 구성됩니다. -> (JWT : xxxx.yyyy.zzzz)

 

1.Header JWT 어떻게 서명되었는지를 설명합니다. 예제는 Base64Url 인코딩 되었음을 나타냅니다. ( 알고리즘 유형과 토큰의 종류를 나타냅니다.)

{
  "alg": "HS256",  // 사용한 알고리즘
  "typ": "JWT"     // 토큰 종류
}

2. Payload는 key/value 값으로 토큰에 담기위한 서명된 데이터를 의미합니다. 데이터들을 claims라고 나타냅니다. 

  1. Registered Claims:  필수는 아니지만 optional인 데이터들이다. 보통 토큰에 대한 기본적인 데이터 들이다.
    • iss(issuer): 토큰 발급자
    • exp(expiration time): 토큰 만료시각
    • sub(subject): 토큰 주제 
    • aud(audience) : 토큰 대상자
  2. Public Claims: 공개할 수 있는 공개 클레임. 보통 urI 형식으로 짓는다.
  3. Private Claims:  client / server가 서로 사용하기 위해 약속한 클레임( 보통 userId, username) 과 같은 유저 엔티티에 속한 데이터일 수 있다.

예제 payload 한개의 registered claim 2개의 private claims 있다.

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

3. Signature는 API에서 JWT를 수신하여 유효성을 검사할 수 있도록 서명됩니다.  밑 예제 처럼 secret(서버가 가지고 있는 개인키)와 header와 payload를 header가 가지고있는 알고리즘으로 암호화 한다. secret(서버가 가지고있는 개인키를) 유출하지 않는 이상 복호화가 불가능해서 안전성이 높다. 밑에 예제가 signature이다.

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)

암호화된 시그니처


JWT 인증과정


결론

  • Session Cookie 단점을 보완한 JWT 애플리케이션에서 사용자 인증을 관리하는 유용합니다. 특히개발자는 토큰을 사용하여 사용자가 로그인한 후에도 서버에 계속 인증을 유지할 있습니다. JWT 매우 유연하고 안전한 방식으로 데이터를 전송하는 사용됩니다실무에서 보편적으로 가장많이 쓰이는 인증 방식입니다.

reference

'DevOps&Network' 카테고리의 다른 글

[Docker]Docker Compose란?  (0) 2023.04.02
[AWS] 구축한 Subnet에 EC2 연결  (0) 2023.03.23
[AWS] VPC & SUBNET 구축하기  (0) 2023.03.20
profile

make it simple

@keep it simple

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!