JWT (Json Web Token)


認証と承認


資格認定


要求されたクライアントが、主張されているユーザーと同じかどうかを確認します.

承認


ターゲット・クライアントは、リクエスト・オペレーションがクライアントに許可されているかどうかを確認します.
以前は、データベースに直接アクセスするセッション(Session)を使用して認証を行いました.
この方法は、同時ユーザが多い場合、サーバがオーバーロードする可能性があるため、問題があります.
これらの問題はJWTで簡単に解決できます.
(最初のログイン時にtokenを使用して次の権限をすばやく処理)
pythonはPyJWTライブラリでサポートされています.

JWT



JWTは、ヘッダー(Header)、ペイロード(Payload)、署名(Sinature)の3つの部分に分かれています.Base64符号化には「+」、「/」、「=」が含まれるが、JWTはURL−SafeのBase64url符号化を使用してURIでパラメータとして使用する.
たとえば、
access_token = jwt.encode({'id': 19}, 'secret', algorithm='HS256')
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTl9.oJPc2ULv5OUuJkMUr7-tE9YZJKzU2broxWw_oB6x1yw上記tokenは、PyJWTライブラリによって生成されます.

見出し

{
  "typ": "JWT",
  "alg": "HS256"
}
Headerはトークンタイプとハッシュ暗号化アルゴリズムからなる.
上記情報をBase64urlと符号化するとeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9となる.

内容

{
  "id": 19
}
Payloadは、その中に含まれる情報の1つの「破片」をクレームと呼び、name / value対から構成されています.
コインには複数のクレームが含まれます.
クレームの情報には、登録されたクレーム、公開されたクレーム、非公開のクレームの3種類があります.
同様に、符号化がBase64urlであれば、eyJpZCI6MTl9である.

に署名


最後に、署名は鍵を含む暗号化されます.
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  
your-256-bit-secret

) secret base64 encoded
上記の構成からなる.Base64urlで符号化されたタイトルとコンテンツに加えて、秘密鍵(同様に符号化)も含まれる.
対応するアルゴリズム(HS256)を用いてハッシュを行い、値を生成する.
だからこの秘密の鍵が露出されなければ、
Payloadを偽造して送信することも署名によって許可されます.
このtokenの詳細については、jwtサイトを参照してください.
リファレンス
( https://kibua20.tistory.com/83 )
( http://www.opennaru.com/opennaru-blog/jwt-json-web-token/ )