Django REST 프레임워크를 사용한 인증

본고에서 저는 Django REST 프레임워크(DRF)가 사용하는 흔한 인증 메커니즘을 소개하겠습니다.이 중 일부는 DRF에 포함되고, 다른 일부는 DRF에 포함되지 않은 유행 방안을 실현하는 사용자 정의 인증 패키지이다.우리는 각 방안의 작업 원리와 언제 사용해야 하는지를 상세하게 소개할 것이다.나는 또한 모든 항목을 어떻게 실현하는지 배우는 데 사용할 자원을 제공했다.
그러나 우리가 깊이 연구하기 전에 DRF에서 신분 검증이 어떻게 작동하는지 살펴볼 필요가 있다.

Django REST 프레임워크의 인증


인증은 서비스가 사용자가 자신이 주장하는 사용자인지 확인하는 방식입니다.확인 후, 귀하의 서비스는 그들이 일부 정보에 접근할 수 있는지 확인할 수 있습니다.
DRF에서 인증은 요청을 받은 후 처음 수행하는 검사입니다.권한, 제한 등과 같은 기타 모든 검사는 이후에 수행됩니다.동일한 API 서비스의 경우 각 유형의 클라이언트에 대해 여러 가지 방법으로 사용자 ID를 확인할 수 있습니다.
설정 파일에서 API의 인증 체계를 전체적으로 설정할 수 있습니다.
# settings.py
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ]
}
이 경우 DRF는 각 요청에 대해 먼저 BasicAuthentication 시나리오를 시도합니다.실패하면 목록의 다음 인증 방안을 시도합니다.
각 뷰의 글로벌 설정을 개별적으로 대체할 수도 있습니다.예를 들어, 이 보기에서는 TokenAuthentication 스키마에 대한 요청만 사용할 수 있습니다.
class SomeSpecialView(APIView):
    authentication_classes = [TokenAuthentication]
특정 보기에 대한 특정한 인증 방안을 설정하려면 설정 파일에 전역 인증 방안이 항상 설정되어 있는지 확인하십시오.

일반적인 인증 시나리오 여행


기저동맥조영


이게 제일...휴스턴 대학교...사용자가 가질 수 있는 기본 인증 방안입니다.사용자는 사용자 이름과 비밀번호로 자신을 표시한다.이것도 가장 안전하지 않은 방안이다.사용자는 네트워크를 통해 귀중한 비밀번호를 보낼 것이다.테스트에서만 사용할 수 있습니다.반드시 사용해야 하는 경우 API는 HTTPS를 통해서만 사용할 수 있는지 확인합니다.
DRF에서 가져오고 기본 인증 클래스로 특정 뷰 또는 settings.py에 추가할 수 있습니다.
그런 다음 API에 요청을 보내고 HTTP 기본 인증 헤더를 포함합니다.
GET https://example.com/api/books/123/
Authorization: Basic myusername mypasswd

토큰 인증


이 방안에서, 당신은 모든 사용자에게 유일한 영패를 주고, 그들은 모든 요청에 그것을 포함한다.이것은 API에 액세스해야 하는 데스크탑이나 모바일 애플리케이션과 같은 클라이언트 서버 애플리케이션에 적용됩니다.영패를 받은 모든 사람이 그것을 사용할 수 있으며, 자신을 사용자로 인증할 수 있음을 주의하십시오.
영패 인증을 실현하려면 rest_framework.authtokenINSTALLED_APPS 파일의 settings.py 목록에 추가해야 합니다.이 응용 프로그램은 데이터베이스에 있는 사용자 영패를 만들고 검증하며 관리하는 것을 책임진다.따라서 데이터베이스에 영패 관리표를 만들 수 있도록 추가 후 이동을 실행해야 합니다.그리고 모든 사용자에게 영패를 만들어서 제공하는 방법을 찾아야 합니다.예를 들어 웹 응용 프로그램에서 로그인한 사용자가 영패를 볼 수 있는 페이지를 만들 수 있다.다음과 같이 사용자를 위한 토큰을 만들 수 있습니다.
# views.py
from rest_framework.authtoken.models import Token

@login_required
def user_token_view(request):
    token = Token.objects.create(user=request.user)
    return render(request, 'myapp/user_token.html', {'token': token.key})
사용자에게 영패가 파괴되었다고 느끼지 않도록 새 영패를 생성하는 방법을 제공해야 합니다.
그런 다음 API에 요청을 보내고 승인된 HTTP 헤더에 토큰을 추가하여 자신을 확인할 수 있습니다.
GET https://example.com/api/books/123/
Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

세션 확인


이 방안은 특히 한 페이지의 응용 프로그램에 적용된다. 사용자가 응용 프로그램에 로그인하여 Django에서 세션을 만들고 응용 프로그램은 서버에 AJAX 요청을 보내서 관련 정보로 페이지를 채운다.
이 프로젝트는 Django의 세션 프레임워크를 기반으로 하기 때문에 INSTALLED_APPS 파일의 settings.py에 포함되어 있는지 확인하십시오.Django 세션에 대한 자세한 정보here를 참조하십시오.
Django는 어떻게 안전하게 제작하는지에 관한 우수한 문서AJAX calls using Django sessions를 제공했다.

OAuth2


OAuth2는 유행하는 신분 검증 기준이다.이것은 사용자 신분 검증과 사용자를 대표하여 제3자 응용에 대한 신분 검증에 지도를 제공했다.Herehere 귀하는 모든 신분 검증'흐름'과 그에 상응하는 용례에 대한 상세한 정보를 읽을 수 있습니다.
기술 표준 사양here을 찾을 수 있습니다.
고맙게도, 너는 스스로 이 거대한 기준을 실현할 필요가 없다.당신은 우수한Django OAuth Toolkit package을 사용할 수 있습니다.그들의 문서에는 using it with DRF에 관한 특정 장절이 하나 더 있다.

JSON 웹 토큰(JWT) 인증


이것은 새로운 유행 표준으로, 그 작업 원리는 영패 신분 검증과 유사하지만, 단지 영패를 데이터베이스에 저장할 필요가 없다.응용 프로그램에서 기밀 서명을 사용하는 JWT를 생성합니다.그리고 영패 인증에서처럼 이 영패를 사용자에게 제공할 수 있습니다.
당신이 기호화폐를 받을 때마다, 당신은 그것을 디코딩하고 서명을 검사합니다.만약 그것이 효과가 있다면, 너는 그것이 왜곡되지 않았다는 것을 안다.이 표시는 사실상 몇몇 성명을 포함하는 json 문자열일 뿐입니다.이 성명들은 사용자 이름, 영패 만료일 등이 될 수 있습니다. 영패에 대한 자세한 정보 here 를 읽을 수 있습니다.
JWT 인증의 경우 Simple JWT 패키지를 사용하여 DRF 인증을 수행할 수 있습니다.

안전에 관한 한마디


이 설명서에서 Django REST 프레임워크에서 가장 많이 사용되는 인증 시나리오를 잘 이해할 수 있기를 바랍니다.보안 측면에서 볼 때 어떤 신분 검증 방안도 완벽하지 않다는 것을 주의하십시오.인증 방안을 선택하기 전에 광범위한 연구가 진행되었고 Django와 DRF 문서에서 제공한 최상의 실천을 항상 따랐는지 확인하십시오.너는 응용 프로그램의 안전에 대해 책임을 져야 할 뿐만 아니라 사용자와 데이터의 안전에도 책임을 져야 한다.

좋은 웹페이지 즐겨찾기