techcareer haken

ニュース・コラム

スキル 2019年 8月 2日 18

JSON Web Token (JWT) とは何?

JSON Web Token (JWT) とは何?

1. JSON Web Token (JWT)とは?

JSON Web Token(JWT)は、JSONオブジェクトによるメンバー間の安全な通信方式を定義するオープンスタンダード(RFC 7519)です。「署名」のおかげで、この情報を認証できて信頼できるブックマークすることができます。JWTの署名はHMACまたはRSAで暗号化されます。

 

2. JWTのハイライト:

  • 小さいサイズ:JWTは、URL経由、POSTプロトコル経由で送信することも、HTTPヘッダーセクション内に挿入することもできます。サイズは小さければ小さいほど送信作業が早くなります。Bearer Schema を使用してトークンをHTTPヘッダに渡す方法は次のとおりです。

   Authorization: Bearer <token>

  • クローズ:payload部分は利用する情報を含みます。例えば、ユーザーの情報です。

 

3. JWTの例:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjIwMTM0MDcyIiwibmFtZSI6IlRyYW5nIn0.rI6lvV8D5a2H9E5SJNSK5E0HjtnbApU8ysEOHlhvgQU

 

4. JWTの構築

JSON Web Tokenは3つの部分から構成されています、ドットで分けられます。

  • Header

  • Payload

  • Signature (署名)

 

4.1. Header

Header にはデータ型とJWT文字列のエンコードに使用されるアルゴリズムが含まれます。

例えば:

{

  "alg": "HS256",

  "typ": "JWT"

}

  • “typ” (type) はオブジェクトがJWTであることを示します。

  • “alg”(algorithm)は文字列の暗号化アルゴリズムがHS256であることを認識させます

 

4.2. Payload

Payload部分は文字列に入れたい情報が含まれます。例えば、user_name, user_id, email,...です。

 

Payloadの例:

{

  "id": "20134072",

  "name": "Trang",

}

サーバーはトークンが長すぎることを確認するのは時間がかかるので、ペイロードチェーンに情報を入れすぎないように注意してください。それにパスワードなど重要な情報を絶対に入れてはいけません。

 

4.3. Signature

このシグネチャは、ヘッダー、ペイロードと秘密の文字列を暗号化することによって作成されます。

例:

data = base64urlEncode( header ) + "." + base64urlEncode( payload )

signature = Hash( data, secret );

 

base64urlEncode: headerとpayloadを暗号化するアルゴリズム

 

上記のコードはbase64urlEncodeでheaderとpayloadを暗号化して、下記の文字列を取得します。

// header

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

// payload

eyJpZCI6IjIwMTM0MDcyIiwibmFtZSI6IlRyYW5nIn0

それから、HMACSHA256アルゴリズムで上記の文字列の2つとsecret(秘密キー)を暗号化して、rI6lvV8D5a2H9E5SJNSK5E0HjtnbApU8ysEOHlhvgQUという形の署名を取得します。

最後、上の文字列の3つを結合して、eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjIwMTM0MDcyIiwibmFtZSI6IlRyYW5nIn0.rI6lvV8D5a2H9E5SJNSK5E0HjtnbApU8ysEOHlhvgQU という形のJWTを取得されます。

 

5. JSON Web Tokenを使用する場合

  • Authentication: これはJWTで使用する最も一般的なケースです。ユーザーがシステムにログインして、ユーザーからの次のリクエストはJWTコードを含みます。これにより、トークンコードで許可されているURL、サービス、およびリソースへのアクセスをユーザーに許可できます。この方法は、Cookieを使用しないため、Cross-Origin Resource Sharing (CORS)による影響を受けません。

  • 情報交換:JSON Web Tokenは、「署名」セクションのおかげで、メンバー間で安全に通信するための悪くない方法です。受信者は、送信者が誰であるかを署名セクションを通して知ることができます。それに、署名は、headerとpayloadを組み合わせることによって作成されるので、それを介して署名が偽造品かどうかを確認できます。

ページ上へ