DRF Auth System

윤동훈·2023년 5월 15일
0

[Authentication & Authorization]

Authentication - 인증, 입증

  • 자신이라고 주장하는 사용자가 누구인지 확인하는 행위
  • 모든 보안 프로세스의 첫 번째 단계(가장 기본 요소)
  • 즉, 내가 누구인지를 확인하는 과정
  • 401 Unauthorized
    • 비록 HTTP 표준에서는 "미승인(unauthorized)"을 명확히 하고 있지만, 의미상 이 응답은 "비인증(unauthenticated)"을 의미

Authorization - 권한 부여, 허가

  • 사용자에게 특정 리소스 또는 기능에 대한 액세스 권한을 부여하는 과정(절차)
  • 보안 환경에서 권한 부여는 항상 인증이 먼저 필요함
    • 사용자는 조직에 대한 액세스 권한을 부여받기 전에 먼저 자신의 ID가 진짜인지 먼저 확인해야 함
  • 서류의 등급, 웹페이지에서 글을 조회 & 삭제 & 수정 할 수 있는 방법, 제한 구역
    • 인증이 되었어도 모든 권한을 부여 받는 것은 아님
  • 403 Forbidden
    • 401과 다른 점은 서버는 클라이언트가 누구인지 알고 있음

Authentication and Authorization work together

  • 회원가입 후, 로그인 시 서비스를 이용할 수 있는 권한 생성
    • 인증 이후에 권한이 따라오는 경우가 많음
  • 단 모든 인증을 거쳐도 권한이 동일하게 부여되는 것은 아님
    • Django에서 로그인을 했더라도 다른 사람의 글까지 수정/삭제가 가능하진 않음
  • 세션, 토큰, 제 3자를 활용하는 등의 다양한 인증 방식이 존재

[Authentication determined]

다양한 인증 방식

  • BasicAuthentication
    • 가장 기본적인 수준의 인증 방식
    • 테스트에 적합
  • SessionAuthentication
    • Django에서 사용하였던 session 기반의 인증 시스템
    • DRF와 Django의 session 인증 방식은 보안적 측면을 구성하는 방법에 차이가 있음
  • RemoteUserAuthentication
    • Django의 Remote user 방식을 사용할 때 활용하는 인증 방식
  • TokenAuthentication
    • 매우 간단하게 구현할 수 있음
    • 기본적인 보안 기능 제공
    • 다양한 외부 패키지가 있음

[중요!] settings.py에서 DEFAULT_AUTHENTICATION_CLASSES를 정의

  • TokenAuthentication 인증 방식을 사용할 것임을 명시

[TokenAuthentication 사용 방법]

  • settings.py > INSTALLED_APPS에 rest_framework.authtoken 등록

  • 각 User 마다 고유 Token 생성

  • 생성한 Token을 각 User에게 발급
    • User는 발급 받은 Token을 요청과 함께 전송
    • Token을 통해 User 인증 및 권한 확인
  • Token 발급 방법

  • User는 발급 받은 Token을 headers에 담아 요청과 함께 전송
    • 단, 반드시 Token 문자열 함께 삽입
    • 삽입해야할 문자열은 각 인증 방식마다 다름(ex. Bearer, Auth, JWT 등)
    • Token 문자열과 발급받은 실제 token 사이를 ' '(공백)으로 구분
  • Authorization HTTP headers 작성 방법

토큰 생성 및 관리 문제점

  • 기본 제공 방식에서 고려하여야 할 사항들
  1. Token 생성 시점
  2. 생성한 Token 관리 방법
  3. User와 관련된 각종 기능 관리 방법
    • 회원가입, 로그인, 회원 정보 수정, 비밀번호 변경 등..

[dj-rest-auth]

  • 회원가입, 인증(소셜미디어 인증 포함), 비밀번호 재설정, 사용자 세부 정보 검색, 회원 정보 수정 등을 위한 REST API end point 제공
  • django-rest-auth는 더 이상 업데이트를 지원하지 않음 ==> dj-rest-auth 사용

[dj-rest-auth] 사용 방법

  1. 패키지 설치
$ pip install 'dj-rest-auth[with_social]'

2.App 등록

  • settings.py > INSTALLED_APPS에 'dj-rest-auth' 등록
  1. url 등록

[before start]

  • 시작하기 전 auth.User를 accounts.User로 변경 필요
    • settings.py > AUTH_USER_MODEL = 'accounts.User'
  • auth.User로 설정된 DB제거
  • dq.sqlite3 삭제
  • migrations의 파일들 삭제

  • my_api/settings.py에 추가
  • App 등록 및 SITE_ID 설정

[SITE_ID]

  • Django는 하나의 컨텐츠를 기반으로 여러 도메인에 컨텐츠를 게시 가능하도록 설계됨
  • 다수의 도메인이 하나의 데이터베이스에 등록
  • 현재 프로젝트가 첫번째 사이트임을 나타냄

0개의 댓글