인프런 커뮤니티 질문&답변

김건희님의 프로필 이미지
김건희

작성한 질문수

만들면서 배우는 프론트엔드 DO IT 코딩 (Next.js, Typescript)

firebase 인증을 활용한 Google 로그인

firebase auth 인증 질문

작성

·

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

totuworld님의 프로필 이미지
totuworld
지식공유자

안녕하세요 건희님.

 

질문 1 답변

  • token을 전송하는 건 서버에 제공하는 데이터를 token을 소유한 사용자와 같은지 확인하려고 전송하는 거에요.

  • 예를 들어 A사용자가 B사용자를 사칭할 수 있기때문에 주민증이나 운전면허증을 확인하는 것과 비슷한 겁니다.

질문 2 답변

  • token은 여러가지가 있지만 여기서 사용하는 토큰은 JWT라서 유효기간이 정해져있습니다.

  • 그래서 최초에 가입할 때 쓴 token과 과거에 제출하는 토큰은 다를 수 있습니다.

JWT 작동 원리 살펴보시면 더 자세히 이해하실 수 있을거에요.

질문 3 답변

브라우저를 통해서 로그인 한 뒤 사용자를 확인하는 방법은 여러가지고 있습니다.

로그인한 뒤 쿠키를 떨구기도하고, localStorage 에 저장할 수도 있습니다.

Firebase는 index db에 저장합니다.

질문 4 답변

refresh 토큰처리는 firebase가 알아서 해줍니다.

질문 5 답변

질문 3 확인해보시면 됩니다.

질문 6 답변

이건 공식문서에 나옵니다.

Firebase 인증은 여타 Firebase 서비스와 긴밀히 연동하고 OAuth 2.0 및 OpenID Connect 등의 산업 표준을 활용하므로 커스텀 백엔드와 쉽게 통합할 수 있습니다.

https://firebase.google.com/docs/auth?hl=ko

 

감사합니다.

김건희님의 프로필 이미지
김건희

작성한 질문수

질문하기