[TIL]JWT


JWT


超味Tangの薬...
いいえ.
JSONWeb Tokenの略.
電子署名のURL-safeのJSON

JWTが現れる背景


前回のリリースで述べたCookieとセッション...
この2つには、次のような欠点があります.
Cookieと会話の欠点
  • セッションストレージに問題が発生すると、認証システムがクラッシュし、以前に認証されたユーザーも認証できなくなります.
  • は状態があるためhttpの優位性を発揮できず拡張を阻害する.
  • セッションストレージは存在する必要があるため、使用には一定のコストがかかります.
  • セッションIDが盗まれた場合、対策を講じることができる...略奪者がクライアントに偽装しようとすると、セキュリティの弱点が発生する可能性があります.
    -ユーザーが多ければ多いほど、
  • のメモリが消費されます.
    欠点は、リクエストのたびにセッション・リポジトリをクエリーすることです.最大の欠点は、要求が行われるたびに、セッションIDがセッションリポジトリにクエリーされることです.
    データベース・アクセス・ロジックの再実行が必要

    このために現れたのはJWTです。


    その名の通り、認証に必要な情報をTokenに暗号化して使用するコインです.
    基本的な認証構造はCookieとあまり変わらないが,署名のトークンを強調している.
    公開鍵と秘密鍵を使用してタグに署名します.
    すなわち,秘密鍵を持つサーバは,署名されたトークンが正常なトークンであるかどうかを確認することができる.
    このような構成により、認証情報を含んで、安全に認証を行うことができる.

    JWT構造



    各元素は.からなり、
    Header.Payload.Signature
  • Header
  • Payload
  • Signature
    こんな風に育つ.
  • Header
    トークンタイプとハッシュ暗号化アルゴリズムからなる.
  • Header例
    { 
     "typ": "JWT",
     "alg": "HS256"
    }
    type:タグのタイプを指定します.
    alg:署名ハッシュアルゴリズムを指定します.ハッシュアルゴリズムは、通常、HMAC−SHA 256またはRSAを使用する.
  • Payload(情報)
    コインのクレーム情報が含まれています.Payloadの情報はクレームと呼ばれ、JSON(name/value)形式のペアで構成され、トークンには複数のクレームが含まれることができます.
  • Payloadの例
    {
        "iss": "dnjscksdn98.com",
        "exp": "1485270000000",
        "https://dnjscksdn98.com/jwt_claims/is_admin": true,
        "userId": "dnjscksdn98",
        "username": "alex"
    }
  • 署名
    署名は、トークンを符号化または検証する際に使用される唯一のパスワードです.
    署名する.
    1)上記で作成したヘッダ(Header)とペイロード(Payload)の値をそれぞれBASE 64として符号化する.
    2)符号化された値を秘密鍵でタイトルに定義されたアルゴリズムでハッシュする
    3)この値をBASE 64に再符号化する.
  • JWTトークンの例

    JWTプロパティ


    電子署名はJSONの改ざんをチェックできます.
    JWTは、JSONデータ構造で属性情報を表すタグであり、RFC 7519規格に指定されている.
    JWTがサーバとクライアントとの間で情報交換を行う場合,Http要求ヘッダにJSONトークンを加え,サーバはヘッダに含まれるJWT情報により認証を行う.
    このとき使用されるJSONデータはURLに含まれる文字のみからなり、URL-Safeとなる.
    JWTは、HMACアルゴリズムを使用して秘密鍵またはRSAを使用して公開鍵/秘密鍵ペアを使用して署名することができる.

    JWTのメリット

  • ユーザー認証に必要なすべての情報はトークン自体に含まれているため、追加のリポジトリは必要ありません.
  • クッキーを使う必要がなく、クッキーの使う弱点は消えてしまいます.
  • URLパラメータとヘッダは
  • を用いる.
  • 流量低、
  • RESTサービス、
  • 内蔵期限切れ
  • 独立
  • JWTの欠点

  • self-contained:トークン自体に情報があり、両刃の剣です.
  • トークン長:トークンのペイロードは3種類のクレームを格納するため、情報が多ければ多いほどトークンの長さが長くなり、ネットワークへの負荷が大きくなる.
  • ペイロード符号化:ペイロード自体は暗号符号化ではなくBASE 64で符号化されており、中間のペイロードが盗まれて復号されるとデータが見えるため、暗号化プロセスが必要となる.
  • Stateless:JWTはステータスを保存せず、作成すると制御できません.つまり、トークンを勝手に削除することはできないので、必ずトークンの有効期限を付けなければなりません.
  • Reference


    [JWT]JSON Web Tokenの概要と構造
    JWTについて(Json Web Token)
    JSON WEB TOKENとは?