python/django

[DRF] Authentication 종류와 특징

Timha 2023. 9. 6. 14:22

1.BasicAuthentication
기본인증. username 및 password에 대해 서명된 HTTP 기본 인증을 사용한다. 매번 유저 정보(이름,비번)를 넘겨야하기 때문에 보안상 위험하다. 테스트 용으로 사용하기엔 용이하지만 실제 인증으로 사용하기엔 부적절

 

 

 

2.TokenAuthentication
토큰인증. 간단한 토큰 기반 HTTP 인증 체계를 사용한다. 기본 데스크톱 및 모바일 클라이언트와 같은 client-server 관계에 적합하다.   토큰 헤더를 사용하여 인증한다 .

Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
  • 유저가 로그인을 요청하고 id, pw 정보가 유효하다면 서버에서 Secret Key를 사용해서 유저에게 토큰을 발급한다.
  • 클라이언트는 발급 받은 토큰을 저장하고, 서버에서 요청 할 때 마다, 해당 토큰을 함께 서버에 전달한다.
  • 서버는 토큰을 검증 하고, 요청에 응답한다.

 

 장점

  • 클라이언트에 토큰이 저장되어 있기 때문에 서버의 메모리에 부담이 되지 않으며 Scale에 있어 대비책을 고려할 필요가 없다.
  • 멀티 디바이스 환경에 대한 부담이 없다. (어느 디바이스던 토큰이 올바르다면 토큰인증을 통해 인증 가능)

 단점

  • 암호화가 풀릴 가능성을 배제할 수 없다.
    => 암호화가 풀리더라도 토큰을 사용할 수 없도록 만료기간을 설정해준다.

 

3.SessionAuthentication
세션 인증. Session에 저장되는 정보를 통해 인증한다. 외부 서비스서는 사용할 수 없고, 웹 사이트와 동일한 session context에서 실행 중인 AJAX 클라이언트에 적합하다.

  • 유저가 로그인을 하면 서버 메모리 상에 세션이 저장된다.
    (이 때 세션을 구분하기 위해 Seesion Id를 기준으로 정보를 저장한다.)
  • 클라이언트의 브라우저에 쿠키로 Session Id가 저장된다
  • 쿠키에 정보가 담겨있기 때문에 브라우저는 해당 사이트에 대한 모든 Request에 Session Id를 쿠키에 담아 전송한다.
  • 서버는 클라이언트가 보낸 Session Id와 서버 메모리를 관리하고 있는 Session Id를 비교해서 일치하면 인증