기술 공부

JWT (Json 웹 토큰 인증)

랼랼 2022. 4. 10. 14:16

https://jwt.io/

 

1.Basic 인증

 

HTTP 요청에 아이디와 비밀번호를 같이 보내는 방식

HTTP 요청 해더의 Authorization 부분에 'Basic <ID>:<Password>' 를 이어 붙인 뒤,

Base64로 인코딩한 문자열을 함께 보냄

 

* 문제점 :

1) 아이디와 비밀번호 노출 => 따라서 HTTPS와 함께 사용

2) 로그아웃 불가

3) 사용자의 계정 정보가 있는 저장 장소(인증 서버, 인증 DB) 과부하 위험

4) 단일 장애점 문제 : 한 부분 오류시 전체 시스템 가동 불가

 

2. 토큰 기반 인증

최초 로그인 시 서버가 생성

클라이언트는 이후 요청에 아이디와 비밀번호 대신 토큰을 넘겨줘 자신이 인증된 사용자임을 알림

Authorization 부분에 'Bearer <TOKEN>' 명시

*문제점 :

매번 아이디 비밀번호를 네트워크 전송하지 않아도 되어 보안측면에서 안전

토큰 생성할 수 있음으로 정보 또는 유효시간 관리 가능

그러나 스케일 문제는 여전히 발생(과부화 위험)

 

3.JSON 웹토큰 : 전자서명된 웹토큰(JWT) - 스케일 문제 해결

1) 구성

 Header

   typ : 토큰의 타입

   alg : 토큰의 서명을 발행하는데 사용된 해시 알고리즘

 Payload

   sub : 토큰의 주인, id와 같은 유일한 식별자

   iss : 토큰 발생 주체, 주로 애플리케이션

   exp : 토큰 만료 시간

 Signature : 토큰 발생 주체, 서명으로 토큰의 유효성 검사에 사용

 

운영방법

 1) 최초 로그인 시 서버는 아이디, 비밀번호 비교 인증

 2) 인증된 사용자라면 사용자의 정보를 통해 {Header}, {Payload} 부분 작성

 3) 자신의 시크릿키로 {Header},{Payload} 부분 전자 서명

 4) 해당 결과값을{Header}.{Payload}.{Signature}로 이어 붙이고 Base64로 인코딩 후 반환

 

 5) 리소스 접근 요청 시, 토큰 디코딩하여 {Header},{Payload} 부분으로 전자 서명 생성

 6) {Signature}와 새로 만든 전자서명 부분 일치 확인

 =>따라서 매번 인증 서버에서 토큰의 유효성을 물어보지 않아도 됨

 

반응형