[認証/セキュリティ]JWTトークンの適用


JWTトークン

  • JWT(Json Web Token)は、Json形式でユーザ属性を格納するClaimベースのWeb Tokenである.
    セッションとは異なり、トークンはサーバではなくクライアントに格納され、サーバの負担が軽減されます.トークン自体には、ユーザの権限情報やサービスを使用する情報が含まれます.
  • ソース:http://www.opennaru.com/opennaru-blog/jwt-json-web-token/

    <JWT構造>


    JWTトークンはヘッダ,ロード,署名の3種類に分けられる.
  • ヘッダー:タグのタイプ、暗号化するアルゴリズムのタイプ.
  • {
      "alg": "HS256",
      "typ": "JWT"
    }
  • ペイロード:どの情報にアクセスできるか、ユーザーのユーザー名などに必要なデータはここで暗号化できます.もちろん、パスワードなどの機密情報は含まれていません.
  • {
      "sub": "someInformation",
      "name": "phillip",
      "iat": 151623391
    }
  • 署名:暗号化に追加するsaltの秘密鍵を使用して暗号化します.
  • HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret);

    JWTのタイプ


    Access Token:Access tokenは、保護された情報(ユーザーの電子メール、連絡先、写真など)へのユーザーのアクセスを許可するために使用されます.有効期間の設定はできるだけ短くしてください.
    Refresh Token:Access tokenの有効期限が切れた後、refresh tokenを使用して新しいアクセスtokenを取得できます.もちろん、有効期間はAccess tokenよりも大きい有効期間に設定する必要があります.

    トークン検証プロセス

  • クライアントは、ID/パスワード付きログイン要求をサーバに送信します.
  • アイデンティティ/パスワードが一致していることを確認し、クライアントに送信される暗号化access/refreshトークンを生成します.
  • トークンをクライアントに送信し、クライアントはトークンを保存します.
    (格納場所は、localstorage、cookie、reactのstateなど)
  • クライアントは、HTTPヘッダ(認証ヘッダ)にトークンを送信する.
  • サーバがトークンを復号してトークンを確認すると、クライアント要求の処理後に応答が送信されます.
    ソース:https://m.blog.naver.com/shino1025/2215685446332