이번 주에는 refresh token에 시간을 많이 할애했다.
리프레시 토큰을 어디에 저장할 것인가 부터 시작해서 고민이 많았다.
액세스 토큰이 탈취될 위험 때문에 리프레시 토큰을 사용하는 것인데, 그럼 리프레시 토큰은 서버 측에 저장을 해야겠다.
-> 액세스 토큰과 리프레시 토큰을 한 쌍으로 해서 db에 저장해놓자.
-> 그럼 액세스 토큰이 탈취되었을 때도 재발급이 가능하네?
-> 리프레시 토큰도 그럼 클라이언트가 쥐고 있긴 해야겠다.
-> 액세스 토큰도 탈취되는데 리프레시 토큰이라고 탈취당하지 말라는 법이 있는가?
저 사이클에 빠져서 헤어나오기가 어려웠다.
결과적으로, 쿠키에 보안 설정을 할 수 있다는 것을 알게 되었고, 액세스 토큰이나 리프레시 토큰 중 하나만 탈취당한 경우에는 액세스 토큰을 재발급 해주지 않도록 구현하였다.
여기서 한 실수!
액세스 토큰까지 쿠키에 보안 설정을 걸었다.
어떤 토큰도 탈취당하지 않도록, 탈취 당하더라도 그 과정이 매우 어렵도록 하고 싶었다.
그런데 그렇게 되니 프론트 서버에서 쿠키를 확인할 수 있는 방법이 없어졌다.
결과적으로 유저 정보를 확인하고 로그인을 유지하는 방법이 모두 바뀌어야 했다.
프론트 쪽의 코드가 변경되느라 시간이 많이 소요되는 바람에 다른 작업이 조금 지연되었다.
쿠키와 jwt 토큰이 보안에 완전하게 안전하지 않다는 것을 알고 있었는데 너무 욕심을 부리다가 팀 전체에 장애물을 안겼다고 생각한다.
프론트 팀에게 사과했더니 자기들도 잘 몰라서 따라왔을 뿐이니 너무 미안해하지 말라고 해주셨지만...
내가 좀 더 생각했더라면 없었을 일이라고 생각하니까 죄송스러운 건 어쩔 수 없다ㅠㅠ
지금와서 방식을 돌리는 것이 더 힘들다셔서 일단은 진행하지만.. 앞으로는 이런 일 없도록 좀 더 생각하고 또 팀원과 토론해보자...