1. jwt는 서버에 저장된 SecretKey를 알지 못하면 decode가 안된다 하였다.
근데 왜 탈취 당하는가?
2. jwt 보안 강화
2-1) Refresh token 사용
1. 토큰 생성시 access token과 refresh token을 생성
* access token의 유효기간은 짧게(ex_1시간), refresh token의 유효기간은 적당히(ex_2주)
2. access token은 응답헤더에 실어보내고 refresh token은 디비에 해당 사용자의 데이터와 함께 저장
3. 서버에서 클라이언트의 요청을 받고 access token을 확인했을 때 해당 토큰이 만료되었다면 클라이언트단에 access token이 만료되었음을 알림
4. 만료 통보를 받은 클라이언트 단에서 access token과 refresh token을 함께 서버로 보냄
5. 서버는 클라이언트에게 받은 access token이 위조되었는지 확인(VERIFY SIGNATURE) 후 refresh token을 이용해 디비 조회(토큰 생성시 설정한 유효기간 확인)를 하고 새로 발급한 access token을 헤더에 실어 반환.
* refresh token은 access token을 새로 발급하는 기능 외에 다른 기능이 존재하지 않는다.
** 공격자가 header나 payload중 임의로 값 하나를 변환했다면 signature 부분이 바뀌어서 JWT 유효성 검사를 할때 통과를 못한다.
*** 엑세스 토큰이 만료가 되지 않았는데 리프레쉬토큰으로 재발급을 요청할 경우 토큰을 모두 만료시켜버린다
즉, 엑세스 토큰과 1:1 여부를 알기 위해 디비에 저장한다.
3. 장점&단점
3-1 ) 장점
- 기존의 Access Token만 있을 때보다 안전합니다.
3-2) 단점
- 구현이 복잡합니다. 검증 프로세스가 길기 때문에 자연스레 구현하기 힘들어졌습니다(프론트엔드, 서버 모두)
- Access Token이 만료될 때마다 새롭게 발급하는 과정에서 생기는 HTTP 요청 횟수가 많습니다. 이는 서버의 자원 낭비로 귀결됩니다.
2-1) token의 저장위치 선정. Cookie vs LocalStorage
부록 **암호화 알고리즘**
- 암호화 알고리즘의 종류
HS256
- HS256 는 HMAC SHA256 의 줄임말이다.
- 대칭키 방식 (공개키, 개인키)
- 공개키로 암호화 한 암호문은 개인키로 풀 수 있는데 개인키는 절대로 밖에 오픈해서는 안되며 공개키로 개인키를 알아 낼 수 없어야 한다.
RS256
- RS256는 RSA + SHA256 의 줄임말이다.
- 공개키를 이용하는 대표적인 암호화방식인 RSA을 사용한것이다.
대칭키 vs 공개키(비대칭키)
1. 대칭키 암호화 방식
- 암호화/복호화에 사용되는 키가 같은 암호화 방식을 말한다.
- 장점 : 공개키 암호화 방식에 비해 속도가 빠르다
- 단점 : 키를 교환해야 한다(배송중 탈취 문제) / 사용자가 많아질수록 키가 많아짐
2. 공개키(비대칭키) 암호화 방식
암호화/복호화에 사용되는 키가 서로 다른 암호화 방식
'프로그래밍 > 개발지식' 카테고리의 다른 글
SPA/MPA , CSR/SSR/SSG (0) | 2022.05.25 |
---|---|
JTW - Spring (0) | 2022.05.19 |
정처기 실기 - 1. 요구사항 확인 (0) | 2022.05.05 |
정처기 시험대비 메모장 2 - 22년 1회 필기 (0) | 2022.05.04 |
정처기 시험대비 메모장 1 (0) | 2022.05.03 |