Random

[Firebase] signOut API로 로그아웃 해야하는 이유

SeanK 2022. 4. 14. 18:38

오늘 토이 프로젝트를 진행하면서 firebase 인증 기능을 이용하다가 로그아웃 기능도 함께 구현을 시도했다. 

 

그러다가 문득 드는 생각

 

그냥 firebase로부터 얻은 token 데이터만 없애버리면 로그아웃이지 않을까?
firebase api 문서에는 signOut api가 있는데 이걸 굳이 써야 할 이유가 있을까?

 

 

그래서 같이 프로젝트를 진행하고 있는 동료분께 아주 우매한 질문을 드려봤다. 

 

Firebase로 부터 인증토큰을 얻는데 성공했습니다. 근데 Firebase api 문서에 signOut api가 별도로 있는걸 발견했습니다.

사용자가 로그아웃 하도록 하려면 반드시 해당 api를 사용해야 하나요? 이전 프로젝트에서는 그냥 로컬에 있는 토큰 데이터를 삭제시켜서 로그아웃 했거든요.

 

우매한 질문이지만 친절한 답변을 얻을 수 있었고, 아주 중요한 내용이라 가능한 많은 분들이 알 수 있게 해야 한다는 생각이 들어 글로 옮겨본다. 

 

정답은 YES. 무조건 signOut api를 사용해 로그아웃 해야한다. 

 

이유는 보안 때문이다. Firebase로 부터 받은 토큰은 Bearer 토큰이다. 여기서 Bearer 토큰이란 소유한 사람이 소유권을 쥔다는 의미를 지닌다.

 

사실 토큰앞에 bearer라는 문자가 왜 붙는지 이해하지 못했는데, 개발자분의 설명에 따르면 증권 중에 Bearer bond라는 게 있다고 한다. 이 뜻은 해당 종이 문서를 '쥔' 사람이 은행에 가면 돈을 찾을 수 있다는 것으로 여기서의 Bearer가 마찬가지로 토큰에서 사용되었다고 보면된다.

 

즉, 불의의 사고로 누군가가 Firebase의 토큰을 얻게 되었다면 이를 이용해서 Firebase에 접근할 수 있게 된다는 뜻이다. 왜냐하면 Firebase에서는 어느 누구든 해당 토큰을 가진사람이 데이터를 얻을 수 있다고 여기기 때문!

 

만일 내가 로컬에 있는 토큰 데이터만 삭제함으로써 로그아웃을 했다면, firebase 쪽에서는 로그아웃 했는지 여부를 알지 못하기 때문에 이전의 토큰을 유효하다고 생각할 것이다. 

 

이때 제 삼자가 탈취한 토큰을 이용해 악의적인 행위를 한다면 firebase는 데이터를 내줄 수밖에 없는 것이다. 

 

따라서 signOut api를 사용함으로서 firebase에 해당 토큰을 더 이상 유효하지 않도록 만들어 주어야 하는 것이다. 

 

오늘 정말 좋은 것 하나 배웠다 히히