Python での JWT の簡単な紹介

不言
不言転載
2018-12-13 10:48:383081ブラウズ

この記事では、Python での JWT について簡単に紹介します。これには一定の参考価値があります。困っている友人は参照してください。お役に立てば幸いです。

Json Web トークン (JWT) は、Web アプリケーション環境間でクレームを伝達するための JSON (RFC 7519) に基づくオープン スタンダードです。トークンはコンパクトで安全になるように設計されており、特にシングル サインに適しています。分散サイトの (SSO) シナリオ。JWT クレームは通常、リソース サーバーからリソースを取得するために、アイデンティティ プロバイダーとサービス プロバイダーの間で認証されたユーザー ID 情報を転送するために使用され、他のビジネス ロジックに必要な追加の宣言情報を追加することもできます。

セッション認証に基づく問題
セッション: 各ユーザーが通過する アプリケーションが認証された後、アプリケーションは、ユーザーの識別を容易にするためにサーバー上に記録を作成する必要があります。ユーザーの次のリクエスト。一般に、セッションはメモリに保存され、認証されたユーザーの数が増えると、サーバーのオーバーヘッドが増加します。大幅に増加しました。

スケーラビリティ: ユーザー認証後、サーバーは認証レコード。認証レコードがメモリに保存されている場合、ユーザーの次のリクエストはこのサーバー上で行われる必要があることを意味します。この方法でのみ承認されたリソースを取得できるため、分散アプリケーションのロード バランサーの機能が制限されます。これは、アプリケーションの拡張機能を制限することも意味します。

CSRF: ユーザー識別のために Cookie に基づいているため、Cookie が傍受されると、ユーザーはクロスサイト リクエスト フォージェリ攻撃に対して脆弱になります。

JWT の構成
最初の部分をヘッダー、2 番目の部分をヘッダーと呼び、その一部をペイロード (飛行機で運ぶ荷物のようなもの)、そして 3 番目の部分をビザと呼びます

header
jwt のヘッダーには 2 つの部分の情報が含まれています:

タイプを宣言します (ここに jwt があります)
通常は HMAC SHA256 を直接使用して暗号化アルゴリズムを宣言します
完全なヘッダーは次の JSON のようなものです:

{
  'typ': 'JWT',
  'alg': 'HS256'
}

その後、ヘッダーは Base64 で暗号化され (暗号化は対称的に復号化できます)、最初の部分を構成します。

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
payload
ペイロードは有効な情報が保存される場所です。この名前は特に航空機で運ばれる商品を指すようです。この有効な情報には 3 つの部分が含まれます。

規格に登録されているステートメント
公共ステートメント
プライベートステートメント
標準に登録されているステートメント (推奨されていますが必須ではありません):

iss: jwt 発行者
sub: jwt の対象となるユーザー
aud: 当事者jwt の受信
exp: jwt の有効期限、この有効期限は発行時刻より大きくなければなりません
nbf: 定義 何時までは、jwt が利用できなくなります
iat: jwt 発行時刻
jti : jwt の一意の ID。主にリプレイ攻撃を回避するためのワンタイム トークンとして使用されます。
signature
JWT の 3 番目の部分はビザ情報です。このビザ情報は 3 つの部分で構成されます:

header (base64 以降)
payload (base64 以降)
secret
この部分では、base64 で暗号化されたヘッダーと Base64 で暗号化されたペイロードの使用が必要です。連結で構成された文字列は、ヘッダーで宣言された暗号化メソッドを通じてシークレットをソルティングすることによって暗号化され、jwt の 3 番目の部分を構成します。
これら 3 つの部分を . を使用して完全な文字列に連結し、最終的な jwt を形成します
シークレットはサーバー側で保存され、jwt の発行と生成もサーバー側で行われます。 jwt の発行と発行、jwt の検証のため、これはサーバーの秘密キーであり、どのようなシナリオでも公開されるべきではありません。クライアントがこの秘密を知ると、クライアントは jwt に自己署名できることになります。

利点
json の汎用性により、JWT は JAVA、JavaScript、NodeJS、PHP、その他多くの言語など、さまざまな言語でサポートできます。
ペイロード部分があるため、JWT は他のビジネス ロジックに必要ないくつかの非機密情報をそれ自体に保存できます。
送信が簡単 jwt の構造は非常にシンプルでバイト占有量も非常に少ないため、送信が非常に簡単です。
サーバー側にセッション情報を保存する必要がないため、拡張機能の適用が容易
セキュリティ関連
jwt のペイロード部分には機密情報を格納しないでください。クライアントが復号化できるもの。
秘密の秘密キーを保護します。これは非常に重要です。
可能であれば、https プロトコルを使用してください

以上がPython での JWT の簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。