我打算用Django Rest Framework構建一個應用程序。我更感興趣的是使用Django-Rest-Framework-JWT認證機制,而不是會話或令牌認證機制。DRF:如何將django-rest-framework-jwt集成到Djoser
但都喜歡Django的REST的驗證和左塞爾(這有助於在註冊過程中)的其他包使用Session和令牌認證系統。
如何覆蓋左塞爾或Django的REST的驗證與Django的REST的架構,智威湯遜令牌認證機制?
我打算用Django Rest Framework構建一個應用程序。我更感興趣的是使用Django-Rest-Framework-JWT認證機制,而不是會話或令牌認證機制。DRF:如何將django-rest-framework-jwt集成到Djoser
但都喜歡Django的REST的驗證和左塞爾(這有助於在註冊過程中)的其他包使用Session和令牌認證系統。
如何覆蓋左塞爾或Django的REST的驗證與Django的REST的架構,智威湯遜令牌認證機制?
我知道這個問題幾乎是一歲,但我只是想出瞭如何讓左塞爾和Django的休息 - 諾克斯沿着並確保打足相同的技術與djangorestframework,智威湯遜作爲工作好。訣竅是知道您可以使用Djoser的帳戶端點,而不使用與其認證相關的端點。你只需要把每個庫放在自己的端點上。
下面是如何設置的Django的REST框架使用JWTs登錄並針對左塞爾端點認證(我打算把它從開始到結束):
首先,安裝djangorestframework,智威湯遜和左塞爾:
pip install djangorestframework-jwt djoser
指定要在使用JWTs認證通過增加JSONWebTokenAuthentication
到DEFAULT_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用於認證。我的猜測是,像djoser和django-rest-auth這樣的庫專注於Basic,Session或Token身份驗證,因爲它們包含在DRF框之外,因此可能是人們通過身份驗證呼叫的最常用方法其服務器。
所有這一切的優點是,它很容易實現更安全的身份驗證方案,因爲Djoser沒有緊密耦合到自己的身份驗證類 - 它會高興地尊重您爲DEFAULT_AUTHENTICATION_CLASSES
設置的任何內容。
Djoser最近獲得了基於djangorestframework-jwt的JWT支持 - http://djoser.readthedocs.io/en/latest/getting_started.html#installation和http://djoser.readthedocs.io/en/latest/ authentication_backends.html#JSON-網絡令牌的認證 –