Spring Security (3) 로그인 방식 - API Key / jwt

별빛사막·2025년 1월 8일

API Key와 Access Token (JWT) 방식 비교

구분API Key 방식Access Token (JWT)
DB에 저장OX
인증DB 조회 필요CPU 연산만으로 처리
인증 속도느림빠름
폐기가능 (DB에서 변경)불가능
해킹 시 대처API Key 재생성불가능, 유효기간을 30분 이하로 설정
보안성높음낮음

요약

API Key : 만료 X, DB 조회 발생
Access Token(JWT) : CPU 연산으로 인증 속도 빠름. 유효 시간이 존재해 만료됨

문제: Access Token의 유효기간을 길게 하면 안 될까?

해킹을 당하지 않는다면 좋은 방법이지만, 탈취당할 가능성이 있으므로
유효기간을 짧게 설정하는 것이 좋다.

해결: API Key와 Access Token 두 가지를 모두 이용하자

Access Token의 유효기간이 지나면 API Key(Refresh Token)를 활용해 Access Token을 갱신하여 사용할 수 있도록 하자.



1. API Key(Refresh)와 Access Token을 헤더에 넣는 방식

  • Access Token이 만료되면, API Key(Refresh)로 재발급하여 Access Token을 사용한다.
  • 헤더 내용의 탈취 가능성은 HTTPS 보안에 의해 낮아지지만, 네트워크 전송량이 늘어난다.

위 방식의 장점) 매 요청마다 DB를 통해 인증 조회를 하지 않아도 되기에 속도가 빠르다.
(단, 유효 시간 내에만 가능하다.)

2. 그럼 탈취는 어디에서 발생하는가?

  • 웹 취약점이나 사용자의 부주의를 악용하여 발생한다.
    ex. 키로깅, XSS 공격 등

3. 탈취에 대한 대응

1) Access Token가 탈취된 경우
: 대응 방법이 없다. 유효 시간 동안 정보가 탈취될 수 있으므로 유효기간을 짧게 설정하는 것이 차선책이다.

  • 유효기간을 너무 짧게 설정하면 Access Token 재발급 횟수가 증가하고, 이로 인해 DB 조회가 빈번하게 발생하여 좋지 않다.
  • 사용자가 많지 않을 때는 SELECT * FROM member WHERE api_key = ? 쿼리 실행 시간이 짧지만, 사용자가 증가하면 단위 시간당 처리할 수 있는 쿼리에 한계가 있으므로 Access Token의 유효 기간을 적절하게 (5분~30분 정도, 서비스 특성에 맞게 적절히 조정) 설정하는 것이 좋다.

2) API Key (Refresh)가 탈취된 경우
: '전 기기 로그아웃', 2차 인증 등과 같은 계정 보안 기능을 통해 사용자가 이상을 감지하고 API Key를 변경해야 한다. 변경을 해도 유효 기간 동안 이전 Access Token은 사용 가능하다.

profile
조금씩 매일 성장하자

0개의 댓글