QueenCards / ProjectAnalysis

플젝뿌셔
1 stars 0 forks source link

[19] JWT , 액세스토큰, 리프레시토큰에 대해서 설명해주세요 #22

Closed hyeyoonS closed 1 month ago

hyeyoonS commented 2 months ago

📎 질문

JWT , 액세스토큰, 리프레시토큰에 대해서 설명해주세요

✏ 구술 답변 키워드

JWT (JSON Web Token)

액세스 토큰 (Access Token)

리프레시 토큰 (Refresh Token)


✏ 서술 답변

✅ 함께 이해하면 좋을 배경지식

-> 매번 로그인할 필요 없이 인가를 해줘야하는데 이때 사용하는 것이 세션 / 토큰

세션은 쿠키에 세션ID를 담아 클라이언트가 서버와 주고 받으며 인가 과정을 진행 -> 서버가 인증 상태를 유지해야 하므로 서버의 부담 존재(Stateful) -> 토큰 방식 등장(Stateless)

1. JWT (JSON Web Token)

JWT는 JSON 객체를 사용하여 클레임을 안전하게 전송하기 위한 컴팩트하고 URL-안전한 토큰입니다. JWT는 주로 사용자 인증 및 정보 교환에 사용됩니다. JWT는 세 부분으로 구성됩니다:

image

JWT의 장점

JWT의 단점


2. 액세스 토큰 (Access Token)

액세스 토큰은 사용자 인증 후 클라이언트가 API에 접근할 수 있도록 허용하는 토큰입니다. 액세스 토큰은 일반적으로 유효 기간이 짧아 짧은 시간 동안만 유효합니다. 이는 보안성을 높이기 위한 조치로, 만료 후에는 새로 발급받아야 합니다.

특징:


3. 리프레시 토큰 (Refresh Token)

리프레시 토큰은 액세스 토큰의 유효 기간이 만료되었을 때, 새 액세스 토큰을 발급받기 위해 사용되는 토큰입니다. 리프레시 토큰은 보통 더 긴 유효 기간을 가지며, 액세스 토큰이 만료되었을 때 서버로부터 새로운 액세스 토큰을 요청할 수 있게 합니다.

특징:

요약

이 세 가지는 보안성과 사용자 경험을 높이기 위해 함께 사용됩니다. 액세스 토큰을 짧게 유지함으로써 보안성을 높이고, 리프레시 토큰을 사용하여 사용자가 재로그인할 필요 없이 지속적으로 서비스를 사용할 수 있도록 합니다.

Nahyun-Kang commented 1 month ago

JWT란?

Access Token

Refresh Token

olseul commented 1 month ago

JWT (JSON Web Token) JWT는 JSON 객체를 사용하여 정보 또는 클레임을 안전하게 전송하기 위한 컴팩트하고 URL 안전한 방식입니다. JWT는 주로 인증 및 정보 교환에 사용됩니다.

액세스 토큰 (Access Token) 액세스 토큰은 사용자가 특정 리소스에 접근할 수 있는 권한을 부여받았음을 증명하는 토큰입니다. 일반적으로 짧은 수명을 가지고 있으며, 주로 API 요청 시 서버에 전송됩니다.

특징 유효 기간: 짧은 유효 기간을 가집니다 (예: 15분, 1시간). 용도: 클라이언트가 보호된 리소스에 접근할 때 서버에 제출됩니다. 보안: 유효 기간이 짧아 노출되어도 피해가 적습니다.

리프레시 토큰 (Refresh Token) 리프레시 토큰은 새로운 액세스 토큰을 발급받기 위해 사용되는 토큰입니다. 유효 기간이 더 길고, 더 높은 보안이 필요합니다.

특징 유효 기간: 긴 유효 기간을 가집니다 (예: 몇 주, 몇 달). 용도: 액세스 토큰이 만료되었을 때, 새로운 액세스 토큰을 얻기 위해 사용됩니다. 보안: 클라이언트 측에서 안전하게 저장되어야 합니다. 일반적으로 서버와 클라이언트 간의 비밀 저장소에 저장됩니다.

예시: JWT 기반 인증 흐름 사용자 로그인: 사용자가 로그인하면, 서버는 사용자의 자격 증명을 확인한 후 JWT 액세스 토큰과 리프레시 토큰을 발급합니다. API 요청: 클라이언트는 보호된 리소스에 접근할 때마다 액세스 토큰을 요청 헤더에 포함하여 서버에 전송합니다. 서버는 액세스 토큰을 검증하고, 유효하면 요청된 리소스를 제공합니다. 토큰 만료: 액세스 토큰이 만료되면, 클라이언트는 저장된 리프레시 토큰을 사용하여 새로운 액세스 토큰을 요청합니다. 서버는 리프레시 토큰을 검증하고, 유효하면 새로운 액세스 토큰을 발급합니다. 로그아웃: 사용자가 로그아웃하면, 서버는 리프레시 토큰을 폐기하여 더 이상 사용할 수 없게 합니다.

장점 보안성: 짧은 수명의 액세스 토큰을 사용하여 보안성을 높입니다. 성능: JWT는 서버의 세션 상태를 저장할 필요가 없어 서버 부하를 줄입니다. 유연성: 다양한 클라이언트(웹, 모바일 등)에서 동일한 방식으로 사용할 수 있습니다. 이와 같은 방식으로 JWT, 액세스 토큰, 리프레시 토큰을 사용하여 안전하고 효율적인 인증 시스템을 구현할 수 있습니다.

