정의
JSON 객체에 인증에 필요한 정보들을 담은 후 비밀 키로 서명한 토큰, 인터넷 표준 인증 방식
인증(Authentication) & 권한 허가(Authorization) 방식
구조
- header
- alg
- typ
- payload
- 사용자 정보(claim)
- sub, aud, iat, exp
- 사용자 정보(claim)
- signature
- header+payload를 alg과 secret key로 암호화
- signature는 secret key가 있어야 복호화할 수 있고, 이때문에 토큰이 중간에 악의적으로 수정되어도 판별할 수 있음
프로세스
토큰 생성
- 사용자 ---로그인---> 서버
- 서버: 확인 후 secret key로 JWT 생성
- 사용자 <--토큰------- 서버
토큰 이용
사용자는 API 요청할 때마다 서버에 토큰을 동봉,
서버는 그 토큰으로 사용자를 인증하고 맞는 사용자면 응답함
장점
- 토큰 안에 모든 인증에 관한 정보가 다 있어 편리함
- 세션과 달리 서버에 부하도 없고(토큰이 다 담고 있음)
- 쿠키와 달리 보안에 더 유리함(secret key가 있어야 정보를 읽을 수 있고, 토큰이 조작되어도 검증 가능)
Access Token과 Refresh 토큰
로그인을 하면 Access Token과 Refresh Token이 발급됨.
- Access Token
- 평소에 사용자가 http헤더에 보내서 인증하는 용도
- 유효 기간이 짧음
- Refresh Token
- Access Token이 만료되면 보내서 다시 Access Token을 발급받는 용도
- Access Token보다 상대적으로 긺
보안에 유리한 이유
- Access Token이 탈취되면?
- 상대적으로 짧게 만료되기 때문에 괜찮음
- Refresh Token이 탈취되면?
- Refresh Token Rotation으로 보완 가능
- Access Token을 재요청할 때마다 Refresh Token을 새로 발급받도록 함.
- 만료 시간이 길어 보안적으로 불리한 Refresh Token을 보완할 수 있음
- Refresh Token Rotation으로 보완 가능
'CS > web' 카테고리의 다른 글
CSRF, XSS, CORS (0) | 2024.03.12 |
---|---|
CSR (Client Side Rendering) & SSR (Server Side Rendering) (0) | 2024.03.08 |
OAuth (0) | 2024.03.04 |
Web Server와 WAS (0) | 2024.03.01 |
[web] REST, REST API (0) | 2024.02.19 |