JWT

autoT·2023년 8월 27일
0

JWT

JSON 형식의 토큰에 대한 표쥰 규격으로 인증(auhtentication), 인가(authorization) 정보를 서버와
클라이언트 간에 안전하게 주고받기 위해 사용

JWT 토큰 웹에서 보통 Authorization HTTP 헤더를 Bearer <토큰.> 형태로 client -> server 전송 서버에서는 토큰에 포함되어있는 서명 정보를 통해 위변조 여부를 검증

base64로 되어있어 아주긴문자열이지만 해석하는 사이트도 있고 JSON 형태로 디코딩하여 무슨 정보가 담겨있는지 확인가능하다.

JWT 구조

이렇게 세부분으로 이루어지면 . 기호로 구분된다.
헤더는 토큰의 유형, 서명 알고리즘이 명시되고, 페이로드는 정보가 담기게된다. 마지막은 헤더와 페이로드가 비밀키로 서명되어 저장

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT 토큰의 디코딩 결과 이다.

HEADER:ALGORITHM & TOKEN TYPE
{
"alg": "HS256",
"typ": "JWT"
}
PAYLOAD:DATA
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
VERIFY SIGNATURE
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
)

JWT를 통한 인증/인가

실무에서 Oahth나 api의 인증 인가를위해 사용된다. 보통, client가 로그인에 성공하면 jwt 토큰을 받을수 있다.
그러면 클라이언트는 api를 호출할때 토큰을 보내서 접근, 허용된 작업, 토큰 정보활용 작업을 수행할 수 있다.

JWT 장점

웹에서 쿠키와 세션을 이용한 인증을 구현하는 경우가 많은데, 왜 굳이 사용할까 하면, JWT는 토큰 자체에 사용자 정보가 저장되어, 서버입장에선 검증 절차만 거치면된다. 말그대로 절차가 되게 간소화 되어 있다.

쿠키 와 세션은 db, 캐시 에 저장되어 있기 때문에 항상 이쪽과 정보교환을 해야한다. 따라서, jwt 는 사용자가 늘어나더래도 비용이 매우 적게 들게 된다.

한계

여러 곳에 로그인이 되어있을때 특정한 곳만 따로 로그아웃을 허용하려고 한다면 jwt는 정보만 담고 있기 때문에 jwt 토큰 교환만으론 어렵다. 그러한 기능을 구현하려 한다면 서버 단에 사용자 세션을 저장하는것이 편할것이다.

JWT 의 문제?

JWT 토큰 서버에서만 유효성을 검증할 수 있지만, 그 안에 저장된 데이터는 누구나 쉽게 열람이 가능하다.(클라이언트 단에 jwt 저장해서 쓰기때문에) 그래서 민감한정보는 담지 않도록해야한다.

JWT 토큰은 아이디 정도만 저장하는것이 좋으며 해당 사용자에 대한 추가 정보가 필요한 경우 서버에서 DB를 조회하는것이 안전할 것이다. 만약 저장을 한다면 암호화를 하여 jwt 토큰을 디코딩한 후에도 알아볼수 없게 만드는것이 좋을것이다.

출처:

https://www.daleseo.com/jwt/

https://velog.io/@vamos_eon/JWT%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80-1

0개의 댓글