JWT認定のDjangoの残りのフレームワーク

JWT認定

JWTは、json web token略語、ログイン認証の認証

通常のセッションの認証および証明の間JWTの違い

  1. セッションは、サーバーがストアとJWTトークンに必要としない、サーバーIO操作が削減される、データベース・サーバに保存する必要はありません(何のIO書き込み動作)
  2. クライアントによって保存されたトークン情報は、サーバーのみを格納および検証アルゴリズムは、高効率のサーバー側のコードの実行を発行しました
  3. 三段階では、トークンは、トークンの安全性と適時性を確保するため、有効期限を含める必要があります

JWT認定組成

  • 製JWT 头.载荷.签名中間の3つの部分の.スプライシングから
  • JSONは各部分は、ヘッダとペイロード使用して、辞書でbase64不可逆的な暗号化アルゴリズムアルゴリズムHS256を使用して、署名を可逆暗号化アルゴリズム

このセクションでは、JWTの認定について説明します。

  • JWTヘッドは:いくつかの無関係な記述情報が含まれています。会社名、開発者情報、内容も空にすることができます
  • JWT負荷:コア情報であって、ユーザのホームキー、アカウント情報、クライアントデバイス情報、トークンの有効期限
  • JWT署名:セキュリティ情報、第一の暗号化結果、負荷の暗号化結果が含まれている、サーバのセキュリティコード(塩)

JWTは、アルゴリズムを発行しました

トークンは、オリジナルの有効期限を超えても有効であり、各ログのクライアント・インターフェースのニーズにトークンとサーバを運ぶことになるしない場合の合計は、新しいトークンを発行する前に4つに分割され、場合にのみ、再度ユーザがログインするバックされますチェック

ヘッドアルゴリズム

  • ヘッド内容:会社名、プロジェクト情報、また空にすることができます
  • JSON文字列、繰り返しのJSON base64文字列に暗号化された文字列にこれらのデータ

アルゴリズム負荷部

  • コンテンツペイロード部:ユーザーアカウント、クライアントデバイス情報、主キーのユーザ情報(ユーザアカウントと、彼らはトン後に得ることができる前に認証を提供する必要性)、有効期限(現在の時刻と有効期限を組み合わせ生成の構成に応じて)
  • JSON文字列、繰り返しのJSON base64文字列に暗号化された文字列にこれらのデータ

署名アルゴリズムの一部

  • 署名部分の内容:ヘッドコンテンツの暗号化結果、メンバーとして暗号化された結果の負荷部は、その後、サーバからセキュリティコードを取得します
  • 不可逆的HS256へのJSON文字列、リピートJSON文字列の暗号化文字列にこれらのデータ

接続されているトークンの生成

  • 3つの文字列.の三トークンスプライシングを生成

JWTチェックサムアルゴリズム

合計5つに行う分けることができます。

セグメンテーション

  • で、クライアントから提出されたリクエストからトークンを取得し.、3つのセクションにカットでない場合は3つのセクションが、違法なトークン

復号化ヘッド

固定するので、状況を見てみると、一般的に、復号化するために必要はありません。

復号化負荷

  • 第JSON base64文字列に復号化し、辞書データのpythonのフォーマットに変換
    • ユーザーアカウントが存在するかどうかを判断するには、QUERY Userテーブル
    • 要求された情報とロード同じユーザーまたはデバイスかどうかを判断するよりも、復号化された情報は、ユーザーが安全性のヒント(例:リモートログイン)を作成するかどうかを決定
    • 現在時刻より有効期限、そのトークンは、時間のために有効であるか否かを判断します

衝突は、署名を検証します

  • 最新のユーザーが送信し、負荷、JSON文字列に辞書で構成されるサーバーのセキュリティコードの最初のトークンの変換
  • 新たに形成されたJSON文字列の暗号化の新しいHS256署名文字列を生成するために、非可逆暗号化アルゴリズムを使用して
  • 署名の比較の第三段落を持つ新しい署名文字列衝突、トークンが正当なものであることを保証するために同じ言葉。

ユーザーオブジェクトをチェック

  • 上記のアルゴリズム、得られた負荷チェックユーザオブジェクトを介して、トークンがログインユーザ(一般からrequest.userに格納されているジャンゴにログインユーザ)によって表されます。

JWTリフレッシュアルゴリズム

リフレッシュアルゴリズムは前のトークン、トークンの有効時間後に終了すると、利用者の提出が要求は、トークンが有効であるたびに更新しました

アルゴリズムのリフレッシュ実装:

  • 負荷に、二つの情報を追加するための余分な時間をトークン発行:最初の時間は、後にリフレッシュする最も効果的な時間をトークン発行
  • すべてのリクエストは、単にリフレッシュトークンを完了し、検査アルゴリズム検証トークン、また、要求された追加のリフレッシュトークンインターフェースを行っていないトークンを運びます
  • サーバーだけでなく、有効期限を設定するには、だけでなく、最大のリフレッシュ時間を設定するには

JWT認定のメリット

  • データベースIO操作を書いていない、トークン格納する必要はありません
  • クライアント・ストレージ・トークン、サーバーのみを格納発行されたチェックサムアルゴリズム、高コード効率
  • 統一された複数のサーバーに発行および検証アルゴリズムは、サーバークラスタは、ルールは非常に便利JWTの下で行います

DRF JWT認定

インストール

pip3 install djangorestframework-jwt

使用すると自带良いJWTを設定しました

from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
    url(r'^login/',obtain_jwt_token),
]
'''
path('login/', obtain_jwt_token)其实相当于path('login/', ObtainJSONWebToken.as_view())
因为我们之间进源码可以看到
obtain_jwt_token = ObtainJSONWebToken.as_view()     #获得
refresh_jwt_token = RefreshJSONWebToken.as_view()   #刷新
verify_jwt_token = VerifyJSONWebToken.as_view()     #验证
'''

テストインタフェース:ポスト要求

postman发生post请求
接口:http://127.0.0.1:8000/api/login/

数据:
{
    "username":"admin",
    "password":"admin123"
}

返回一个token字符串
{
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTc3ODc0MzU0LCJlbWFpbCI6IiJ9.5z8Ya-mxj-oPSOwdXenSKUWf7M5pt3r8YVlFKu1cskY"
}

ワークス

"""
jwt:json web tokens 采用json格式在web上传输的 认证字符串

jwt字符串:头.载荷.签名

头:公司基本信息、项目组基本信息、常规加密算法名
载荷:用户信息、过期时间
签名:头、载荷、秘钥

{头信息字典,采用base64加密算法}.{载荷信息字典,采用base64加密(base64编码)}.{头加密串、载荷加密串、服务器秘钥,采用hs256加密算法}

base64是可逆的
hash256是不可逆加密
我们一般只会将账号信息,过期时间放载荷里面,一般把密码什么重要信息丢签名里面

おすすめ

転載: www.cnblogs.com/ghylpb/p/12154343.html