ディレクトリ
JWT認定
JWTは、json web token
略語、ログイン認証の認証
通常のセッションの認証および証明の間JWTの違い
- セッションは、サーバーがストアとJWTトークンに必要としない、サーバーIO操作が削減される、データベース・サーバに保存する必要はありません(何のIO書き込み動作)
- クライアントによって保存されたトークン情報は、サーバーのみを格納および検証アルゴリズムは、高効率のサーバー側のコードの実行を発行しました
- 三段階では、トークンは、トークンの安全性と適時性を確保するため、有効期限を含める必要があります
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是不可逆加密
我们一般只会将账号信息,过期时间放载荷里面,一般把密码什么重要信息丢签名里面