JWT

이동주·2022년 1월 16일

서버개념

목록 보기
1/11

JWT ??

JWT(JSON 웹 토큰)는 JSON WEB TOKEN의 줄임 말로 클라이언트와 서버, 서비스와 서비스 사이에서 통신을 할 수 있도록 권한을 주는 토큰이라고 생각을 하면됩니다.. 즉, 놀이공원 자유이용권 팔찌를 주면 놀이기구를 마음대로 탈 수있듯이 권한을 받은 유저는 서비스를 이용 할수있는 개념 정도로 이해하면 될 듯합니다.

JWT의 구조

  1. 헤더(Header)
    {
    "alg" : "HS256", // 알고리즘 타입
    "typ" : "JWT" // 토큰 타입
    }
    헤더는 보통 토큰의 타입이나, 서명 생성에 어떤 알고리즘이 사용되었는지 저장을 합니다.
  2. 페이로드(PayLoad)
    {
    "loggedInAs" : "admin",
    "iat" : 1422779638
    }
    페이로드는 토큰에 사용할 정보를 가지고 있는 곳 입니다. 하지만 민감한 정보는 담지 않습니다.
    왜냐하면 암호가 따로 걸려 있지 않기 때문에 누구나 디코딩을 해서 값을 알 수 있기 때문입니다. 그래서 보통 은 '식별을 하기 위한 정보만 담아둔다...'를 생각하시면 될 것같습니다.
  3. 서명(Signature)
    HMAC-SHA256(
    secret,
    base64urlEncoding(header) + '.' +
    base64urlEncoding(payload)
    )
    서명은 가장 중요한 정보를 가지고 있는 곳 입니다. 그래서 헤더와 페이로드의 정보를 암호화 하고 서로를 합쳐놓습니다. 서버가 가지고 있는 개인키를 가지고 암호화가된 상태라고 생각하시면 됩니다. 그렇기 때문에 서버에 있는 개인키로만 암호화를 풀 수 있기 때문에 다른 클라이언트가 임의로 복사나 해독이 불가능 합니다.

JWT의 인증방식

  • JWT 토큰을 클라이언트가 서버로 요청과 동시에 전달을 해준다.
  • 서버가 가지고 있는 개인키를 가지고 서명부분을 복사한 다음 서로 값이 일치하는지 확인을 하고 일치한다면 인증을 허용해준다.

JWT의 장점

  1. 별도의 저장소에 필수적으로 저장을 할 필요가 없다.
  2. 클라이언트의 상태를 서버가 저장해 두지 않아도 된다.
  3. 데이터에 대한 보완성이 높아진다.
profile
생각나는대로 쓰는 개발 블로그

0개의 댓글