ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JWT
    Spring boot 2019. 12. 26. 00:21

    *JWT - 토큰 기반 인증 방식 *

    JWT는 Json Web Token의 약자로 인증에 필요한 정보들을 암호화시킨 토큰을 의미한다.
    사용자는 Access Token(JWT 토큰)을 HTTP 헤더에 실어 서버로 보내게 된다
    JWT는 .으로 나뉘어져 Header, Payload, Verify Signature 구성되어 있다.

    • Header
      - 헤더는 HMAC SHA26 이나 RSA 와 같은 정보를 암호화할 알고리즘 방식(alg)과 토큰의 타입(type) 등이 들어간다

      {
      "alg": "HS256",
      "typ": "JWT"
      }
    • Payload
      - Payload는 claims을 포함한다. claim - 유저와 같은 entity, 추가적인 데이터
      claims에는 세가지 타입이 있다

    • 1.Registered claims
      - 이미 정의된 클레임(권장)이다. 여기에는 아래의 종류들이 있다.

      • - Iss(Issuer) : 토큰 발행자
      • - exp(expiration time) : 만료시간
      • - sub(subject) : 토큰 제목
      • - aud(audience) : 토큰 대상자
      • - others
    • 2.Public claims
      - Registered Claims에 정의되지 않은 Claim들 , Registered Claims와 충돌을 방지하기위해 URL 형식으로 정의
      - JWT를 사용하는 사람들이 임의로 정의할 수 있으나 충돌을 피하기 위해서 새로운 클레임 이름들은 IANA JSON Web Token Claims 레지스트리에 등록되어 있거나 충돌방지 네임스페이스를 포함하는 URI처럼 정의되어야 한다.

    • 3.Private claims
      - 정보를 공유하는 개체간(서버 - 클라이언트) 동의하에 생성하는 클레임

    • Verify Signature
      - Base64 방식으로 인코딩한 Header, payload 그리고 secret key를 더한 후 서명 한다
      - 예를들어 HMAC SHA256 알고리즘을 사용한다면, 시그니처는 아래와 같이 만들어진다
      HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      secret)
      - 시그니쳐는 도중에 메시지가 변경되지 않았다는 것을 검증하기 위해 사용된다.
      - Header, Payload는 인코딩될 뿐(16진수로 변경), 따로 암호화되지 않는다
      - 암호화 되는 건 Verify Signature. Verify Signature는 SECRET KEY를 알지 못하면 복호화할 수 없다.

    출처###

    https://tansfil.tistory.com/58?category=255594
    https://jwt.io/

    댓글

Designed by Tistory.