rest_framework 학습의 인증(Authentication) & 권한(Permissions)

2960 단어 django
인증과 권한 제어는 웹 개발에서 비교적 중요한 지식점입니다.django rest프레임워크의 인증과 권한이 어떻게 이루어졌는지
개술
우리는django에서 내장된 인증과 권한 방식을 제공하고 몇 장의 데이터베이스 테이블(예를 들어auth user,auth group,auth permission 등)을 유지하며 봉인된 방법(예를 들어authenticate(),login(),logout())을 제공하여 인증과 권한을 실현하는 것을 알고 있다.
rest_프레임워크 인증 및 권한
restframework의 APIView 베이스 클래스에서는 다음과 같이 인증 및 권한이 고급 패키지로 제공됩니다.
class APIView(View):

    # The following policies may be set at either globally, or per-view.
    authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES
    permission_classes = api_settings.DEFAULT_PERMISSION_CLASSES

authentication_classes는 인증 속성입니다. 기본적으로settings를 읽습니다.py의 DEFAULTAUTHENTICATION_CLASSES
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
}

permission_classes는 권한 속성입니다. 기본적으로settings를 읽습니다.py의 DEFAULTPERMISSION_CLASSES
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}

물론 클래스에서 다음과 같은 인증 및 권한 방법을 지정할 수도 있습니다.
from rest_framework.views import APIView
from rest_framework.authentication import TokenAuthentication, BasicAuthentication, SessionAuthentication
from rest_framework.permissions import IsAuthenticated, IsAdminUser, IsAuthenticatedOrReadOnly, AllowAny
class TestView(APIView):
    authentication_classes = (BasicAuthentication, )
    permission_classes = [IsAuthenticated]

    def get(self, request):
        print("++++++++++++++++", request.user)
        print(request.auth)
        return Response({"data": "hahah"})

DRF는 요청 인증이 성공하면 요청 개체 Request에서 Request를 설정합니다.사용자 및 Request.auth 속성, 일반 Request.user는django 사용자 실례,request.auth는 None 또는 인증에 첨부된 값 (예를 들어 Token 인증의 Token 값) 이며 인증이 실패하면 DRF는 기본적으로 Request를 설정합니다.user는 django입니다.contrib.auth.models.AnonymousUser 인스턴스, request.auth 기본값은 None 입니다.
인증 방법
DRF는 다음과 같은 몇 가지 일반적인 인증 방식을 제공한다. 1. BasicAuthentication, 사용자 이름 비밀번호 인증 방식
2. SessionAuthentication, Session 인증 방식 기반
3. Token Authentication은 영패 인증 방식을 바탕으로 한다. (한 사용자가 영패를 연결하고 요청할 때마다 요청 헤더에 추가한다.
Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

)
사용 권한
DRF는 다음과 같은 일반적인 권한을 제공합니다.
IsAuthenticated, 인증 통과
IsAdminUser, 관리자 권한
IsAuthenticatedOrReadOnly,
AllowAny, 인증 필요 없음(기본값)
총결산
DRF의 인증과 권한의 결합은 비교적 밀접하다. 인증만 권한 제어가 없으면 효력이 발생하지 않는다. 예를 들어 authentication만 설정한다classes permission을 설정하지 않음classes, 이 점을 명심해라!
또한 인증과 권한은 사용자 정의로 실현할 수 있으며 각각 BaseAuthentication 기초 인증 클래스, BasePermission 기초 권한 클래스를 계승하면 자신이 원하는 모든 권한 제어에 도달할 수 있다.
링크 첨부:
https://www.django-rest-framework.org/api-guide/authentication/
https://www.django-rest-framework.org/api-guide/permissions/

좋은 웹페이지 즐겨찾기