Django restframework之Token驗證的缺陷及jwt的簡單使用


一.主要缺陷:

  1.Token驗證是放在一張表中,即authtoken_token中,key沒有失效時間,永久有效,一旦泄露,后果不可想象,安全性極差。

  2.不利於分布式部署或多個系統使用一套驗證,authtoken_token是放在某台服務器上的,如果分布式部署,將失效,或多個系統用一套驗證,將必須復制該表到相應服務器上,麻煩費力。

  詳情參照:http://lion1ou.win/2017/01/18/

二.jwt的使用:

  1.安裝:

    1.1pip install djangorestframework-jwt;

    1.2在githup上找源碼安裝

  2.配置:

    2.1在你的settings.py,添加JSONWebTokenAuthentication到Django REST框架DEFAULT_AUTHENTICATION_CLASSES

        REST_FRAMEWORK = {
              'DEFAULT_PERMISSION_CLASSES': (           'rest_framework.permissions.IsAuthenticated',                          ),            'DEFAULT_AUTHENTICATION_CLASSES': (          'rest_framework_jwt.authentication.JSONWebTokenAuthentication',          'rest_framework.authentication.SessionAuthentication',           'rest_framework.authentication.BasicAuthentication',              ),             } 

    2.2在您urls.py添加以下URL路由以啟用通過POST獲取令牌包括用戶的用戶名和密碼。

        from rest_framework_jwt.views import obtain_jwt_token
          #...

          urlpatterns = [
            '',
              # ...

          url(r'^api-token-auth/', obtain_jwt_token),
            ]      

    2.3jwt相關使用(setting.py中配置):

import datetime
JWT_AUTH={
    #Token失效時間
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
    #Token前綴
    'JWT_AUTH_HEADER_PREFIX': 'JWT'
}

     2.4自定義用戶驗證(obtain_jwt_token默認為使用用戶名和密碼):

#views中重寫authenticate認證
from django.contrib.auth.backends import ModelBackend
User=get_user_model()

# Create your views here.
class CustomBackend(ModelBackend):
   '''
   自定義用戶驗證(setting.py)
   '''
   def authenticate(self, username=None, password=None, **kwargs):
       try:
           user=UserProfile.objects.get(Q(username=username)|Q(mobile=username))
           if user.check_password(password):
             return user
       except Exception as e:
           return None

 

#setting中添加BANCENDS
AUTHENTICATION_BACKENDS=(
  #將bancends添加進setting
  'users.views.CustomBackend',
 
)

 

           詳情參照: http://getblimp.github.io/django-rest-framework-jwt/

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM