01. Access Token
- Access Token?
==> 사용자의 권한이 확인되었을 경우 해당 사용자를 인증하는 용도로 발급
==> 예시로 Expires 기간이 지날 때 인증이 만료되게 하는 JWT Token도 Access Token이 있다.
==> Token을 생성할 때 사용한 비밀키 (Secret Key)를 가지고 인증한다. 복잡한 설계없이 코드를 구현할 수 있고, 여러 분기를 거치지 않아도 된다는 장점이 있다.
==> Stateless(무상태), Node.js 서버가 죽었다 살아나더라도 동일한 동작을 하는 방식. 즉, JWT를 이용해 사용자의 인증 여부는 확인할 수 있지만 처음 발급한 사용자 본인인지 확인할 수 없다는 단점이 있다.
==> 다시 말하면 Access Token은 그 자체로도 사용자를 인증하는 모든 정보를 가지고 있다. 따라서 토큰을 가지고 있는 시간이 늘어날 수록 탈취도었을 때는 피해가 더욱 커지게 된다.
==> 토큰이 탈취도었다고 인지하더라도 해당 토큰이 탈취된 토큰인지 알 수 없다. 고의적으로 만료를 시킬 수도 없다. 따라서 피해를 최소화 할 수 있는 방향으로 개발을 진행해야 한다.
02. Refresh Token
- Refresh Token ?
==> Access Token처럼 해당하는 사용자의 모든 인증 정보를 관리하는 것이 아닌, 특정한 사용자가 Access Token을 발급받기 위한 용도로만 사용
==> Access Token을 Refresh Token을 거쳐서 발급하는 이유는 사용자에게 발급한 Token이 탈취당할 경우 피해를 최소화하기 위해서 사용된다.
==> OTP와 같이 짧은 시간 내에서만 인증 정보를 사용할 수 있게하고, 주기적으로 재발급하여 토큰이 유출되더라도 오랜 기간동안 피해를 입는 것이 아닌, 짧은 기간동안만 사용가능하도록 하여 피해를 최소화할 수 있다.
==> 탈취를 막는 것이 어렵다면 탈취된 토큰자체를 사용할 수 있는 기간을 줄여서 피해를 막는 것.
- Access Token vs Refresh Token
==> 모든 것에서 강점을 가지는 기술은 존재하지 않는다. 따라서 새로운 기술을 도입할 때 현재 상황에 가장 알맞는 최선의 선택을 하는 것이 중요하다.
==> 프로젝트를 빠르게 구현할 때는 Access Token으로 인증을 최소화 하는 것이 좋으며 보안성을 중요시 여긴다 생각하면 Refresh Token을 사용하는 것이 좋다.
'JavaScript Dev. > Node.js' 카테고리의 다른 글
AWS EC2를 이용해 HTTPS 배포 (feat. 가비아) (2) | 2023.06.02 |
---|---|
Layered Architecture Pattern (0) | 2023.05.19 |
Socket.io 란? (0) | 2023.05.08 |
Prettier 란? (0) | 2023.05.08 |
sequelize (0) | 2023.05.06 |