[Access & Refresh] Token 원리

yunji·2023년 5월 13일
0

node js

목록 보기
5/9
post-thumbnail

Access Token & Refresh Token 알아 보기

Access Token & Refresh Token 이 필요한 이유를 알아보기 앞서 JWT 의 장점과 단점을 먼저 알아 보자.

JWT 장점 과 단점

👍 장점

  1. header와 payload를 가지고 singnature을 생성하므로 테이터 위조와 변조를 막을 수 있다.
  2. 인증 정보를 위한 저장 장소가 필요 없다.
  3. JWT는 기본정보와 토큰 검증을 위한 알고리즘을 가지고 있고 서명에 필요한 정보도 자체적으로 가지고 있으므로 사용이 편리하다.
  4. 모바일 어플리케이션 환경에서도 잘 동작한다.

👎 단점

1. 토큰의 길이에 포함대는 정보에는 아래의 3가지 정보들이 key: value 형태로 저장하므로 정보가 많아지면 토큰의 길이가 길어 져서 네트워크의 부하를 가져올 수 있다.

1) Registed claims: 미리정의 된 정보 iss(발행자), exp(expireation: 만료시간) ...
2) public: 사용자가 정의 할 수 있는 정보
3) pivate: 해당 당사자들간의 정보, 공유 되어도 상관은 없지만 사용자를 특정 할 수 있는 정보 (id, account_index...)

2. payload 자체가 암화가 되는 것이 아니여서 payload엔 중요한 정보를 넣으면 안된다.

3.서버의 저장되지 않으므로 토큰 탈취가 생기면 대처를 할 수가 없다.

서버 입장에서는 자신이 발급 해준 토큰을 기준으로 사용자를 구별하므로 만약 토큰이 다른 사용자가 탈취한 토큰으로 접속해도 서버는 자신이 발급해준 사용자가 아님을 구별 할 수 없다.

Access Token & Refresh Token 필요한 이유

Access Token으로만 사용자 인증을 할 경우 토큰의 탈취되는 경우 대처 못한다. 이것을 보안 하기 위해 Access Token & Refresh Token 인증 방법이 필요하다.

Token 탈취를 고려 했을 때 토큰의 유효시간을 적절히 부여 하여 탈취를 방지할 수 있다.

그럼 access token의 기간을 매우 짧게 설정한다면 어떤 장담점이 있을까

👍 장점: access token의 유효기간을 짧게 잡으면 탈취를 당하더라도 유효시간이 지난 토큰은 인증 할 수 없으며 보안이 올라 가는 장점이 있다.

👎 단점: access token의 유효기간이 짧으므로 자주 발급 받아야 하는 불편함이 있다.

사용자의 불편함을 줄이고 토큰 탈취를 막기 위해서 Access Token & Refresh Token의 적절한 시간을 부여 하여 해결 할 수 있다.

🚨 Access Token & Refresh Token 둘다 같은 JWT token이다.🚨
Access Token: 접근 권한을 부여하는 토큰.
Refresh Token: access token 만료시 access token을 재발급 하기 위한 token.

Access & Refresh Token 재발급 원리

1. 기본적으로 로그인 같은 과정을 하면 Access Token과 Refresh Token을 모두 발급한다.

이때, Refresh Token만 서버측의 DB에 저장하며, Refresh Token과 Access Token을 .
쿠키 혹은 웹스토리지에 저장한다

2.사용자가 서버에게 요청을 보낼 시 먼저 토큰을 검사한다.

이때, 토큰을 검사함과 동시에 각 경우에 대해서 토큰의 유효기간을 확인하여 재발급 여부를 결정한다.

📝 재발급 유형

  1. access token과 refresh token 모두가 만료된 경우 → 에러 발생 (재 로그인하여 둘다 새로 발급)
  2. access token은 만료됐지만, refresh token은 유효한 경우 → refresh token을 검증하여 access token 재발급
  3. access token은 유효하지만, refresh token은 만료된 경우 → access token을 검증하여 refresh token 재발급
  4. access token과 refresh token 모두가 유효한 경우 → 정상 처리

3. 로그아웃을 하면 Access Token과 Refresh Token을 모두 만료.

Refresh Token 인증 과정

1. 서버에서 access token을 받고 검증한다.

1) access token이 정상적이라면 요청한 data 보내기
2) access token이 만료 되었다면 사용자에게 refresh token 요청.

2. refresh token을 서버에서 받아서 검증 한다.(이경우는 access token이 완료 된 상태임을 잊지 말기.)

1) refresh token 정상적이라면 디비에 저장한 refresh token과 비교해서 두 토큰이 같은 경우 access token을 사용자에게 발급 한다.

2) refresh token이 만료 되었다면 access token도 만료 되었으므 로 사용자에게 다시 로그인 하도록 한다. 그리하여 access token과 refresh token을 재발급 받도록 한다.

3. refresh token 만료 되고 access token은 유효한 경우-> aceess token 검증 한다.

1) access token이 정상적이라면 refresh token을 재발급 한다. 재발급한 refresh token은 디비에 업데이트 한다.

📖 참고 문헌 📖

링크텍스트
링크텍스트

profile
웹 개발

0개의 댓글