JWT - Json Web Token

Why JWT?

  • Secure your web without cookies
  • Stateless authentication - Horizontal scalingが簡単
  • Safe from CSRF(Cross-Site Request Forgery)
  • 例えば、サービスから別のサービスへ何かの情報を改ざんされずにsecureに渡すことなどもできる

JWTの構成

  • tokenは3つのcomponentを持つ
    • header
    • payload
    • signature

改行されてるように見えるが本来は改行はない。.(dot)で繋がっている

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9           // header
.eyJrZXkiOiJ2YWwiLCJpYXQiOjE0MjI2MDU0NDV9      // payload
.eUiabuiKv-8PYk2AkGY4Fb5KMZeorYBLw261JPQD5lM   // signature
{
    "typ":"JWT",
    "alg":"HS256"
}

signature

JWTが有効なのか確認するのに利用される

Payload and Claims

Payload

claimを含んだuserが定義したデータ

{
  "owner_id": "566f88030dc86d5b19058b41",
  "iat": 1450150194,
  "exp": 1450236594
}

Claims are the predefined keys and their values:

  • iss(Issuer): issuer of the token
  • exp(Expiration Time): the expiration timestamp (reject tokens which have expired). Note: as defined in the the spec, this must be in seconds.
  • iat(Issued At): The time the JWT was issued. Can be used to determine the age of the JWT
  • nbf(Not before): "not before" is a future time when the token will become active.
  • jti(JWT ID): unique identifier for the JWT. Used to prevent the JWT from being re-used or replayed.
  • sub(Subject): subject of the token (rarely used)
  • aud(Audience): audience of the token (also rarely used)

JWT / JWS / JWE

  • JWSとJWE構造の両方の中にエンコードされるJSONオブジェクトとしてクレームのセットを表す
  • JWSはJSONデータ構造とbase64urlエンコーディングを用いてデジタル署名, もしくはMACを行ったコンテンツを表現する
  • JWEはJSONデータ構造とbase64urlエンコーディングを用いて暗号化するための仕様

How to Use JWTs Securely

https://stormpath.com/blog/token-auth-spa

Tools

References

results matching ""

    No results matching ""