내일배움캠프

230707 jwt 토큰을 통한 인증

Neda 2023. 7. 7. 15:48

230707 jwt 토큰을 통한 인증

 

토큰을 사용한 인증

  1. 클라이언트는 아이디와 패스워드 정보를 통해 서버로 인증 요청
  2. 인증 정보를 검증하고 유효한 사용자인 경우 액세스 토큰, 리프레쉬 토큰(선택 사항)을 함께 발급
  3. 클라이언트가 보호받는 리소스에 접근하고 싶다면 서버에게 액세스 토큰과 함께 요청
  4. 서버는 유효한 액세스 토큰인지 검증하고 유효한 경우 리소스를 응답
  5. 액세스 토큰의 유효성 검사에 실패 시 리프레쉬 토큰이 있다면 이를 통해 액세스 토큰 재발급
  6. 리프레쉬 토큰이 없다면 로그아웃 함으로써 다시 로그인하여 액세스 토큰을 발급받을 수 있도록 조치

 

액세스 토큰

액세스 토큰은 주어진 권한 내에서 리소스에 접근할 수 있다.

유효 기간이 없다면 다시 회수할 방법이 없으므로 토큰 발급 시 유효 기간 설정은 필수이다

 

리프레쉬 토큰

액세스 토큰은 유효 기간이 있고, 유효 기간이 지나면 권한을 잃는다.

따라서 액세스 토큰을 재발급하여 다시 권한을 얻어야 한다.

그렇지 않으면  재로그인을 통해 액세스 토큰 받아야 한다.

 

토큰의 보안, 저장 위치

 토큰을 LocalStorage에 저장할지, Cookies에 저장할지 싸우는 글이 굉장히 많다

일반적으로 쿠키는 httpOnly, SameSite, secure 등 추가적인 속성을 통하여 보안성을 비교적(?) 높일 수 있다.

하지만 쿠키는 매 요청 시마다 헤더에 함께 넣어 보내지는데, 이것도 낭비라면 낭비라고 할 수 있다

둘의 가장 큰 차이 중 하나느 쿠키는 서버에서 설정하여 응답으로 보낼 수 있고,

로컬 스토리지는 응답을 받아서 직접 브라우저에 넣어야 한다

다만 http 환경에서 둘 중 무엇을 쓰든 위험에 노출되어 있는 것은 똑같다.

일단 https부터 사용하자

또한 state를 통해 내가 보낸 응답이 맞는지 확인하고

client_id, client_secret를 통해 클라이언트 인증을 수행할 수 있다