Django REST framework中認證和許可權的使用方法
Django REST framework中認證和許可權的使用方法
認證方式:
- 基本認證
- 會話認證(SessionAuthentication)
- 令牌認證(TokenAuthentication)
基本認證:
此身份驗證方案使用HTTP基本身份驗證,該身份針對使用者的使用者名稱和密碼進行了簽名。基本身份驗證通常僅適用於測試。
如果成功通過身份驗證request.user將是DjangoUser例項。
未經授權的身份驗證的響應將被拒絕 HTTP 401 Unauthorized
會話認證(SessionAuthentication):
此身份驗證方案使用Django的預設會話後端進行身份驗證。會話身份驗證適用於在與您的網站相同的會話上下文中執行的AJAX客戶端。
如果成功通過身份驗證request.user將是DjangoUser例項。
未經授權的身份驗證的響應將被拒絕HTTP 403 Forbidden。
令牌認證(TokenAuthentication)
此身份驗證方案使用簡單的基於令牌的HTTP身份驗證方案。令牌認證適用於客戶端-伺服器設定,例如本機桌上型電腦和移動客戶端。
為了使客戶端進行身份驗證,令牌金鑰應包含在AuthorizationHTTP標頭中。金鑰應以字串文字“ Token”作為字首,並用空格分隔兩個字串。例如:
Authorization:Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
認證失敗會有兩種可能的返回值:
401 Unauthorized 未認證
403 Permission Denied 許可權被禁止
認證全域性設定
可以在配置檔案中配置全域性預設的認證方案,配這裡是應用在全域性的
REST_FRAMEWORK = {
# 預設的認證列表: session
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication', # session認證
)
}
因為 認證一般都是和許可權配合使用,當我們不設定許可權時,是沒有任何效果的。為了讓大家看到最佳效果,我們額外新增一條配置資訊。配置資訊的意思是 只有認證登入使用者才可以訪問檢視
REST_FRAMEWORK = {
# 預設的認證列表: session
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
],
# 預設的許可權列表: 只有登入使用者才可以訪問
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
指定檢視認證設定
我們也可以在每個檢視中通過設定authentication_classess屬性來設定
from book.models import BookInfo
from book.serializers import BookInfoModelSerializer
from rest_framework.viewsets import ModelViewSet
from rest_framework.authentication import TokenAuthentication
class BookModelViewSet(ModelViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoModelSerializer
#單個檢視,設定單獨認證方式
authentication_classes = [TokenAuthentication]
單個檢視進行認證,僅對該檢視有效。
許可權Permissions
許可權控制可以限制使用者對於檢視的訪問和對於具體資料物件的訪問。
- 在執行檢視的dispatch()方法前,會先進行檢視訪問許可權的判斷
- 在通過get_object()獲取具體物件時,會進行物件訪問許可權的判斷
1.許可權的種類
- AllowAny 允許所有使用者
- IsAuthenticated 僅通過認證的使用者
- IsAdminUser 僅管理員使用者
- IsAuthenticatedOrReadOnly 認證的使用者可以完全操作,否則只能get讀取
2.使用
可以在配置檔案中設定預設的許可權管理類,如
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',# 僅通過認證的使用者
)
}
如果未指明,則採用如下預設配置:
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
)
也可以在具體的檢視中通過permission_classes屬性來設定,如
from book.models import BookInfo
from book.serializers import BookInfoModelSerializer
from rest_framework.viewsets import ModelViewSet
from rest_framework.authentication import SessionAuthentication
class BookModelViewSet(ModelViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoModelSerializer
#單個檢視,設定單獨認證方式
authentication_classes = [SessionAuthentication]
permission_classes = [AllowAny]
3.指定檢視設定(僅在該檢視生效)
from book.models import BookInfo
from book.serializers import BookInfoModelSerializer
from rest_framework.viewsets import ModelViewSet
from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import AllowAny
class BookModelViewSet(ModelViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoModelSerializer
#單個檢視,設定單獨認證方式
authentication_classes = [SessionAuthentication]
#設定單獨的許可權
permission_classes = [AllowAny]
相關文章
- django-rest-framework 基礎三 認證、許可權和頻率DjangoRESTFramework
- Django REST framework API 指南(14):許可權DjangoRESTFrameworkAPI
- django-rest-framework-原始碼解析004-三大驗證(認證/許可權/限流)DjangoRESTFramework原始碼
- Django框架rest_framework中APIView的as_view()原始碼解析、認證、許可權、頻率控制Django框架RESTFrameworkAPIView原始碼
- Token認證——Django Rest framework(1)DjangoRESTFramework
- Django-Rest-Framework 許可權管理原始碼淺析DjangoRESTFramework原始碼
- Django REST framework API 指南(13):認證DjangoRESTFrameworkAPI
- DRF比Django的認證和許可權高在哪裡Django
- Hadoop 許可權認證Hadoop
- 二、django rest_framework原始碼之認證流程剖析DjangoRESTFramework原始碼
- rest_framework — 認證元件RESTFramework元件
- spring security許可權認證Spring
- Django REST Framework中的Serializer relationsDjangoRESTFramework
- django-rest-framework原始碼分析2—認證(Authentication)原始碼解析DjangoRESTFramework原始碼
- 深入Django:使用者認證與許可權控制實戰指南Django
- Django REST framework API 指南(12):驗證器DjangoRESTFrameworkAPI
- GoFrame 框架使用 casbin 許可權認證GoFrame框架
- DRF-認證許可權頻率
- springboot + shiro 實現登入認證和許可權控制Spring Boot
- Django REST framework 分頁DjangoRESTFramework
- Django rest framework之ModelSerializDjangoRESTFramework
- Django實戰1-許可權管理功能實現-03:使用者認證Django
- django rest framework serializers小結DjangoRESTFramework
- django rest_framework面經DjangoRESTFramework
- Django REST framework完全入門DjangoRESTFramework
- Django REST Framework Quickstart 專案DjangoRESTFrameworkUI
- 小知識:軟體開發的許可權控制和許可權驗證
- Django(63)drf許可權原始碼分析與自定義許可權Django原始碼
- Hyperf 完整專案-1-jwt 許可權認證JWT
- Django REST framework API 指南(21):SchemasDjangoRESTFrameworkAPI
- Django REST framework API 指南(6):路由DjangoRESTFrameworkAPI路由
- Django REST framework API 指南(7):解析DjangoRESTFrameworkAPI
- Django REST framework API 指南(8):渲染DjangoRESTFrameworkAPI
- Django REST framework API 指南(27):SettingsDjangoRESTFrameworkAPI
- Django REST framework API 指南(15):限流DjangoRESTFrameworkAPI
- 深度解析Django REST Framework 批量操作DjangoRESTFramework
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- Django REST framework的請求與響應DjangoRESTFramework