참고
[1] https://mangkyu.tistory.com/55
[2] https://mangkyu.tistory.com/56
인증이란?
'로그인'을 하는 상황을 새각해보자. 즉 우리가 특정 사이트에 접속하는 상황을 생각해보자.
우리가 서버측에 요청을 보낸다면, 서버는 우리가 누구인지 알아내야 할 것이고, 이 시도가 유효한지 또한 확인해야 할 것이다.
인증의 종류 : 세션 기반 방식 vs 토큰 기반 방식
세션 기반 방식
세션 기반 방식은, 서버 측에서 사용자의 정보를 기억해 두는 방식이다. 클라이언트에서, 로그인을 요청하면 서버에서는 이에 대해 세션을 생성 및 유지하고, 응답하게 된다. 중요한 부분은 이러한 정보를 저장하고, 유지해야 한다는 점이다. 즉, 사용자가 늘어날수록 서버에 부하가 걸리게 되는 문제가 발생한다.
토큰 기반 방식
토큰 기반 방식은, 인증 받은 사용자들에게 토큰을 발급한다. 이 토큰은 로그인 요청시에 서버에 같이 보내게 된다. 토큰의 유효성 검사를 토대로, 인증을 내려주게 된다. 이렇게 하면, 인증 정보를 서버나 세션에 유지할 필요가 없다.
특히, 토큰은 서버가 아닌 클라이언트에 저장이 되기에 확장에 매우 용이해진다.
JWT란?
대표적인 토큰 기반 인증 방식인 JWT(Json Web Token)에 대해 알아보자.
JWT는 이름에서 알 수 있듯이, 정보 수신/송신자 간에 정보를 JSON 객체로 전송하게 된다.
JWT는 토큰, 그 자체를 정보로 사용하게 될 것이다.
JWT의 로직
어플이 실행되면, JWT의 저장 여부를 확인한다. 클라이언트에서는 JWT의 허가 여부를 검사한다.
로그아웃 시에는, 로컬 스토리지에 저장된 JWT 데이터를 제거하게 된다.
JWT의 구조
JWT는 Header, Payload, Signature의 3개의 부분으로 구성되어 있다.
(1) Header : 암호화 방식과 토큰의 타입을 지정
(2) Payload : 토큰에서 사용할 정보들의 조각(Claim)이 담겨 있다.
(3) Signature : 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유 암호 코드이다.
* Payload의 구조
- Registered Claim : 토큰 정보의 표현. (key는 모두 길이 3의 string)
EX) 발급자, 제목, 대상자, 만료시간, 활성 날짜, 발급 시간, 식별자 등
- Public Claim : 공개용 정보를 위해 사용, 충돌 방지를 위해 URI 포맷 활용
- Private Claim : 서버와 클라이언트 사이에 임의로 지정한 정보를 저장.
주의사항
(1) 토큰 자체에 정보를 담고 있기에, 토큰에 대한 관리가 중요하다.
(2) JWT는 상태를 저장하지 않는다. 따라서 토큰 만료 시간을 반드시 적어줘야 한다.
(3) Payload 자체, 이것이 디코딩이 되면 난리가 날 것이다. 중요 데이터를 넣지 않던가, 암호화해야 한다.
이제, 대략 뭐하는 건지 알았으니 다음에는 이를 Django로 구현하는 방법을 알아보자...
'Archive > TIL' 카테고리의 다른 글
[TIL] 0313_ Python으로 request get/post하기 (0) | 2022.03.13 |
---|---|
[TIL] python으로 jwt 구현하기 (0) | 2022.02.15 |
[TIL] 220119 O 면접 후기 (0) | 2022.01.19 |
[TIL] 220118 면접 오답노트 정리 (0) | 2022.01.18 |
[TIL] Y 1차 면접 후기 (0) | 2022.01.18 |