JWT


JSON Web Tokenとは?( RFC 7519 )


  • JWTはClaimベースのタグで、2つのオブジェクトのJSONオブジェクトを使用して、簡単に、自己承認で安全に情報を伝達します.

  • JSON WebタグのJWTはXML WebタグSWTやSAMLに比べて冗長性が少なく、符号化後も小さく、HTMLやHTTP環境に適しています.
  • JWTの構造

  • ヘッダ(ヘッダ)
  • ヘッダは、2つの情報を携帯する.
  • 型:トークン型
  • alg:ハッシュアルゴリズムを識別し、通常HMAC-SHA 256、RSAを使用する.
  • { 
    	"typ": "JWT",
    	"alg": "HS256"
    }
  • 情報(Payload)
  • Payloadはトークンに含める情報を持っている.
  • 情報の一部を「クレーム」(Claim)と呼び、その形式はJSONである.
  • Payload例
  • {
    	"iss": "codesoom.com",
    	"exp": "1722290000000",
    	"https://codesoom.com/claims": true,
    	"userId": "JamieShin",
    	"username": "Jamie"
    }

  • ここで、クレームは大きく3つに分けられます.

  • 登録されたクレーム:iss、sub、aud、expなど、サービスに必要な情報ではなくトークンの情報を記録するために決定されたクレーム.
    {
        "iss": "codesoom.com",
        "exp": "1722290000000",
    }

  • 公開クレーム:情報を公開し、URI形式で競合を防止します.
    {
        "https://codesoom.com/claims": true
    }

  • 専用クレーム:通常、お客様とサーバの間で交渉するときに使用されるクレーム名.公開クレームとは異なり、名称が重複する場合がありますので、ご注意ください.
    {
        "userId": "JamieShin",
        "username": "Jamie"
    }
  • 署名
  • 署名はJWTトークンの最後の部分であり、トークンを符号化または検証するための唯一の暗号化コードである.
  • 上記で作成したヘッダ(Header)とペイロード(Payload)の値をそれぞれBASE 64に符号化し、符号化後の値をヘッダ(Header)定義アルゴリズムを秘密鍵でハッシュしてBASE 64に符号化して生成する.例えば、HMAC SHA 256アルゴリズムを使用する場合、署名の生成方法は以下の通りである.
    HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      secret)
  • は、生成されたハッシュをBASE 64に符号化し、トークンを完了する.
  • 最後に生成されたトークンは、HTTP通信時にHTTPヘッダの「許可」フィールドに送信される.BeareはOAuthのために設計された認証スキームであり、標準リストRFC6750にリストされていることに注意してください.
    { 
         "Authorization": "Bearer {생성된 토큰 값}",
    }
    リファレンス
  • https://jwt.io/introduction
  • https://developer.mozilla.org/ko/docs/Web/HTTP/Authentication#%EC%9D%B8%EC%A6%9D_%EC%8A%A4%ED%82%B4