본문 바로가기

개발에 도움이 되는/Web

JWT(Json Web Token)

 

- JWT (Json Web Token)

쿠키와 세션의 단점을 보완하기 위해 나온 모바일이나 웹의 사용자 인증을 위해 사용하는 암호화된 토큰

인증에 필요한 정보들을 Token에 담아 암호화시켜 사용하는 토큰

JWT를 이용하면 유저가 자신의 데이터를 볼 수는 있는데 수정은 서버를 통해서만 할 수 있다

 

 

- JWT 구조

 

위 그림과 같이 header, payload, signature 세 파트로 나뉘어져있고, 각 파트는 . 으로 구분한다.

모두 Base64Url로 인코딩되어 있다.

 

1. header : 토큰의 타입, 서명 생성에 어떤 알고리즘이 사용되었는지 설정

{
    "typ" : "JWT",
    "alg" : "HS512"  // HS512 알고리즘이 적용되어 private key를 암호화
}

 

2. payload : 토큰에 담을 데이터가 들어있으며, 각각의 데이터를 클레임이라 부르며, key - value로 구성되어 있다.

표준 스펙도 있고, 사용자가 직접 만들어도 문제가 없다.

{
    // 표준 스펙
    "sub" : "토큰 제목",
    "iss" : "토큰 발급자",
    "aud" : "토큰 대상자",
    "exp" : "토큰 만료 시간",
    "iat" : "토큰 발급 시간",
    
    // 사용자가 만듦
    "name" : "An Solomon"

}

 

3. signature : JWT의 핵심이 되는 파트로 인코딩된 header와 payload를 secret key를 포함하여 HMAC 알고리즘을 돌리면 해시 값이 나온다. 그 해시 값을 Base64Url로 인코딩하면 signature가 나오고 전달 받은 signature값과 알고리즘을 돌려서 나온 signature값이 같아야 인증이 된다.

 

 

- JWT 장점 

 1) header와 payload를 가지고 signature를 생성하므로 데이터 위변조를 막을 수 있음

 2) stateless라 확장성이 좋음

 3) 인증 정보에 대한 별도의 저장소가 필요없음

 4) 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능

 

 

- JWT 단점

 1) 쿠키, 세션과 다르게 JWT는 토큰의 길이가 길어서 인증 요청이 많아질수록 네트워크 부하가 심해짐

 2) payload 자체는 암호화되지 않기 때문에 유저의 중요한 정보를 담을 수 없음

 3) 특정 사용자의 접속을 강제로 만료하기 어려워 토큰을 탈취당하면 대처하기 어려움 -> 토큰의 만료 기한을 짧게 잡아 보완

반응형

'개발에 도움이 되는 > Web' 카테고리의 다른 글

Web 성능 최적화  (0) 2022.04.14
localStorage, sessionStorage  (0) 2022.03.05
DOM(Document Object Model)  (0) 2022.02.22
SSR(Server Side Rendering), CSR(Client Side Rendering)  (0) 2022.01.22
SPA(Single Page Application)  (1) 2022.01.04