hyeyoonS commented 1 month ago

🤔JWT가 뭐지?

JWT는 토큰의 형식 중 하나입니다. 토큰 기반 인증 시스템에서 활용됩니다.

JWT와 토큰 기반 인증 어떻게 활용하지?

  1. 사용자 인증: 로그인 시 JWT를 생성하여 클라이언트에 제공

    ⇒ 이 JWT를 액세스토큰으로 사용합니다.

  2. API 요청 시 인증: 클라이언트가 보호된 리소스(ex. 미들웨어)에 접근할 때 JWT(액세스토큰) 를 사용하여 인증

  3. JWT액세스 토큰이 만료된 경우: JWT리프레시 토큰 검증

    ⇒JTW리프레시 토큰을 사용하여 새로운 JWT액세스 토큰을 요청합니다.

    ⇒이 때 액세스토큰만 만료되고 리프레시토큰은 만료되지 않았다면, 리프레시 토큰을 이용해서 새로운 액세스토큰을 발급합니다. (로그인 유지)

  4. 리프레시 토큰이 만료된 경우: 리프레시 토큰을 무효화하여 토큰의 재사용을 방지합니다. 사용자는 새로 사용자 인증을 해야합니다. (로그아웃)

HaydenDevK commented 1 month ago

JWT

개요

장점

단점

wise-Ag commented 1 month ago

JWT

JWT는 Json Web Token의 약자로 일반적으로 클라이언트와 서버 사이에서 통신할 때 권한을 위해 사용하는 토큰입니다. Json형태로 생성한 암호화된 토큰으로, 복잡하고 읽을 수 없는 string 형태로 저장되어있습니다. JSON은 Key, Value가 한 쌍을 이루는 객체를 말합니다. 사용자에 대한 정보를 저장하고 있는 Claim 기반의 토큰입니다. Claim기반이란 사용자 정보를 토큰에 담고 있는 방식으로, 기존 session 인증 방식에서는 session id를 서버에 저장하고 검토하는 방식이었다면 Claim 방식은 토큰에 사용자 정보를 담고 있기 때문에 서버자원을 사용할 필요가 없습니다.

JWT는 헤더(header), 페이로드(payload), 서명(signature) 세 파트로 나눠져 있습니다.

스크린샷 2024-05-22 오후 12 05 47

jwt 토큰이 탈취당했을 때 취약점을 개선하기 위해 accessToken, refreshToken 을 두어 피해를 최소화할 수 있습니다.

엑세스 토큰

api 통신할 때 인증을 위한 짧은 유효기간의 토큰

리프레시 토큰

엑세스 토큰이 만료되었을 시 새롭게 발급하기 위한 토큰

Eugene-A-01 commented 1 month ago

JWT (Json Web Token)이란, 웹통신에서 권한을 위해 사용하는 JSON형태의 암호화된 토큰이다. 주로 사용자의 신원과 권한 정보를 서버와 클라이언트가 주고 받기위해 사용한다.

JWT는

이런 JWT는

그래서 토큰의 유효기간을 두어 탈취 위험을 줄이고자 하였지만, 유효기간이 너무 짧다면 사용자로 하여금 잦은 로그인을 하게 하므로 불편해지고, 유효기간이 길다면 탈취위험이 높아진다는 점이 있다. 이걸 해결하기 위해 사용되는 것이 유효기간이 다른 두 JWT 토큰인 AccessToken과 Refresh Token이다.

액세스토큰의 유효기간이 더 짧고 리프레시토큰의 유효기간이 더 길다. API 통신을 할때는 액세스 토큰을 사용하고, 액세스 토큰이 만료되어 이를 갱신할때에 리프레시토큰을 사용한다.

구체적인 동작은 다음과 같다.

  1. 클라이언트의 로그인 성공 -> 서버에서 액세스토큰+리프레시토큰 발급받아 로컬에 저장함.
  2. 클라이언트는 이후 API 통신에 액세스토큰을 헤더에 넣어 통신
  3. 시간 지나 액세스토큰 만료 -> 만료된 액세스토큰을 이용해 보낸 요청에 대한 응답으로 401(Unauthorized)를 받음
  4. 헤더에 리프레시토큰을 대신 넣어 API 재요청
  5. 서버는 응답쿼리 헤더에 새로운 액세스토큰을 넣어 응답함.
  6. 만약 리프레시 토큰도 만료된 상태였다면 한 번 더 401에러. 클라이언트는 다시 로그인을 해야함.

액세스 토큰이 탈취된다면? JWT의 서명때문에 토큰 만료일은 악의적으로 변경할 수 없음. 짧은 생명을 가지는 액세스토큰은 탈취되더라도 얼마 사용하지 못하거나 이미 만료되어 금방 다시 탈취를 시도해야함.

리프레시 토큰이 탈취된다면? 통신이 빈번하지 않아 탈취 위험 가능성 자체가 낮음. 하지만 만료기간이 긴 리프레쉬 토큰이 탈취당하면 위험. 그래서 액세스토큰 만료되어 재요청할때마다 리프레쉬 토큰도 재발급 받는 Refresh Token Rotation 방법을 도입하여 만료기간을 줄이기도 함.