작성
·
1.1K
·
수정됨
0
fireBase인증 과정에 대하여 질문있습니다. 제가 이해한 것이 맞는지 확인해주시면 감사하겠습니다.
질문 1.
(1)
try {
const signInResult = await signInWithPopup(FirebaseAuthClient.getInstance().Auth, provider);
if (signInResult.user) {
const idToken = await signInResult.user.getIdToken();
const { uid, displayName, photoURL, email } = signInResult.user;
// uid
// photoURL
// displayName
const resp = await memberAddForClient({
data: {
uid,
displayName: displayName || undefined,
email: email!,
screenName: email!.split('@')[0],
photoURL: photoURL || undefined,
provider: 'google',
},
token: idToken,
});
}
signInWithPopup메서드를 통해 구글 로그인 후 로그인 한 유저 정보(signInResult)를 가져옵니다.
(2)
const idToken = await signInResult.user.getIdToken();
여기서 accesstoken과 다른 유저정보 email,uid등등을 가져와서 filestore에 저장합니다
(3)
export default async function verifyFirebaseIdToken(token: string) {
try {
const id = await FirebaseAdmin.getInstance().Auth.verifyIdToken(token);
return id.uid;
}
그후 사용자가 어떤 api요청을 보낼 때 verifyFirebaseIdToken 함수에에 있는 verifyIdToken메서드를 통해 아까 받은 accesstoken을 보내 토큰이 유효한지 검사합니다. accessotken이 유효하면 id를 주어 api에 함께 보내 api 요청을 성공시킵니다.
이 과정이 맞나요?
질문 2.
const id = await FirebaseAdmin.getInstance().Auth.verifyIdToken(token);
verifyFirebaseIdToken에서 유효성 검사를 할 때 token이 로그인할 때 받은 accesstoken과 동일한 token인가요?
질문 3.
firestore에 accesstoken은 저장되어 있지 않던데 어디에 저장되어 있는 건가요?
질문 4.
코드에 accesstoken으로 인증하고 유효성 검사하는 것이 있는데요 따로 refreshToken은 없는데 firebase auth는 refreshtoken 시나리오는 잘 안하나요?
질문 5.
코드에는 브라우저에 쿠키나 로컬스토리지를 사용하지 않음에도 브라우저를 껐다가 다시 켜도 로그아웃 되어있지 않고 로그인이 되어있는데 어떻게 가능한 것인가요?
질문 6.
지금 이 로그인이 흔히 말하는 oauth맞나요?
답변 1
0
안녕하세요 건희님.
token을 전송하는 건 서버에 제공하는 데이터를 token을 소유한 사용자와 같은지 확인하려고 전송하는 거에요.
예를 들어 A사용자가 B사용자를 사칭할 수 있기때문에 주민증이나 운전면허증을 확인하는 것과 비슷한 겁니다.
token은 여러가지가 있지만 여기서 사용하는 토큰은 JWT라서 유효기간이 정해져있습니다.
그래서 최초에 가입할 때 쓴 token과 과거에 제출하는 토큰은 다를 수 있습니다.
JWT 작동 원리 살펴보시면 더 자세히 이해하실 수 있을거에요.
브라우저를 통해서 로그인 한 뒤 사용자를 확인하는 방법은 여러가지고 있습니다.
로그인한 뒤 쿠키를 떨구기도하고, localStorage 에 저장할 수도 있습니다.
Firebase는 index db에 저장합니다.
refresh 토큰처리는 firebase가 알아서 해줍니다.
질문 3 확인해보시면 됩니다.
이건 공식문서에 나옵니다.
Firebase 인증은 여타 Firebase 서비스와 긴밀히 연동하고 OAuth 2.0 및 OpenID Connect 등의 산업 표준을 활용하므로 커스텀 백엔드와 쉽게 통합할 수 있습니다.
https://firebase.google.com/docs/auth?hl=ko
감사합니다.