6

Tôi đang lập kế hoạch xây dựng một ứng dụng với Django Rest Framework. Tôi quan tâm nhiều hơn đến việc sử dụng cơ chế xác thực Django-Rest-Framework-JWT hơn Phiên hoặc Mã thông báo cơ chế xác thực.DRF: cách tích hợp django-rest-framework-jwt vào Djoser

Nhưng tất cả các gói khác như Django-Rest-AuthDjoser (giúp trong quá trình đăng ký) sử dụng hệ thống phiên và Token xác thực.

Làm thế nào để ghi đè lên các cơ chế xác thực token trong Djoser hoặc Django-Rest-Auth với Django-Rest-khung-JWT?

Trả lời

11

Tôi biết câu hỏi này là gần một năm cũ, nhưng tôi chỉ tìm ra cách để có được Djoserdjango-nghỉ ngơi-knox để chơi cùng và chắc chắn đủ các kỹ thuật tương tự đã làm việc với djangorestframework-JWT như tốt. Bí quyết là biết rằng bạn có thể sử dụng điểm cuối tài khoản của Djoser mà không sử dụng điểm cuối liên quan đến xác thực của nó. Bạn chỉ cần đặt mỗi thư viện vào điểm cuối của riêng nó.

Đây là cách tôi thiết lập Django Nghỉ ngơi Framework để sử dụng JWTs để đăng nhập và xác thực đối với thiết bị đầu cuối Djoser (Tôi sẽ mang nó từ đầu đến cuối):

Đầu tiên, cài đặt djangorestframework-JWTDjoser:

pip install djangorestframework-jwt djoser 

định mà bạn muốn sử dụng JWTs để xác thực bằng cách thêm JSONWebTokenAuthentication để DEFAULT_AUTHENTICATION_CLASSES trong dự án của Django settings.py của bạn:

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

Tiếp theo, Thêm djoser.urls và rest_framework_jwt của obtain_jwt_token nhằm url của bạn:

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'), 
] 

Đó nên là tất cả mọi thứ bạn cần để bắt đầu.Chỉ cần để được an toàn, chạy một migrate (Tôi quay lên một trường hợp hoàn toàn mới của Django Nghỉ ngơi Khung bài đăng này và vẫn chưa chạy các cam kết ban đầu trước khi thời điểm này):

python manage.py migrate 

Để kiểm tra những điều trên, tạo một người dùng mới nếu bạn chưa có:

python manage.py createsuperuser 

một khi bạn có một tài khoản người dùng, runserver và sau đó thử đăng nhập để có được JWT của bạn:

http POST http://localhost:800/auth/login/ username = quản trị password = mật khẩu

Bạn sẽ nhận lại một mã thông báo:

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

Sau đó bạn có thể sử dụng thẻ này để xác thực chống lại /me/ endpoint Djoser để lấy thông tin cá nhân của bạn. Chỉ bao gồm dấu hiệu của bạn trong vòng tiêu đề của yêu cầu của bạn như Authorization: JWT:

http http://localhost:8000/account/me/ "Authorization: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"

Dưới đây là những gì tôi nhận lại:

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

Như bạn có thể thấy, thật dễ dàng để bắt đầu chúng tôi ing JWTs để xác thực. Tôi đoán là các thư viện như djoserdjango-rest-auth tập trung vào xác thực cơ bản, phiên hoặc mã thông báo vì chúng được đưa vào hộp DRF và do đó có lẽ là phương pháp phổ biến nhất mà mọi người xác thực cuộc gọi máy chủ của họ.

Vẻ đẹp của tất cả điều này là dễ dàng thực hiện một chương trình xác thực an toàn hơn vì Djoser không được kết hợp chặt chẽ với các lớp xác thực của riêng nó - nó sẽ vui vẻ tôn trọng bất cứ điều gì bạn đặt cho DEFAULT_AUTHENTICATION_CLASSES.

+1

Djoser gần đây đã nhận được hỗ trợ cho JWT dựa trên djangorestframework-jwt - http://djoser.readthedocs.io/en/latest/getting_started.html#installation và http://djoser.readthedocs.io/en/latest/ authentication_backends.html # json-web-token-authentication –

Các vấn đề liên quan