(ソースコードの例を含む)秘密JWT

 JSONウェブトークンは、業界標準の開発であるRFC 7519両者の間の文の表現を確保するため、。現在、JWT広く分離プロジェクトの終わり頃、特に今、ユーザーのシステムの認証に使用されます。

1. JWT認証プロセス

プロジェクトの開発では、すなわち、上に示した一般的に、認証プロセスに従い、ユーザは、サーバへのユーザのブラウザがサーバーにトークン要求送信を運ぶために行くために、ユーザーのブラウザ後、トークンを返すにログインした後に、サーバー合法性検証トークン正当なユーザーの、そうでない場合は、データを見ていくつかのエラーメッセージを返します。

認定の違いは何伝統的なトークンの方法とJWT?

  • 伝統的なトークンの方法

    ときに、ユーザーの訪問サービスは、データベースまたはキャッシュに、トークンを受信した後に成功し、サーバーがユーザーにランダムなトークンを生成し、トークンサーバ(データベースまたはキャッシュ)に保存されたユーザーがログインした後、実行する必要が、後で戻ってくるトークントークンのタイムアウトが正当であるかどうかを確認します。
  • JWT方法

    正常にユーザがログインした後、サーバはかどうか、サービスが受信した後、ユーザーの訪問は、トークン、トークンはJWTによりタイムアウトかどうかを確認する際に後で戻ってくるトークン運ぶのに必要な(トークンを保持することなく、サーバ)、ユーザにJWTによってランダムなトークンを生成します正当な。

2.トークンを作成JWT

2.1原理

すなわちJWT生成トークン形式:.文字列連結組成物の三つのセグメント。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

次のように生成されたルールは以下のとおりです。

  • HEADER初段部、及び固定トークンのタイプは、トークンの最初のセグメントであるアルゴリズム、暗号化base64urlのJSONを、含んでいます。

    {
      "ALG": "HS256"、
      "標準": "JWT"
    }
  • 2番目の段落のペイロード部分は、2番目の段落のトークンですbase64url JSON暗号化したいくつかのデータを、含まれています
    {
      "サブ": "1234567890"、
      「名前」:「ジョン・ドウ」、
      "IAT":1516239022
      ...
    }
  • SIGNATURE第3セグメント部によってベース暗号文の最初の二つ.一緒にステッチが、その後に供HS256し、次に暗号化、及びhs256最終的に得られるの暗号文base64url暗号化されたトークン第3セグメント。
    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必要トークンユーザアクセス後ユーザに返される超时合法性、チェックサム。

トークンを取得した後、私たちは、次の手順を確認します。

  • トークンに分割してheader_segmentpayload_segmentcrypto_segment三つの部分

  • 第一の部分header_segmentbase64url弾力を解読するためのheader

  • 第二の部分payload_segmentbase64url所与を復号化するためのpayload

  • 第三部分crypto_segmentbase64url所与を復号化するためのsignature

  • 3番目の部分signature部分データ妥当性チェック

    • つまり、最初の二つの暗号文を継ぎ:signing_input
    • プレーンテキストの最初の段落からの暗号化アルゴリズムを取得し、デフォルト:HS256

    • アルゴリズムを使用して+ソルトsigning_input得られた結果と暗号化signature暗号文比較します。

輸入JWT
インポート日時
JWT輸入例外から

デフ(トークン)にget_payload:
    「」」
    取得ペイロードトークンによります
    :paramはトークン:
    :リターン:
    「」」
    試してみてください。
        #の正当性を検証しませんトークンからのペイロードを取得[]
        #unverified_pa​​yload = jwt.decode(トークン、なし、偽)
        #プリント(unverified_pa​​yload)

        #トークンからペイロード[チェック]正当性を入手
        verified_pa​​yload = jwt.decode(トークン、SALT、真)
        リターンverified_pa​​yload
    exceptions.ExpiredSignatureError除きます:
        印刷(「トークンの有効期限が切れています」)
    jwt.DecodeError除きます:
        印刷(「トークン認証に失敗しました」)
    jwt.InvalidTokenError除きます:
        印刷(「不法なトークン」)
        
__name__ == '__main__' の場合:
    トークン= "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzM1NTU1NzksInVzZXJuYW1lIjoid3VwZWlxaSIsInVzZXJfaWQiOjF9.xj-7qSts6Yg5Ui55-aUOHJS4KSaeLq5weXMui2IIEJU"
    ペイロード=にget_payload(トークン)

4. JWT戦闘

4.1ジャンゴケース

成功したユーザーがログインした後、トークン生成され、戻りはトークン再びアクセスするユーザーを持参する必要があります。

tokneのこの例では、ミドルウェア2準備内側の2つの方法でユーザを支援するためにパストークン検証ジャンゴミドルウェアです。

  • urlパラメータの受け渡し

  • Authorizationリクエストヘッダ

 

ダウンロード出典:https://pan.baidu.com/s/1ANibEXYocu6V1JfDUydRHw

残りのフレームワークケースジャンゴ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)が取得されます。

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/wupeiqi/p/11854573.html
おすすめ