티스토리 뷰

 

Cookie, Session and Django Auth(Authentication)

웹 전반에서 중요한 Auth 인증 개념에 대해 알아보자. 먼저, 인증이 왜 필요할까? 바로 HTTP의 특징 때문이다. HTTP의 특징은 무엇일까? 1. 비연결성 - Connectionless : 기본적으로 클라이언트에서 서버에

ninefloor-design.tistory.com

쿠키, 세션 콘텐츠에서 웹의 비연결성과 무상태성 때문에 상태를 유지하는 쿠키와 세션을 사용한다고 했다.

엄밀히 말하자면 쿠키안에 세션을 넣는거니까 둘다 쿠키방식 스타일이라고 할 수도 있겠다!

 

쿠키와 세션의 단점도 있었다.

쿠키는 중간에 탈취될 수 있고, 세션은 서버측에서 처리하기 때문에 사용자가 많아지면 과부하가 걸릴 수 있다.

 

이러한 단점을 해결하기 위해 나온 방식이 토큰 방식이다.

데이터를 토큰으로 치환하여 원본데이터를 보호하는 방식으로 JWT방식이 있다.

JWT(Json Web Token)

공식홈페이지

Json 포맷을 활용하는 토큰 방식으로 암호화 알고리즘에 의해 치환되어 안전하다. 보안수준 자체가 높다. (해시256 사용)

 

또한 JWT자체가 모든 정보를 가지고 있어 이를 검증하기 위한 다른 수단이 필요 없다는게 큰 장점이다.

즉, 서버에 저장할 필요도, 데이터베이스를 사용할 필요도 없다! 그러니까 과부하가 없고 서버의 자원을 절약할 수 있다.

이는 OAuth도 가지지 못한 장점이다.

 

JWT의 구조는 다음과 같다.

1. Header

2. Payload

3. Signature

 

동작 방식은 다음과 같다.

 

1) 클라이언트에서 로그인 정보(username, password) 를 담아 요청한다. (POST)

2) 서버에서 로그인 정보를 바탕으로 비밀번호를 암호화해 JWT 토큰을 보낸다. (서버에 저장 x)

3) 클라이언트가 JWT를 로컬에 저장한다.

4) 인증할 때마다 클라이언트가 JWT를 함께 보낸다.

5) 서버에서 디코딩하여 유저정보를 확인하고 응답을 보낸다.

 

공식문서 설명도 추가해보았다.

토큰 역시 보안이 중요하다고 한다.

 

'Programming basic' 카테고리의 다른 글

쿠키, 세션 그리고 디장고 인증(Authentication)  (0) 2021.12.14
docstring 작성법  (0) 2021.11.29
HTTP 상태 코드  (0) 2021.10.25
변수 및 식별자 표기법 3가지  (0) 2021.10.20
추상화와 다양한 언어  (0) 2021.10.20
댓글