1. JWT認証プロセス
プロジェクトの開発では、すなわち、上に示した一般的に、認証プロセスに従い、ユーザは、サーバへのユーザのブラウザがサーバーにトークン要求送信を運ぶために行くために、ユーザーのブラウザ後、トークンを返すにログインした後に、サーバー合法性検証トークン正当なユーザーの、そうでない場合は、データを見ていくつかのエラーメッセージを返します。
認定の違いは何伝統的なトークンの方法とJWT?
-
伝統的なトークンの方法
ときに、ユーザーの訪問サービスは、データベースまたはキャッシュに、トークンを受信した後に成功し、サーバーがユーザーにランダムなトークンを生成し、トークンサーバ(データベースまたはキャッシュ)に保存されたユーザーがログインした後、実行する必要が、後で戻ってくるトークントークンのタイムアウトが正当であるかどうかを確認します。
-
JWT方法
正常にユーザがログインした後、サーバはかどうか、サービスが受信した後、ユーザーの訪問は、トークン、トークンはJWTによりタイムアウトかどうかを確認する際に後で戻ってくるトークン運ぶのに必要な(トークンを保持することなく、サーバ)、ユーザにJWTによってランダムなトークンを生成します正当な。
2.トークンを作成JWT
2.1原理
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
次のように生成されたルールは以下のとおりです。
-
{ "ALG": "HS256"、 "標準": "JWT" }
{ "サブ": "1234567890"、 「名前」:「ジョン・ドウ」、 "IAT":1516239022 ... }
base64url( HMACSHA256( base64UrlEncode(ヘッダ)+ "" + base64UrlEncode(ペイロード) あなたの-256ビットの秘密(秘密鍵塩) ) )
最後の3つの段落の文字列.
トークンJWTを生成するために一緒にステッチ。
注:最初のbase64で暗号化が暗号化されませんし、その後base64url -
置き換える+
と_
代替/
。
2.2コードの実装
トークンJWT Pythonベースpyjwtモジュールを作成します。
- インストール
PIP3 pyjwtをインストール
- 実現
輸入JWT インポート日時 JWT輸入例外から SALT = '静脈%のx6xo7l7_u9bf_u!9#G#メートル*)* = EJ @ bek5)(@ u3kh * 72 + unjv =' デフ)(create_token: #ヘッダ構造 ヘッダー= { 「標準」:「JWT」 'ALG': 'HS256' } #ペイロード構造 ペイロード= { 'USER_ID':1、#カスタムユーザID 「ユーザー名」:「wupeiqi」、#カスタムユーザ名 '経験':datetime.datetime.utcnow()+ datetime.timedelta(分= 5)#タイムアウト } 結果= jwt.encode(ペイロード=ペイロード、キー= SALT、アルゴリズム= "HS256"、ヘッダ=ヘッダ).decode( 'UTF-8') リターン結果 __name__ == '__main__' の場合: トークン= create_token() 印刷(トークン)
3. JWT検証トークン
一般的には認証が成功した後、トークン生成されたJWTを運ぶためにするとき、再び必要性、トークンになるこの時間JWT必要トークンユーザアクセス後ユーザに返される超时
と合法性
、チェックサム。
トークンを取得した後、私たちは、次の手順を確認します。
-
-
-
-
-
-
プレーンテキストの最初の段落からの暗号化アルゴリズムを取得し、デフォルト:
HS256
-
アルゴリズムを使用して+ソルト
signing_input
得られた結果と暗号化signature
輸入JWT インポート日時 JWT輸入例外から デフ(トークン)にget_payload: 「」」 取得ペイロードトークンによります :paramはトークン: :リターン: 「」」 試してみてください。 #の正当性を検証しませんトークンからのペイロードを取得[] #unverified_payload = jwt.decode(トークン、なし、偽) #プリント(unverified_payload) #トークンからペイロード[チェック]正当性を入手 verified_payload = jwt.decode(トークン、SALT、真) リターンverified_payload exceptions.ExpiredSignatureError除きます: 印刷(「トークンの有効期限が切れています」) jwt.DecodeError除きます: 印刷(「トークン認証に失敗しました」) jwt.InvalidTokenError除きます: 印刷(「不法なトークン」) __name__ == '__main__' の場合: トークン= "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzM1NTU1NzksInVzZXJuYW1lIjoid3VwZWlxaSIsInVzZXJfaWQiOjF9.xj-7qSts6Yg5Ui55-aUOHJS4KSaeLq5weXMui2IIEJU" ペイロード=にget_payload(トークン)
4.1ジャンゴケース
成功したユーザーがログインした後、トークン生成され、戻りはトークン再びアクセスするユーザーを持参する必要があります。
tokneのこの例では、ミドルウェア2準備内側の2つの方法でユーザを支援するためにパストークン検証ジャンゴミドルウェアです。
-
url
パラメータの受け渡し
残りのフレームワークケースジャンゴ4.2
成功したユーザーがログインした後、トークン生成され、戻りはトークン再びアクセスするユーザーを持参する必要があります。
この例の検証、認証トークンにDRFアセンブリ、二つの方法で送信されるトークンサポートユーザ認証には、2つの準備されたコンポーネントの内部。
-
url
パラメータの受け渡し -
Authorization
リクエストヘッダ
ダウンロード出典:https://pan.baidu.com/s/14dxnH7YvVNVFwpHEjcBLbg
4.3フラスコケース
成功したユーザーがログインした後、トークン生成され、戻りはトークン再びアクセスするユーザーを持参する必要があります。
before_requestフラスコに検証用トークンのこの例では、内部ライト二つの機能は、2つの方法で送信されるトークンのユーザをサポートします。
-
url
パラメータの受け渡し -
Authorization
リクエストヘッダ
ダウンロード出典:https://pan.baidu.com/s/13w8on_OBBxAd1Pp4KXETaQ
特記事項:サンプルソースコード無効なアドレス、または接触作者プラス為替グループ呉ペイチー(QQ:424662508)が取得されます。