6

我打算用Django Rest Framework構建一個應用程序。我更感興趣的是使用Django-Rest-Framework-JWT認證機制,而不是會話令牌認證機制。DRF:如何將django-rest-framework-jwt集成到Djoser

但都喜歡Django的REST的驗證左塞爾(這有助於在註冊過程中)的其他包使用Session和令牌認證系統。

如何覆蓋左塞爾Django的REST的驗證Django的REST的架構,智威湯遜令牌認證機制?

回答

11

我知道這個問題幾乎是一歲,但我只是想出瞭如何讓左塞爾Django的休息 - 諾克斯沿着並確保打足相同的技術與djangorestframework,智威湯遜作爲工作好。訣竅是知道您可以使用Djoser的帳戶端點,而不使用與其認證相關的端點。你只需要把每個庫放在自己的端點上。

下面是如何設置的Django的REST框架使用JWTs登錄並針對左塞爾端點認證(我打算把它從開始到結束):

首先,安裝djangorestframework,智威湯遜左塞爾

pip install djangorestframework-jwt djoser 

指定要在使用JWTs認證通過增加JSONWebTokenAuthenticationDEFAULT_AUTHENTICATION_CLASSES Django項目的settings.py

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

接着,添加djoser.urls和rest_framework_jwt的obtain_jwt_token以您的網址:

from django.conf.urls import url, include 
from rest_framework_jwt import views as jwt_views 

urlpatterns = [ 
    url(r'^account/', include('djoser.urls')), 
    url(r'^auth/login/', jwt_views.obtain_jwt_token, name='auth'), 
] 

這應該是你需要開始一切。爲了安全起見,運行migrate(我打滑了Django的REST框架的一個全新的實例這篇文章,還沒有運行此點之前的初始提交的):

python manage.py migrate 

要進行測試,創建一個新用戶,如果你不已經有一個:

python manage.py createsuperuser 

一旦你有一個用戶帳戶,runserver,然後嘗試登錄到讓你的智威湯遜:

HTTP POST http://localhost:800/auth/login/用戶名=管理員密碼=密碼

應該會得到一個令牌:

{ 
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM" 
} 

然後,您可以使用此標記對左塞爾的/ME/端點認證,讓您的個人資料信息。只要有你的要求的報頭中的令牌授權:JWT

HTTP http://localhost:8000/account/me/ 「授權:JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM」

這是我回來:

{ 
    "email": "", 
    "id": 2, 
    "username": "admin" 
} 

正如你所看到的,開始我們很容易將JWT用於認證。我的猜測是,像djoserdjango-rest-auth這樣的庫專注於Basic,Session或Token身份驗證,因爲它們包含在DRF框之外,因此可能是人們通過身份驗證呼叫的最常用方法其服務器。

所有這一切的優點是,它很容易實現更安全的身份驗證方案,因爲Djoser沒有緊密耦合到自己的身份驗證類 - 它會高興地尊重您爲DEFAULT_AUTHENTICATION_CLASSES設置的任何內容。

+1

Djoser最近獲得了基於djangorestframework-jwt的JWT支持 - http://djoser.readthedocs.io/en/latest/getting_started.html#installation和http://djoser.readthedocs.io/en/latest/ authentication_backends.html#JSON-網絡令牌的認證 –