JWT (Json 웹 토큰 인증)
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}와 새로 만든 전자서명 부분 일치 확인
=>따라서 매번 인증 서버에서 토큰의 유효성을 물어보지 않아도 됨