(oauth2) 엑세스 토큰은 안전한 저장소에 저장하지 않는가?

김수호·2024년 9월 22일

로그인에 대해서 구현하던 중 의문이 생기게 되었다.
나는 리프레쉬 토큰에 대해서 안전하기 위해 클라이언트에 절대로 주지 않는다고 처음에 생각하고 있었다.

그래서 공식 문서를 찾아보았다.
클라이언트단이 refresh토큰을 소유하고 있는것을 발견하게 되었고, 이를 gpt를 통해서 추가적인 정보를 찾아보았다.


라는 답변을 받았다.

그렇다면 결국 클라이언트에게는 엑세스 토큰과 리프레쉬 토큰을 모두 전달해야 한다는 이야기다.

그럼 여기서 한가지 의문을 가지게 되었다.

엑세스 토큰도 이 안전한 저장소에 저장하면 되는게 아닌가?

내가 지식이 부족했던 탓인지 위에서 언급된 안전한 저장소에 저장을 하게 되면 자바스크립트에서 사용할 수 없다.
그러므로 엑세스 토큰은 짧은 주기로 xss공격에 취약하더라도 사용성을 고려해서 로컬스토리지 등에 저장하는 것이었다.

물론 저장을 못하는것은 아니다.
http only 쿠키에 저장을 하고 이를 서버측에서 쿠키를 검증하고 정보를 제공할 수도 있다.
하지만 추가적인 상호작용이 지속적으로 발생하게 될것이고 이는 서버의 과부화로 일어나는 결과를 초래할 수 있을것이다.

ps. 엑세스 토큰을 브라우저 메모리에 저장하게 되면 xss 공격에 덜 취약하게 되겠지만 페이지가 새로고침 될 때마다 토큰을 재 발급해야 한다.
그러므로 완전하지도 않을 뿐더러 서버에 엑세스 토큰의 발급을 자주 하게 될것이다.

내가 내린 결론은 : 보안과 효율은 비례할 수 없듯이 이 또한 같은 내용인 것이다.
엑세스 토큰까지 보안을 챙기게 되면 서버의 과부화는 막을 수 없고, 엑세스 토큰을 로컬스토리지 등에 저장을 하게 되면 xss 공격에 취약하게 된다.

[출처] : https://datatracker.ietf.org/doc/html/rfc6749

profile
정답을 모르지만 답을 찾는 법을 알고, 그 답을 찾아낼 것이다. 그럼 괜찮지 않은가? -크리스 가드너-

0개의 댓글