-
Firebase auth 네이버 카카오 회원연동 후기개발 이야기/Firebase 2021. 3. 3. 11:24
현재 서비스중인 서비스의 회원가입 시스템은 Firebase auth를 사용하여 개발되었습니다.
자체 이메일 패스워드 회원만 가입받아서 사용중인데 네이버와 카카오 회원들도 연동하여 서비스를 좀 더 쉽게 접근하도록 하기 위해 리뉴얼을 진행했습니다.
Firebase auth에서 네이버와 카카오같이 공식지원을 하지 않는 플랫폼의 회원 연동을 어떻게 할지에 대한 고민과
시행착오등의 흔적을 남겨봅니다.
Firebase auth는 개발시 크게 3가지의 문서를 봤습니다.
1. Firebase 사용자 SDK (프론트에서 사용)
firebase.google.com/docs/auth/web/manage-users#update_a_users_profile
2. Firebase 관리자 SDK (백엔드에서 사용)
firebase.google.com/docs/auth/admin/manage-users
3. Backend용 Rest API(백엔드에서 사용)
cloud.google.com/identity-platform/docs/use-rest-api?hl=ko#before_you_begin
고민했던 부분
회원 정보를 firebase에 완전 의지할지 아니면 별도로 db 테이블을 만들어서 이중으로 관리할지를 고민했습니다.
firestore, db, storage등을 사용했다면 무조건 firebase에 의존해야하지만 저는 로그인을 제외하고는 firebase의 다른 기능들을 사용하지 않기 때문에 고민을 많이 했습니다.
위 부분 때문에 실제로 두 방식을 모두 구현하며 아주 긴 시간을 소모했습니다.
결론적으로 저는 별도의 DB 테이블을 하나 만들어서 이중으로 관리하기로 하였습니다.
현재로서 이런 결론을 내린 이유는 아래와 같습니다.
1. firebase의 reflesh token은 수명이 너무 길다.
이게 노출되버리면 access token을 계속해서 새로 발급받을 수 있게됩니다.
reflesh token을 임의로 revoke하지 않는 이상 수명이 계속 유지된다. (비번 변경시 자동으로 revoke)
2. 백엔드에서 firebase token의 revoke를 체크하게 되면 api의 속도가 매우 느려집니다.
express가 쿠키로 심어진 access token을 받아서 매번 토큰의 유효성을 확인하는데 token의 revoke를 체크하는 순간 서비스 속도가 느려져서 서비스 품질이 떨어지는 느낌이 듭니다. (응답 속도에 조금 민감합니다)
3. firebase의 session cookie는 겁나 느리다.
보안을 위해서 세션쿠키를 사용하는 예제가 있어서 사용해봤는데 세션쿠키를 읽는 속도가 아주 느립니다.
한줄요약 - 기능은 좋지만 느려서 못쓰겠다!
그래서 어떻게 사용하기로 하였나?
1. 네이버와 카카오같은 회원들은 각각의 플랫폼으로 로그인을 하면 user의 id값이 전달되는데 이 값을 uid로 하여 firebase의 auth에 가입시키고 동시에 별도의 DB에 회원정보를 따로 저장.
2. Firebase auth의 자체 가입회원들도 별도의 DB에 회원정보를 따로 저장.
별도의 DB에 회원정보를 따로 관리하는 이유는 결제나 유료회원의 추가적인 정보들을 다루기 위함.
3. 로그인시 jwt를 이용하여 자체적으로 AccessToken과 RefleshToken을 생성하고 각 토큰의 수명을 1시간과 1일로 지정.쿠키에 해당 토큰을 저장
4. Express에서 api요청이 들어오면 AccessToken을 인증하고 오류시 RefleshToken을 인증하여 토큰을 새로 발급.
토큰 둘 다 오류시 다시 로그인하도록 유도
5. 로그아웃 및 서버측의 오류시에는 쿠키를 모두 제거
6. 비밀번호 변경 및 이메일 재인증등의 기능이 필요할 땐 다시 로그인을 시켜서 firebase의 idToken을 받아서 처리.
예전 AWS의 Cognito를 이용해서 자체 토큰을 발급해서 만든 서비스가 응답속도가 아주 만족도가 높았었는데 결국 그와 비슷하게 구현하게 되었음.
Firebase auth의 장점
1. 회원가입시 이메일인증이나 전화 문자인증을 대신 처리해줘서 편함.
2. 기본으로 제공하는 구글, 페이스북등의 소셜 회원의 연동이 쉽다.
3. 이중 로그인 감지등을 처리하기 쉽다.
Firebase auth의 단점
1. 느리다.
끝.
'개발 이야기 > Firebase' 카테고리의 다른 글
GCP를 이용한 backend 개발 AppEngine VS Cloud Function 고민하기 (0) 2019.03.11 Firestore 사용시 주의점 (4) 2019.02.24 Firebase cors 문제 해결하기 (0) 2019.02.14