본문 바로가기
Computer-Sience/Security

[Web] 토큰 기반 인증 / JWT (Json Web Token)

by dev_ss 2022. 11. 9.

1. 토큰 기반 인증이란?

사용자가 자신의 신원을 검증하여 대가로 본인을 나타내는 고유 Access Token을 받는 프로토콜이다.

 

토큰 기반 인증 중 한 예시


2. 인증 토큰 유형의 분류

인증 토큰은 전부 접근을 허용하나 다음의 세 가지의 유형 별로 다르게 작동한다.

 

1) Connected :

     키, 디스크, 드라이브 등의 물리적 장치가 액세스를 위해 시스템에 연결

 

2) Contactless :

     장치가 서버와 통신이 가능할 정도로 가까이 있으나 연결은 되어있지는 않은 상태

 

3) Disconnected :

     장치가 다른 장치와 접촉이 없더라도 장거리 통신을 통하여 서버와 통신하여 작동

 


3. JWT (Json Web Token)

사용자가 웹/앱을 통하여 시스템에 액세스를 하는 수가 늘어나면서 플랫폼에 대한 안전한 인증 방법에 대한 필요성이 대두되었고 이에 따라 개발된 것이 JWT(Json Web Token)이다.

 

JWT는 Json 형식을 기반으로 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준 형식이다.

 

토큰은 공개/비공개 비밀를 사용하여 서명되며 다음 3가지 파트로 구조를 나누어서 볼 수 있다.

1) 헤더(Header) : 서명 생성을 위해 사용할 알고리즘 식별

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

 Detail : 해당 토큰이 HMAC-SHA256 알고리즘을 사용하여 서명된다.

 

2) 페이로드(Payload) : 토큰 발급자(사용자)와 토큰 만료 등을 정의

{
    "loggedInAs" : "admin",
    "iat" : 1234567890
}

 

3) 서명 (Signature) : 서명은 Base64 url Encoding 기반으로 헤더와 페이로드를 인코딩하고 이 둘을 점(.) 구분자로 연결시킴으로 계산되며 토큰을 안전하게 확인한다.

HMAC-SHA256(
 secret,
 base64urlEncoding(header) + '.' +
 base64urlEncoding(payload)
)

 

위 헤더와 페이로드를 secret-key를 사용하여 Base64url로 Encoding을 한다.

 

Example :

ewogICAgImFsZyIgOiAiSFMyNTYiLAogICAgInR5cCIgOiAiSldUIgp9LnsKICAgICJsb2dnZWRJbkFzIiA6ICJhZG1pbiIsCiAgICAiaWF0IiA6IDEyMzQ1Njc4OTAKfQ==

 


4. JWT의 장단점

1) 장점

  • 크기 : 토큰의 크기는 크지 않으며 두 엔터티 간에 매우 빠르게 전달이 가능
  • 용이성 : 토큰은 거의 모든 곳에서 생성가능하며 서버에서 확인이 불필요
  • 제어 : 다른 사람이 액세스할 수 있는 항목, 권한이 지속되는 동안 수행할 수 있는 작업을 지정이 가능

2) 단점

  • 단일 키 : JWT는 단일 키에 의존하며 해당 키가 손상되거나 유출되었을 때 전체 시스템에 위험을 발생
  • 복잡성 : 암호화 서명 알고리즘을 이해하려면 많은 지식이 필요하며 지식의 부재 시 실수로 인한 시스템의 위험을 유발
  • 제한 사항 : 모든 클라이언트에게 메시지를 보낼 수 없으며 서버 측에서 클라이언트 관리가 어려움
반응형

'Computer-Sience > Security' 카테고리의 다른 글

[Security] 제로 트러스트(Zero-Trust)  (0) 2024.05.18