| 구분 | API Key 방식 | Access Token (JWT) |
|---|---|---|
| DB에 저장 | O | X |
| 인증 | DB 조회 필요 | CPU 연산만으로 처리 |
| 인증 속도 | 느림 | 빠름 |
| 폐기 | 가능 (DB에서 변경) | 불가능 |
| 해킹 시 대처 | API Key 재생성 | 불가능, 유효기간을 30분 이하로 설정 |
| 보안성 | 높음 | 낮음 |
API Key : 만료 X, DB 조회 발생
Access Token(JWT) : CPU 연산으로 인증 속도 빠름. 유효 시간이 존재해 만료됨
해킹을 당하지 않는다면 좋은 방법이지만, 탈취당할 가능성이 있으므로
유효기간을 짧게 설정하는 것이 좋다.
Access Token의 유효기간이 지나면 API Key(Refresh Token)를 활용해 Access Token을 갱신하여 사용할 수 있도록 하자.
위 방식의 장점) 매 요청마다 DB를 통해 인증 조회를 하지 않아도 되기에 속도가 빠르다.
(단, 유효 시간 내에만 가능하다.)
1) Access Token가 탈취된 경우
: 대응 방법이 없다. 유효 시간 동안 정보가 탈취될 수 있으므로 유효기간을 짧게 설정하는 것이 차선책이다.
SELECT * FROM member WHERE api_key = ? 쿼리 실행 시간이 짧지만, 사용자가 증가하면 단위 시간당 처리할 수 있는 쿼리에 한계가 있으므로 Access Token의 유효 기간을 적절하게 (5분~30분 정도, 서비스 특성에 맞게 적절히 조정) 설정하는 것이 좋다.2) API Key (Refresh)가 탈취된 경우
: '전 기기 로그아웃', 2차 인증 등과 같은 계정 보안 기능을 통해 사용자가 이상을 감지하고 API Key를 변경해야 한다. 변경을 해도 유효 기간 동안 이전 Access Token은 사용 가능하다.