JSONウェブトークン
オンラインツールのWebサイト:https://jwt.io/
Pythonライブラリは、JWT //ピップpyjwtをインストール使用しました
JWTのデータ構造
JWTヘッド
JWTヘッド部分は、以下のように一般的に示され、記述メタデータJWT JSONオブジェクトです。
{
"ALG": "HS256"、
"標準": "JWT"
}
上記のコードでは、ALGプロパティは(HS256と記す)HMAC SHA256にデフォルトで使用される署名アルゴリズムを表す標準プロパティは、JWTのように書か統一トークントークン、JWTのタイプを示します。
最後に、使用Base64でURLアルゴリズムが保存文字列にJSONオブジェクトに変換します。
3.2ペイロード
ペイロード部は、JWTのメインコンテンツ部分である、JSONオブジェクトは、送信すべきデータが含まれています。JWT 7の中から選択するデフォルトのフィールドを指定しました。
ISS:発行者
EXP:有効期限
サブ:テーマ
AUD:ユーザー
NBF:以前は利用できません
IAT:公開
JTI:JWT JWT IDを識別するための
上記のデフォルトのフィールドに加えて、我々はまた、次の例では、プライベートフィールドをカスタマイズすることができます:
{
"サブ": "1234567890"、
"名前": "chongchong"、
「管理者」:真
}
デフォルトでは、JWTが暗号化されていない、誰もがその内容を解釈することができることをしてくださいは、ノートなので、情報漏洩を防ぐために機密情報を保存するために、プライバシー情報のフィールドを構築しません。
JSONはまた、保存した文字列へのBase64 URLアルゴリズムを使用するオブジェクト。
3.3署名ハッシュ
署名されたハッシュ署名データデータが改ざんされないことを保証するためにハッシュアルゴリズムを指定することにより生成された、上記二つの部分の一部です。
まず、パスワード(秘密)を指定する必要があります。パスワードは、サーバーに格納され、利用者に開示することはできません。次に、次式に従って署名を生成する(デフォルトHMAC SHA256によって)指定されたヘッダの署名アルゴリズムを使用して。
HMACSHA256(base64UrlEncode(ヘッダ)+ "" + base64UrlEncode(ペイロード)
秘密)
署名されたハッシュ値を計算した後、JWTヘッド三のペイロード部分と署名されたハッシュは、各部分「」区切りで、JWTは、オブジェクト全体を構成し、文字列に結合されます。
4. JWTの使用状況
JWTクライアントは、サーバから返された、またはのlocalStorageに保存されたクッキーでも受け取ります。
その後、クライアントは、サーバとの相互作用にJWTをもたらすでしょう。クッキーであれば、自動的に送信記憶することができますが、それは通常、HTTPリクエストのヘッダーAuthorizationフィールドを置いているので、クロスドメインません。
認証:ベアラ
クロスドメインは、また、POST要求のデータJWT本体内に配置することができる場合。
オリジナルのBase64とBase64Url差はJWTで使用され
#Base64Url编码如下所示 BASE64インポートから* DEF base64URLen(S): T0 = b64encode(S) T1 = t0.strip( '=')( '+'を' - ')を交換、( '/'を置き換えます。 '_') リターンT1 DEF base64URLde(S): T0 = s.replace( ' - '、 '+') '_'(置き換え、 '/')。 T1 = T0 + '=' *(4-lenを(T0 )%4)%4 戻りb64decode(T1)
JWTの抜け穴1
修正署名アルゴリズム:
あなたはALGアルゴリズムHS256に現在のJWTを見ることができます
変更JWTヘッダALGはどれも、アルゴリズムHS256はどれも変更されます//です
変更ペイロードのユーザ名:ユーザ名のゲスト:管理者
鍛造ペイロードユーザ名=管理者
Pythonの世代のペイロード
フラグを取得します。