해커톤 - JWT

이한결·2023년 1월 17일
2

부트 캠프

목록 보기
16/98
post-thumbnail

1월 17일 여정 9일차이다.
오늘은 일정이 없었지만, 내가 구현한 기능에 대해 공부하려고
한번 기록해본다.

오늘의 Today I Learned

Problem

토큰 기반 인증 방식은 무엇일까? 이전에 세션과 쿠키 방식은 들어보았지만, 토큰 기반 인증 방식은 처음 들었다. 토큰은 유효기간이 짧을텐데 그러면 유효기간이 지나면 계속 다시 로그인을 해야되는건가? 의문점들이 들기 시작했다.

Try

구글에 검색을 시도해보았다. 그렇지만 너무 이해하기가 어려웠다. RFC 7519에 명세가 나와있다 무상태인 환경에서 주고 받는다 등등 너무 복잡했다.

Solve

결과적으로 항해99에서 준 Notion Docs를 얽었다.
내가 이해한 것은 이러하다.

  1. 사용자는 일단 회원가입을 한다.
  2. 회원가입을 한 사용자는 서버로부터 로그인 요청을 보낸다. (POST)
  3. 서버는 DB로부터 사용자 확인을 받게 된다.
  4. 사용자가 확인되면 Access Token(JWT)를 사용자에게 발급해준다. 이때 이 토큰에는 유효기간이 정해진다.
  5. 그러면 사용자는 서버로부터 받은 토큰을 쿠키로 저장해놓는다.
  6. 사용자는 API 요청을 보낼 때마다 토큰으로 회원임을 확인 받는다.

여기에 토큰에는 Header와 Payload 그리고 확인서명(Verify Signature)가 들어간다.
헤더에는 암호화할 방식이 들어간다. Payload에는 데이터 그리고 유저 고유 ID와 유효기간이 들어간다. 확인 서명에는 헤더와 페이로드 그리고 시크릿키를 더한 것이 들어간다.

Knew

사실 유효기간이 있지만 서버에서 그 유효기간을 정할 수 있었다. 그래서 그 부분은 걱정 없었다. 물론 유효기간을 길게 해놓으면 보안에 취약 해진다. 또한 알아본 결과 Payload에는 정보가 암호화 되지 않는다고 한다. 그래서 개인정보가 절대 들어가서는 안된다.

마지막으로

내가 로그인 기능 구현을 담당했지만, 이 복잡한 것을 구현한 내 자신이 너무 자랑스럽다!

profile
평범한 삶을 위하여

0개의 댓글