**인증(Authentication)**은 요청을 한 사용자 또는 서명을 한 토큰 같은 들어오는 식별 증명 세트 요청과 연결하는 매커니즘이다. 위 절차가 끝나면 허가와 쓰로틀링 규정들은 이러한 자격 증명을 사용해서 요청을 허용해야만 하는지 결정할 수 있다.
Authentication은 허가와 쓰로틀링이 발생하기 전과, 어떤 코드라도 작동되기 전에, view가 시작될 때 항상 작동된다(DEFAULT_ATUHENTICATION_CLASSES로 설정하면 매번 토큰 기반의 인증이 필요한 것이 바로 이 것 때문).
request.user
속성은 일반적으로 contrib.auth
패키지의 user
클래스 인스턴스로 설정된다.request.auth
속성은 추가 인증 정보에 사용된다. 예를 들면, 요청을 서명한 인증 토큰을 나타내는 상황에 사용할 수 있다.인증 체계는 간단한 토큰 기반의 HTTP 인증 체계를 사용한다. 토큰 인증은 네이티브 데스크탑이나 모바일 클라이언트 같은 클라이언트 서버 셋업에 적합하다.
인증 체계는 항상 클래스들의 리스트로 정의된다. REST framework는 리스트 안의 각 클래스를 인증하기 위해 시도하고, 성공적으로 인증된 첫 번째 클래스의 리턴 값을 사용하여 request.user
와 request.auth
설정한다.
어떤 클래스도 인증되지 않았다면, request.user
는 django.contrib.auth.models.AnonymousUser
의 인스턴스로 설정되고, request.auth
는 None
으로 설정된다.
request.user
와 request.auth
의 인증되지 않은 요청 값은 UNAUTHENTICATED_USER
, 그리고 UNAUTHENTICATED_TOKEN
설정을 사용해 수정될 수 있다.
INSTALLED_APPS
에 rest_framework.authtoken
을 추가하고 migrate 해주면 테이블을 생성한다.
class Token(models.Model):
"""
The default authorization token model.
"""
key = models.CharField(_("Key"), max_length=40, primary_key=True)
user = models.OneToOneField(
settings.AUTH_USER_MODEL, related_name='auth_token',
on_delete=models.CASCADE, verbose_name=_("User")
)
created = models.DateTimeField(_("Created"), auto_now_add=True)