DRF TokenAuthentication


**인증(Authentication)**은 요청을 한 사용자 또는 서명을 한 토큰 같은 들어오는 식별 증명 세트 요청과 연결하는 매커니즘이다. 위 절차가 끝나면 허가와 쓰로틀링 규정들은 이러한 자격 증명을 사용해서 요청을 허용해야만 하는지 결정할 수 있다.

Authentication은 허가와 쓰로틀링이 발생하기 전과, 어떤 코드라도 작동되기 전에, view가 시작될 때 항상 작동된다(DEFAULT_ATUHENTICATION_CLASSES로 설정하면 매번 토큰 기반의 인증이 필요한 것이 바로 이 것 때문).

인증 체계는 간단한 토큰 기반의 HTTP 인증 체계를 사용한다. 토큰 인증은 네이티브 데스크탑이나 모바일 클라이언트 같은 클라이언트 서버 셋업에 적합하다.

How authentication is determined


인증 체계는 항상 클래스들의 리스트로 정의된다. REST framework는 리스트 안의 각 클래스를 인증하기 위해 시도하고, 성공적으로 인증된 첫 번째 클래스의 리턴 값을 사용하여 request.userrequest.auth 설정한다.

어떤 클래스도 인증되지 않았다면, request.userdjango.contrib.auth.models.AnonymousUser의 인스턴스로 설정되고, request.authNone으로 설정된다.

request.userrequest.auth의 인증되지 않은 요청 값은 UNAUTHENTICATED_USER, 그리고 UNAUTHENTICATED_TOKEN 설정을 사용해 수정될 수 있다.

authtoken_token


INSTALLED_APPSrest_framework.authtoken을 추가하고 migrate 해주면 테이블을 생성한다.

authtoken_token

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)