session 방식
서버가 메모리에 만들어 둔 세션 정보를 클라이언트에게 줌
세션 정보를 메모리에 저장하기 때문에 사용자가 많이짐에 따라 리소스가 소요된다.
session은 서버의 메모리에 저장되어 여러 유저가 요청 시 메모리 부하가 발생할 수 있다. 그래서 클라이언트에 서명정보를 가져 서버의 부하를 줄이고 병목현상을 해결하기 위해
Refresh Token 도입 이유
access token 완료되었을 때 재발급해주는 프로세스가 어렵고, 만료시간을 지정할 수 있지만 길게하면 보안상 위험이 있고 짧게하자니 로그인량이 많아져 DB접속이 늘어나기 때문에 refresh token을 적용하여 access token을 짧게하고 refhesh token을 길게하여 DB접근을 최소화하기 위해 사용되었다.
JWT
보완 이슈가 발생할 수 있는 4가지 주의할 점!!
1. alg: none 공격
- Headers
의 alg
에는 "none"을 작성하면 안됨
- 최신 라이브러리는 위 공격을 방어해 줌
2. JWT는 변환이 매우 쉬기 때문에 민감한 사용자 정보를 넣으면 안된다.
3. 시크릿키는 brute-force attack (무차별 대입 공격)으로 뚫릴 수 있다.
- 키를 매우 길게 만들거나
- 생성용키와 검증용키를 분리하여 2개로 사용해야 한다.
4. Access Token을 탈취 당하면 큰 보안 문제가 발생하기 때문에 Refresh Token을 도입하고 Access Token은 짧은 단위의 유효시간을 설정해야 한다.
JWT(Access Token)과 Refresh Token의 흐름
Token value란?
- Token Value (토큰 값):
토큰의 실제 값 또는 내용을 나타냅니다. 예를 들어, 액세스 토큰의 값은 특정 권한을 나타내고, 리프레시 토큰의 값은 새로운 액세스 토큰을 발급받을 수 있는 권한을 나타냅니다. 이 값은 주로 문자열 형태로 표현됩니다.- Token (토큰):
토큰은 일반적으로 특정한 규칙에 따라 생성된 문자열로, 시스템 간에 정보를 전달하거나 인증을 수행하기 위해 사용됩니다. 이것은 단순히 "값"이 아니라, 보안 및 권한과 같은 컨텍스트를 나타내는 특정 종류의 식별자를 가리킵니다.
(by chatGPT)