PS:git
(1)驗證低效率 es6
(2)當有大量的用戶存儲在數據庫中 查表會很慢github
PS:在緩存中有I/O操做算法
(1)服務端產生token 傳輸給客戶端 服務端不須要保存token減少服務端壓力數據庫
(2)服務端存儲的是簽發和認證的兩端算法 django
(3)算法完成各集羣服務器同步成本低,路由項目完成集羣部署(適應高併發)json
(1)採用三段式格式 頭部 + 載荷 + 簽名後端
(2)每一部分都是一個json字典加密以後造成的字符串緩存
(3)頭部 + 載荷 實驗bases64位加密算法 該算法可逆服務器
(4)簽名採用hash256 不可逆
(5)格式內容
(1)頭部:基礎信息 ---> 公司名稱 項目組信息等等
(2)載荷:有用可是非隱私信息 --- > 用戶公開信息 過時時間等
(3)簽名:頭部 + 載荷 + 祕鑰 不可逆算法
(6)簽發token:
(1)頭部可逆算法加密 ---> 固定頭部信息加密
(2)載荷可逆算法加密 ---> 當前用戶 過時時間加密
(3)簽名不可逆算法 ---> 頭部 + 載荷 + 祕鑰生成不可逆加密
(7)校驗token:
(1)頭部校驗可選
(2)載荷校驗用戶與過時時間
(3)簽名檢驗 頭部 + 載荷 + 祕鑰檢驗token是否被篡改
(1)官網
https://github.com/jpadilla/django-rest-framework-jwt
(2)安裝
pip3 install djangorestframework-jwt
(3)簽發token
# 二者簽發token方式是相同的 from rest_framework_jwt.views import ObtainJSONWebToken,obtain_jwt_token urlpatterns = [ url(r'^login/$', ObtainJSONWebToken.as_view()), url(r'^login/$', obtain_jwt_token) ]
PS:
(1)此時get方法不被容許
(2)只有post會被容許
(4)驗證信息輸入與結果
{ "username":"admin", "password":"admin123" } PS: "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTcxNzUzODY5LCJlbWFpbCI6IiJ9.rkI5BYdq9HFmIIW0Z8H7zb1g-XA4SYSy_RY5DKbuupM"
PS:
(1)數據錯誤不會反會信息
(2)每次發送token都會改變
(5)認證校驗token
# 路由層 url(r'^test_token/$', views.Login.as_view()),
# 視圖層 # 只有登陸且經過認證的用戶才能夠訪問
from rest_framework_jwt.authentication import JSONWebTokenAuthentication # 查看是否經過認證
from rest_framework.permissions import IsAuthenticated # 用戶必須登陸
class Login(APIView): permission_classes = [IsAuthenticated] # 局部驗證用戶必須登陸 authentication_classes = [JSONWebTokenAuthentication] # 局部檢驗token def get(self,request,*args,**kwargs): return Response({ 'status':0, 'msg':'測試成功', 'results':request.user.username })