Django For API 주석 - 섹션 3
이것들은 이 책의 중요한 주석과 코드 세션으로 기존의 Django 사이트를 웹 API로 확장하는 데 도움이 되며, 0에서 시작하여 위탁 관리와 API 문서의 모든 내용을 포함한다.우리는 세 번째 부분에서 서로 다른 유형의 사용자 인증 방법을 토론할 것이다.
시작합시다!
Read and
사용자 인증
승인: API 권한
인증: 사용자가 새 계정을 등록하고 로그인하고 로그아웃할 수 있는 과정
기본 인증:
가장 일반적인 HTTP 인증을 기본 인증이라고 합니다.클라이언트가 HTTP 요청을 하면 액세스 권한을 부여하기 전에 승인된 인증 자격 증명을 보내야 합니다.
전체 요청/응답 흐름은 다음과 같습니다.
401 (Unauthorized)
상태 코드와 WWW-Authenticate
HTTP 헤드, 권한 수여 방법에 대한 상세한 정보Authorization
HTTP 헤드200 OK
또는 403 Forbidden
상태 코드로 응답합니다.승인되면 클라이언트는 라이센스 HTTP 헤드 자격 증명을 사용하여 모든 향후 요청을 보냅니다.
Note: The authorization credentials sent are the unencrypted base64 encoded version of
<username>:<password>
.
속임수:
Note: Basic authentication should only be used via HTTPS, the secure version of HTTP.
세션 인증:
높은 수준에서 클라이언트는 자격 증명(사용자 이름/암호)을 사용하여 인증한 다음 서버에서 cookie로 저장된 세션 ID를 받습니다.그런 다음 세션 ID는 향후 각 HTTP 요청의 헤더로 전달됩니다.서버는 세션 ID를 전달할 때 해당 사용자에 대해 사용 가능한 모든 정보(자격 증명 포함)가 들어 있는 세션 객체를 검색하는 데 사용합니다.이 방법은 서버(세션 대상)와 클라이언트(세션 ID)에서 기록을 보존하고 유지해야 하기 때문에 상태가 있습니다.
이제 기본 프로세스를 살펴보겠습니다.
Note: The default setting in Django REST Framework is actually a combination of Basic Authentication and Session Authentication. Django’s traditional session-based authentication system is used and the session ID is passed in the HTTP header on each request via Basic Authentication.
찬성 의견:
Note: It is generally not advised to use a session-based authentication scheme for any API that will have multiple front-ends.
토큰 인증
영패 기반의 신분 검증은 무상태이다. 클라이언트가 서버에 초기 사용자 자격 증명을 보내면 유일한 영패를 생성하고 클라이언트가 이를 쿠키나 로컬 저장소로 저장한다.그리고 이 영패를 모든 HTTP 요청의 헤더에 전달하고 서버는 이를 사용하여 사용자가 인증을 받았는지 확인합니다.
The server itself does not keep a record of the user, just whether a token is valid or not.
Cookies vs localStorage
- Cookies are used for reading server-side information.
They are smaller (4KB) in size and automatically sent with each HTTP request.
- LocalStorage is designed for client-side information.
It is much larger (5120KB) and its contents are not sent by default with each HTTP request.
Tokens stored in both cookies and localStorage are vulnerable to XSS attacks.
The current best practice is to store tokens in a cookie with the httpOnly and Secure cookie flags.
참고 HTTP 헤드 WWW Authenticate는 응답 라이센스 헤드 요청에 사용할 토큰의 사용을 지정합니다.찬성 의견:
JSON 웹 토큰(JWT):
JSON 웹 영패(JWT)는 새로운, 강화된 영패 버전으로 몇 개의 제3자 패키지를 통해 Django REST 프레임워크에 추가할 수 있다.
DRF의 기본 인증
기본 사용 권한 클래스: AllowAny
기본 인증 클래스: 세션 인증과 기본 인증입니다.
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_AUTHENTICATION_CLASSES': [ # new
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
],
}
왜 이 두 가지 방법을 동시에 사용해야 합니까?
토큰 인증
첫 번째 단계는
DEFAULT_AUTHENTICATION_CLASSES
설정을 사용 TokenAuthentication
로 업데이트하는 것입니다. 다음과 같습니다.REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication', # new
],
}
authtoken
프로그램을 추가해야 합니다.Django REST 프레임에 포함되지만 INSTALLED_-
APPS
설정에 추가해야 합니다.'rest_framework.authtoken',
Django Rest Auth
사용자가 로그인, 로그오프 및 암호를 재설정할 수 있도록 API 끝점을 생성합니다.
django-rest-auth
구성 요소pip install django-rest-auth
INSTALLED_APPS
구성에 새 애플리케이션을 추가합니다.py'rest_auth',
path('api/v1/rest-auth/', include('rest_auth.urls')),
사용자 등록
기존 Django는 사용자 등록을 위한 내장 뷰나 URL을 제공하지 않으며, Django REST 프레임워크도 제공하지 않습니다.
한 가지 유행하는 방법은 제3자 패키지인 django allauth를 사용하는 것이다. 이 패키지는 사용자 등록과 django auth 시스템의 일부 부가 기능, 예를 들어 페이스북, 구글, 트위터 등을 통해 사회 인증을 하는 것이다.
django-allauth
구성 요소pip install django-allauth
INSTALLED_APPS
설정'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'rest_auth.registration',
EMAIL_BACKEND
와SITE_ID
도 포함된다.Note: Technically it does not matter where in the settings.py file they are placed, but it’s common to add additional configs like that at the bottom.
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' # new
SITE_ID = 1 # new
Note:
The email back-end config is needed since by default an email will be sent when a new user is registered, asking them to confirm their account. Rather than also set up an email server, we will output the emails to the console with the console.EmailBackend
setting.
SITE_ID
is part of the built-in Django “sites” framework which is a way to host multiple websites from the same Django project. We obviously only have one site we are working on here but django-allauth uses the sites framework, so we must specify
a default setting.
path('api/v1/rest-auth/registration/', include('rest_auth.registration.urls')),
Read Part IV
자세한 내용은 GitHub를 참조하십시오.
만약 네가 이 필기들을 읽는 것을 좋아한다면, 반드시 평론에서 나에게 너의 관점을 알려줘야 한다.연락하려면 다음 링크를 클릭하십시오.
| GitHub | | StackOverflow
Reference
이 문제에 관하여(Django For API 주석 - 섹션 3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pragativerma18/django-for-apis-notes-part-iii-1bo1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)