JWT는 편의성과 보안을위해 2가지의 토큰을 가진다.
- Access Token
- Refresh Token
위의 내용에 대해 좀더 자세한 내용으로는
JWT 토큰은 유저의 신원 및 권한을 결정하는 정보를 가지고 있는 데이터 조각이다.
JWT 토큰의 인증방식은 비밀키(개인키 or 대칭키)로 암호화 되어 있기 때문에 클라이언트와 서버는 안전하게 통신한다.
BUT
탈취 당한경우 문제가 발생한다고 한다
JWT 토큰을 탈취한 사람은 마치 신뢰할 사람으로 인증을 통과할 수 있기때문
심지어 본주인과 탈취한 사람인지에 대한 것을 서버는 구분할 수 없기 때문에 유효기간을 두는것이다.
유효기간이 짧은 경우 사용자가 로그인을 자주해야하므로 불편하고,
유효기간을 길게한 경우 탈취위험 노출이 크다.
그래서 해결 방법인 토큰 2가지 (Access Token 과 Refresh Token)을 두는 것이라고 한다.
우선 핵심만 먼저 이야기하자면
Access Token의 expiration(토큰만료시간)을 짧게 설정하고, Refresh Token의 expiration(토큰만료시간)을 길게 설정한다.
이렇게 하면 사용자의 편의성과 보안성이 증가한다.
토큰 관리방법
- 로그인요청 후 정보를 비교하여 사용자로 확인된다면 Refresh Token을 발급하여 후 RefreshToken을 이용해 Access Token을 발급한다.
- Access Token의 만료 시 Refresh Token을 비교후 일치 시 access token을 발급한다.
- 클라이언트는 헤더(header)에 Access Toekn은 넣고 API 통신을 진행한다. (Authorization)
- 서버의 경우 Refresh Token을 저장하고 있는다.
- Refresh Token의 만료가 된경우 재로그인을 하도록 조치한다.
Access Token과 Refresh Token을 이용한 인증 절차
1. Access Token 전송 시 만료 시간에 의한 실패의 경우 Refresh Token을 체크한다.
2. Refresh Token이 일치 한 경우 Access Token을 자동으로 발급하여 새로운 만료시간을 갖는다. (사용자는 로그아웃 X)
= Access Token가 탈취 된 경우 만료시간이 짧아 보안성이 좋음
= Refresh Token의 경우 위험
Refresh Token
저장위치 : 서버 즉 DB에 저장
→ Local Storage와 Cookie 보다 보안성이 좋음
토큰이 저장된 DB의 인뎃스 값을 Local Stoage나 Cookie에 저장
-> 인덱스 값을 hash 처리해서 보관 시 더욱 우수한 보안을 가질 수 있음. => DB는 Refrsh Token을 보관하는 곳을 HashMap, HashTable로 구현하게됨
'jwt' 카테고리의 다른 글
1. Jwt 개념정리 (0) | 2024.01.06 |
---|