본문 바로가기
Project

[Project] Agile 시스템 구축 - JWT 토큰을 이용하여 로그인 상태 관리

by Sir교수 2023. 4. 21.
728x90

지난 2주간 Redux-persist를 이용하여

jwt token을 받고 로그인 상태관리를 하기위해 

많은 시간을 사용하였습니다.

아직까지도 이해가 완전히 되지는 않았지만 

글을 쓰면서 내가 작성한 코드도 리뷰하고

지금까지 찾아보고 공부한

로그인 인증 관련 지식을 

정리해 기록하려고 합니다.


JWT(JSON Web Token) 인증은 무엇일까?

JWT은 JSON 객체를 사용하여 가볍고 self-contained 방식으로정보를 안전성 있게 전달해줍니다.

 

인증 유지란?

사용자가 한 번 로그인 한 후

특정 시간 내 까지는

사용자의 로그인 상태를 유지하는 것

 

인증 유지 방식

대부분 서버는 접속 시 로그인 과정을 통해

로그인 된 사용자를 유일하게 식별할 수 있는 인증 키 등을 

발급하고, 이러한 키 정보를 이용해 계속 요청을

보내는 방식을 사용합니다. 

 

토큰 기반 시스템의 작동 원리 

1. 아이디와 비밀번호로 로그인

2. 서버측에서 해당 아이디와 비밀번호 검증

3. 계정정보가 일치하면, 서버측에서 유저에게 토큰을 발급

4. 클라이언트 측에서 전달받은 토큰 저장 후 

서버에 요청 할 때 마다 해당 토큰을 함께 서버에 전달

5. 서버는 토큰을 검증하고, 요청에 응답한다. 

 

 

// 사진 넣기 //

 

JWT 방식

서버에 세션 정보를 저장하지 않고,

로그인 시 서버는 클라이언트에게

로그인 사용자 정보가 포함된 토큰을 발행

클라이언트는 서버에서 어떤 작업을 요청할 때 마다 이 토큰을 

같이 보내고, 서버는 이 토큰에 포함된 사용자 정보를 이용해

서버에 저장된(메모리 등) 인증 정보에 있는지 여부(authentication)

어떤 사용자의 요청(authorization) 을 처리하는 방식입니다. 

(= 인증된 값을 계속 제공한다고 볼 수 있다!)

 

JWT의 구조

JWT는 .을 구분자로 3가지의 문자열로 되어있다. 

// 사진 넣기 // 

Header 

Header는 두 가지의 정보(typ,alg)를 지닌다.

typ: 토큰의 타입을 지정 -> JWT

alg: 해싱 알고리즘을 지정

{
  "typ": "JWT",
  "alg": "HS256"
}

 

Access Token, Refresh Token

Access Token과 Refresh Token은

인증(Authentication)과 관련된 개념입니다.

 

Access Token은 사용자가 서비스에 로그인하면 발급되는 토큰이고,

보통 일정 기간 동안 유효합니다.

Access Token은 서버에 요청을 보낼 때마다 함께 전달되며,

서버는 이를 통해 해당 사용자가 인증되었는지 확인합니다.

Access Token은 인증된 사용자를 식별하고, 

사용자가 요청한 서비스에 접근할 수 있는 권한을 부여합니다.

그러나

Access Token은 일정 기간이 지나면 만료됩니다.

-> 따라서 Refresh Token이 필요!!

 

Refresh Token은 Access Token이 만료된 경우에 

새로운 Access Token을 발급받을 수 있는 권한을 부여하는 토큰입니다.

Refresh Token은 Access Token과는 달리 보안성이 더 높은 장기간 유효한 토큰으로, 

보통 Access Token보다 더 긴 유효기간을 가지고 있습니다.

 


사용자는 Access Token이 만료되면 Refresh Token을 사용하여

새로운 Access Token을 발급받아야 합니다.

이를 통해 사용자는 로그인 과정을 반복하지 않고도

계속해서 서비스를 이용할 수 있습니다.

 

 

 

 

 

 

 

728x90