フルネーム:JSONウェブトークンは
説明:元のデータは列JSON、背景生成、ウェブフロントストレージを介して送信された暗号化された
フォーマットthree--ペイロード署名ヘッド-ヘッド及び負荷がBASE64のみMD5署名、可逆暗号化を有しています不可逆的な暗号化
コンテンツ:
ヘッド(基本情報、また空にすることができます):暗号化、企業情報、チーム情報、...
ペイロード(コア情報):ユーザー情報、有効期限、...
署名(セキュリティ):ヘッドサーバー秘密鍵の暗号化結果+ペイロードの暗号化結果+ MD5暗号化結果
の証明規則:
背景には、サーバの秘密鍵(それが唯一のセキュリティJWTのある)のセキュリティを保護しなければならない
トークンの背景の発行- >フロントストレージ- >リクエストには認証が必要です-トークンを持つ正当なユーザーを取得する>バックグラウンドチェック
:JWT認証持っなぜ
1)背景ニーズのみ検証トークンアルゴリズムに関連して、ストアの証明書を必要とする、ストレージ効率がバックグラウンドチェックが完了するよりもはるかに大きいとトークンを削除し、トークン格納されません
2)JWT認証アルゴリズムは、サーバークラスタの展開に適しています
1)インタフェースの誰もが直接アクセスすることができます
要求等、取得、またはポストではない、任意のチェックを必要としません。
2)インタフェースがアクセスにログインしなければならない後
の任意のリクエストメソッドは、方法を限定することを行うことができ、要求は、要求ヘッダーに認証情報を運ばなければならない-許可
するためにのみログイン・インタフェースを介して取得された3)認証情報受信
アカウントのパスワード及び他の情報の受信を提供し、変更の認証情報、トークンに楽屋を行ってきました
前景はログアウト完了どのように)4
通常のクッキーに保存されている受信に成功したログインのトークン認証情報を、別の償却をアクティブフォアグラウンドクリアトークン情報を保存します
1、JWT認定:三段のフォーマット、コンテンツの各部分、前景メモリに背景によって発行され、その後、バックグラウンドチェック証明パイプラインを通過
ログビュー
rest_framework.viewsからAPIViewをインポートする
から。インポートモデル、シリアライザ
utils.responseインポートAPIResponseのから
クラスLoginAPIView(APIView):
authentication_classes = []
permission_classes = []
DEFポスト(自己、要求、*引数、** kwargsから):
シリアライザ= serializers.LoginSerializer(データ= request.data )
serializer.is_valid(RAISE_EXCEPTION = TRUE)
戻りAPIResponse(MSG = 'ログイン成功'、データ= {
'ユーザ名':serializer.user.username、
'トークン':serializer.token
})
序列化、并且在全局钩子中签发トークン
rest_framework.serializersからModelSerializer、CharFieldです、ValidationErrorを、SerializerMethodFieldをインポートします
から。輸入モデルは
django.contrib.authインポート認証の#from
輸入再
rest_framework_jwt.serializersがjwt_payload_handlerインポートから、jwt_encode_handler
クラスLoginSerializer(ModelSerializer):
ユーザ名= CharFieldです(WRITE_ONLY =真)
パスワード= CharFieldです(WRITE_ONLY =真)
クラスのMeta:
モデル=モデル。ユーザー
フィールド=( 'ユーザ名'、 'パスワード') #在全局钩子中签发トークン デフ検証(自己、attrsに): #ユーザー=認証(** attrsに) #账号密码登录=>多方式登录 ユーザー= self._many_method_login (** ATTRS)
#トークン発行され、ユーザとトークンが直列化されたオブジェクトに格納された
ペイロード= jwt_payload_handler(ユーザ)
トークン= jwt_encode_handler(ペイロード)
self.user =ユーザー
self.token =トークン
リターンattrsには
、複数の着陸アプローチチェック
#1マルチログ
DEF _many_method_login(セルフ、attrsに**):
ユーザ名= attrs.get( 'ユーザ名')
パスワード= attrs.get( 'パスワード')
IF re.match(R&LT、ユーザ名'* @ * ..'):
ユーザー=モデル。 User.objects.filter(メールに=ユーザー名)1次回()#タイプ:models.User
のelif re.match(R&LT '^ 1 [3-9] [0-9] {} $ 9'、ユーザ名):
ユーザー= models.User.objects.filter(モバイル=ユーザー名)1次回()
他:
= models.User.objects.filterユーザー(ユーザー名=ユーザー名)1次回()
ないユーザIF:
昇給ValidationErrorを({ 'ユーザ名': 'アカウント悪い'})
でない場合のuser.check_password(パスワード):
昇給ValidationErrorを({ 'パスワード': '間違ったパスワード'})
戻りユーザ
#は、シリアル化関与
:クラスUserModelSerializer(ModelSerializer)
#変更シリアライズ元のデータベースフィールドの
パスワード= SerializerMethodField()
DEF(自己、OBJ)GET_PASSWORDを:
リターン「# ####### '
クラスのメタ- :
モデル= models.User
フィールズ=('ユーザ名''パスワード''携帯電話''メールで'' FIRST_NAME '' LAST_NAME「)
2、DRF-JWTウィジェット:
3つのインターフェイス:トークン発行、トークン検証、トークンリフレッシュ
カスタム設定プラグJWT
URL(R '^ログイン/ $'、obtain_jwt_token)、
URL(R '^検証/ $'、verify_jwt_token)、
URL(R '^リフレッシュ/ $'、refresh_jwt_token)、
図3は、複数のログを使用すると、完全なプラグJWT
ビュークラスを:要求されたデータは、(オブジェクトのシーケンスから取得)カテゴリの検証シーケンスを完了し、ユーザー情報およびトークンに返却する
カテゴリの順序:カスタムデシリアライズフィールド、チェックデータは、全体的なフックとユーザトークンを取得し、オブジェクトクラスに格納されたシーケンス
トークンはJWT rest_framework_jwt.serializersで使用することができるプラグ
jwt_payload_handler、jwt_encode_handler
完全問題
グローバルトークンの発行に連載し、フック
rest_framework.serializersからModelSerializer、CharFieldです、ValidationErrorを、SerializerMethodFieldをインポートします
から。輸入モデルは
django.contrib.authインポート認証の#from
輸入再
rest_framework_jwt.serializersがjwt_payload_handlerインポートから、jwt_encode_handler
クラスLoginSerializer(ModelSerializer):
ユーザ名= CharFieldです(WRITE_ONLY =真)
パスワード= CharFieldです(WRITE_ONLY =真)
クラスのMeta:
モデル=モデル。ユーザー
フィールド=( 'ユーザ名'、 'パスワード') #在全局钩子中签发トークン デフ検証(自己、attrsに): #ユーザー=認証(** attrsに) #账号密码登录=>多方式登录 ユーザー= self._many_method_login (** ATTRS)
#トークン発行され、トークンは、ユーザとオブジェクトの配列に格納され
たペイロード= jwt_payload_handler(ユーザ)
トークン= jwt_encode_handler(ペイロード)
self.user =ユーザー
self.token =トークン
リターンATTRS
カスタムビュークラス周波数限界完了するクラス4、周波数
1)SimpleRateThrottle継承定義されたクラス、get_cache_keyオーバーライドメソッド、スコープクラス属性セット
2)は、スコープの認証文字列、構成ファイル内の構成スコープ周波数設定に対応する文字列である
3 )get_cache_key戻り値は、文字列は、キャッシュアクセス頻度とキャッシュキー文字列です
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_RATES' {
'3': '3 /分'、
}}
#カスタムクラス周波数
インポートSimpleRateThrottle rest_framework.throttlingから
位。SimpleRateThrottle継承1)定義されたクラス、get_cache_keyオーバーライドメソッド、設定範囲クラス属性
#2)は、スコープの認証文字列、構成ファイル内の構成スコープ周波数設定に対応する文字列であります
#3)get_cache_key戻り値は文字列で、文字列がキャッシュのアクセス頻度とキャッシュのキーである
クラスThreeTimeUserThrottle(SimpleRateThrottle):
範囲=「三」
#現在のユーザーは、キーキャッシュされた
:DEFのget_cache_key(セルフ、リクエスト、ビュー)
に戻り"スロットル:USER_%s'は%( request.user.id)