✔ 공부하면서 중요하다고 생각한 부분
- 토큰은 탈취될 가능성이 있기에 탈취 방지/탈취 당했을 경우를 염두해야 한다!
ex) CSRF 방지 XSS 방지 등
✔ 방법
1. Access Token만 사용할 경우
1) HTTP ONLY 옵션 걸기
2) 토큰발행시 개인을 식별할 수 있는 정보를 암호화 하여 payload에 넣기(IP 혹은 UUID 등)
3) 주기를 짧게 하기
2. Access Token과 Refresh Token 사용하기
1) 로그인을 할경우 Access Token / Refresh Token을 발급하고 저장
2) access token 만료시 refresh token을 이용해 access token 재발급
*이 때, refresh_token도 재발급하면 좋다고 한다.
Q. Refresh Token은 어디다 저장을 해?
1) 쿠키
2) DB
- Mysql에 User정보가 저장된DB에 refresh token저장
- Redis를 이용해 key-value를 유저정보-token정보로 저장
- Redis와 Mysql에 동시 저장 하는 방법도 있다.
Q. AccessToken 재발급은 어떻게 해?
1) 만료 되었을 때 직접 요청을 보낸다.
2) 일정 시간마다 재발급 요청을 자동으로 보낸다.
+번외
카카오톡 같은 경우는 어떻게 토큰을 활용하고 있을까?
https://developers.kakao.com/docs/latest/ko/kakaologin/js#advanced-guide
Q. 그럼에도 토큰을 쓰려는 이유는?
A. 서버의 부하 방지를 위해서
Q. 세션이랑 어떤 차이가 있는지?
A. 내가 생각한 답 : session같은 경우는 API 요청마다 DB 접속을 해야 함 인가 / 인증은 Access Token으로 하되 Refresh Token은 Access Token이 만료되었을 경우에만 DB 접속, 세션보단 상대적으로 부하가 덜 하지 않을까?
'코딩 > expressJs' 카테고리의 다른 글
퍼펫티어와 cheerio 간단하게 익히기 : 스크래핑을 해보자 (0) | 2022.06.29 |
---|---|
express) Cookie와 Session쓰기 (0) | 2022.04.16 |
Sequelize를 적용해보자(진행중) (0) | 2022.04.04 |
Nginx에서 reverse proxy 설정중 문제(해결중) (0) | 2022.03.20 |
expressjs의 mergeParams 사용해보기(매우 간단) (0) | 2022.02.03 |