LoginSignup
4

More than 5 years have passed since last update.

JSON Web Tokens Introduction 和訳要約版

Last updated at Posted at 2017-04-06

始めに

本記事は、本家JSON Web Tokens Introductionの和訳要約版です。その為、詳細にはまとめていない点はご了承ください。

JWTとは何か

  • JSON Web Tokens(JWT)は
    • RFC7519で定義されたオープンな仕様である。
    • 情報を安全かつコンパクトに格納してJSONオブジェクトとして送信することができる

いつJSON Web Tokensを利用すべきか

認証

ユーザーがログインしたら、各リクエスト毎にJWTを要求し、トークンを利用することで、サービス、リソースにアクセスすることが許可される。異なるドメイン間でも使用できるため、今日では幅広く利用されている機能である。

情報交換

JWTは、当事者間で安全に情報交換が出来る方法である。JWTは、ヘッダーとペイロードを利用して署名が追加され、改ざんされていないか認証することができる。

JSON Web Tokensの構造

SON Web Tokens はドットで区切られた以下の3つの部品から成る。

  • ヘッダー
  • ペイロード
  • 署名

それを結合して、 このようにxxxxx.yyyyy.zzzzz なっている。
各部分毎に説明する。

ヘッダー

ヘッダーは主に2つの部品からなる。

  • typ: トークンの種別。
  • alg:HMAC SHA256 や RSAなどの暗号化に使用したアルゴリズム
{
  "alg": "HS256",
  "typ": "JWT"
}

これは Base64Url でエンコードされ、JWTの最初の部分となる。

ペイロード

トークンの2番目の部分であるペイロードでは、メタデータなどの情報のクレームを含むことができる。クレームには、予約済みクレーム、公開クレーム、プライベートクレームの3つがある。

予約済みクレーム

予約済みのクレームで、情報交換時に便利な機能を提供する。

詳しくは後日。

公開クレーム

自由に定義できるが、名前が衝突しないように注意が必要。

プライベートクレーム

情報交換する際に当事者間の承諾のもとに作成するカスタムクレーム。

ペイロードの例

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

このペイロードも Base64Url でエンコードされ、JSON Web Tokenの2番目の部分となる。

署名

HMACSHA256を利用した署名の作り方は以下となる。この署名は、送信されてきたJWTが改ざんされていないかの認証用に使用される。またこの文字列はJWTの3番目の部分となる。

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

JSON Web Tokensはどのようにして利用するのか?

ユーザー認証時にログインに成功したら、JSON Web Tokensを返し、セッションなどサーバーを利用せず、各デザイのローカル内(local storageやクッキーなど)に保存する。

保護されたリソースにアクセスしたい場合、ユーザーはAuthorizationヘッダーに、以下のようなBearerスキーマを送信する。

Authorization: Bearer <token>

これにより、サーバーに何も保存せずステートレスにAPIとやり取りが出来る。また異なるドメイン間でも通信ができ、CORSの心配もない。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4