DRF에서는 Authentication(인증)과 Permission(권한)을 효과적으로 관리할 수 있다.
Authentication (인증)
인증은 사용자가 시스템에 로그인하고 자원에 엑세스할 수 있는지 확인할 수 있는 과정으로 DRF에서는 여러 가지 인증 방법을 제공한다.
DRF의 인증 방법
1. BasciAuthentication
- HTTP 제어 header로 넘긴 ID와 Password를 base64로 encoding하는 방법이다.
- 사용자 이름과 비밀번호가 base64로 인코깅 되어 전송되기 때문에 매우 간단하지만 보안상의 위협이 있을 수 있다.
- HTTPS와 같은 보안 프로토콜과 함께 사용하는 것이 좋다.
2. TokenAuthentication
- 클라이언트가 서버에 인증 요청을 보내면 서버가 해당 사용자에 대한 토큰을 생성하고 반환하는 방식이다.
- 클라이언트는 이 토큰을 이용하여 후속 요청을 보냄으로써 인증을 유지한다.
- 보안성이 높고, 클라이언트와 서버간의 독립성을 유지할 수 있어 client-server 관계에서 많이 사용한다.
3. SessionAuthentication
- 사용자가 로그인하면 서버측에 해당 사용자의 세션 정보를 저장하고 사용하여 인증하는 방식이다.
- 일반적으로는 쿠키를 사용하여 세션 ID를 클라이언트에 저장하고, 이를 서버에 전달하여 인증한다.
- 주로 웹 어플리케이션에서 사용하며, Django의 주요 인증 방식 중 하나이다.
4. RemoteAuthentication
- 사용자 정보가 다른 서비스에서 관리되는 경우에 사용된다.
- OAuth나 LDAP과 같은 외부 인증 서비스를 이용해 인증하는 경우가 해당된다.
- 클라이언트는 원격 서비스로 부터 인증을 수행하고 인증된 사용자는 토큰 또는 기타 정보를 받아서 사용한다.
5. Custom Authentication
- 개발자가 직접 인증 방식을 정의하여 사용하는 방식이다.
- DRF에서는 사용자 정의 인증 클래스를 만들어서 인증 로직을 사용자가 원하는 대로 구현할 수 있다.
- 특정 시스템이나 요구 사항에 맞는 유연한 인증 방식을 구현할 수 있다.
Permission
권한은 특정 서비스를 어느정도로 이용할 수 있는지에 대한 권한이다.
DRF의 Permisson
1. AllowAny
- 모든 사용자가 자원에 접근할 수 있도록 허용하는 권한이다.
- 인증된 사용자와 비인증된 사용자에게 모두 적용된다.
2. IsAuthenticated
- 인증된 사용자만 자원에 접근할 수 있도록 허용하는 권한이다.
3. IsAdminUser
- 관리자 권한을 가진 사용자만 자원에 접근할 수 있도록 허용하는 권한이다.
- 기본적으로 Django에서는 is_staff속성을 사용한다.
4. IsAuthenticatedOrReadOnly
- 인증된 사용자는 자원을 읽고 쓸 수 있지만, 인증되지 않은 사용자는 읽기만 가능하다.
5. DjangoModelPermissions
- Django의 모델의 권한을 기반으로 하는 권한이다.
- 각 요청에 대해서 Django의 기본 권한 시스템(django.contrib.auth)을 사용하여 권한을 부여한다.
6. DjangoModelPermissionsOrAnonReadOnly
- Django모델의 권한을 기반으로 하는 권한이지만, 인증되지 않은 사용자에게는 읽기 전용 권한을 부여한다.
7. DjangoObjectPermissions
- 개별 개체에 대한 권한을 부여하기 위해 Django의 객체 수준 권한 시스템을 기반으로 하는 권한이다.
8. Custom Permissions
- 사용자 정의 권한 클래스를 만들어서 특정 요구에 맞게 동작하도록 조정할 수 있다.
출처
Authentication - Django REST framework
www.django-rest-framework.org
Permissions - Django REST framework
www.django-rest-framework.org
[D.R.F] 게시판에 Authentication과 Permission 적용하기
안녕하세요 (ง •_•)ง 오늘은 지난 시간에 실습했던 게시판 CRUD에 이어 authentication과 permission에 대해 알아보도록 하겠습니다. 게시판 CRUD 구현에 대한 부분은 아래의 링크를 참고해주세요! [D.R
wisdom-990629.tistory.com
'Django > DRF' 카테고리의 다른 글
[Method] DRF PUT과 PATCH의 차이점 (0) | 2024.04.03 |
---|---|
DRF 댓글 대댓글 모델 정의, Post와 serializer 연동 (0) | 2024.03.21 |
[View] DRF CBV 뷰의 종류와 차이점 (APIView, Mixins, Generic APIView, ViewSet) (2) | 2024.03.19 |
django.urls.exceptions.NoReverseMatch: Reverse for 'account_inactive' not found. 'account_inactive' is not a valid view function or pattern name. (0) | 2023.12.04 |
Django 프로젝트 단계별 가이드라인 3 (0) | 2023.12.03 |