[Flutter]Firebase Apple 로그인 시 "Invalid OAuth response from apple.com" 에러

S_Soo100·2025년 6월 27일
0

flutter

목록 보기
24/25
post-thumbnail

Unhandled Exception: [firebase_auth/invalid-credential] Invalid OAuth response from apple.com

Firebase Authentication 관련해서, 특히 Apple 소셜로그인 기능에서 해당 에러가 발생하는데 원인과 해결책을 공유하고자 합니다.

이것은.. Firebase 인증을 사용하여 Flutter 앱에 Apple로 로그인 기능을 통합할 때 발생하는 "[firebase_auth/invalid-credential] Invalid OAuth response from apple.com" 오류입니다.

이 오류는 Firebase에 제공된 OAuth 자격 증명이 불완전하거나 유효하지 않을 때 발생합니다.

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: [firebase_auth/invalid-credential] Invalid OAuth response from apple.com
#0      FirebaseAuthHostApi.signInWithCredential (package:firebase_auth_platform_interface/src/pigeon/messages.pigeon.dart:1098:7)
<asynchronous suspension>
#1      MethodChannelFirebaseAuth.signInWithCredential (package:firebase_auth_platform_interface/src/method_channel/method_channel_firebase_auth.dart:306:22)
<asynchronous suspension>
#2      FirebaseAuth.signInWithCredential (package:firebase_auth/src/firebase_auth.dart:515:9)
<asynchronous suspension>
#3      AuthService.signInWithApple (package:parkbestapp/services/auth_service.dart:73:9)
<asynchronous suspension>

위와 같이 에러가 나오더라도, 처음 직면했다면 원인을 어디부터 찾아야 할 지 애먹을 수 있습니다.


원인 분석

Firebase Auth, 특히 애플쪽 에러는 4가지를 체크 해야 합니다.

1단계: Apple Developer Console 설정
2단계: Firebase Console 설정
3단계: 내 프로젝트 코드 확인

현재 문제는, 결론부터 말씀 드리면 3단계, 내 프로젝트 코드부터 체크 해야 하는 문제로, 이전까지 OAuthCredential을 생성하기 위해 넣던 데이터에 한 가지를 추가로 넣어주어야 합니다.
FirebaseApple 로그인 프로세스에서 검색된 accessToken이 누락되거나 유효하지 않기 때문입니다.

특히 내 패키지들 버전(혹은 플러터 버전도 같이)을 훅 올렸을 때 직면하게 되는 문제인데, firebase_auth 패키지 버전 4.3.0부터 웹 Firebase SDK v9의 모듈식 접근 방식과 관련된 변경 사항이 적용되었고 이로 인해 Apple로 로그인 시 accessToken 또는 authorizationCode를 전달해주도록 변경되었습니다.

그러므로 3단계 코드 수정부터 들어가고, 이후 1, 2단계 부분을 어떻게 확인해야 하는지도 같이 살짝 들여다보겠습니다.
(필요 없으신 분들은 바로 아래에 있는 "3단계: 코드 수정하기"까지만 봐주세요!)


3단계: 코드 수정하기

코드 '수정하기' 인 만큼, 이전에 애플 소셜로그인 기능을 이미 다 구현했다고 생각하고 진행 하겠습니다.
처음 구현해야 한다면 이 블로그 글로 가주세요!

아마 대부분의 플러터 개발자 분들이 FlutterFire 공식 docs를 보고 애플 소셜 로그인 기능을 구현 하실텐데요, 아직 이 공식문서에도 문제 해결 방법은 적용이 안 되어 있습니다.

위에서 말씀드린 OAuthCredential 생성 부분입니다.

  // Create an `OAuthCredential` from the credential returned by Apple.
  final oauthCredential = OAuthProvider("apple.com").credential(
    idToken: appleCredential.identityToken,
    rawNonce: rawNonce,
  );

이 부분에서 accessToken이라는 한 가지 매개변수를 추가해주면 됩니다.

final oauthCredential = OAuthProvider("apple.com").credential(
  idToken: appleCredential.identityToken,
  rawNonce: rawNonce,
  accessToken: appleCredential.authorizationCode, // 이제 appleCredential의 인증 코드를 넣어주세요
);

끝이냐구요? 네, 끝입니다.
accessToken을 넣어준 것으로 생성되는 OAuthCredential객체가(위 코드에는 타입이 안 써있지만, oauthCredential의 명시적 타입입니다.) 필요한 데이터를 잘 받게 되었으니 이제 다른 firebase나 apple developer쪽에 문제가 없으면 로그인이 정상적으로 잘 될 것입니다.

그래도 혹시 모르니 print를 촘촘하게 찍어서 모두 체크해주세요.
이런식으로 보면 서로 알기 쉽고 좋습니다.

여기 말고도 FirebaseAuth의 소셜 로그인 Flow마다 응답 객체와 승인 여부를 함께 확인해주세요.

이후에도 로그인이 안 된다면, 아래 1단계, 2단계 설정 확인 방법을 진행해주세요.


1단계: Apple Developer Console 설정

https://developer.apple.com/account 로 접속후 로그인,
이후 '인증서, ID 및 프로파일(Certificates, Identifiers & Profiles)'에서 다음 설정을 확인해주세요:


1-1. 식별자(Identifiers) 확인하기

위 스크린샷 처럼 Service ID를 찾아서 들어간 후, 소셜로그인에 사용하고 있는 Service ID를 누릅니다.

그리고 위와 같이 primary app id, domain, returl url이 잘 적혀있는지 체크해주세요.

primary app id는 'Identifiers'의 'App IDs'에서 확인할 수 있는데, 프로젝트를 등록할 때 필수로 쓰는 'com.myCompany.projectName'같은 값을 말합니다.

Return URL의 경우는 Firebase Console의 Authentication-로그인 방법-로그인 제공업체 중 Apple로 들어가시면 확인할 수 있습니다.

Domain은 Return URL에서 맨 앞의 'https(혹은 http)://'와 맨 뒤의 '/__/auth/handler'를 뺀 부분입니다.


1-2. Keys확인하기

다시 Certificates, Identifiers & Profiles에서 이제는 Keys로 들어갑니다. 그러면 내 소셜로그인에 사용하고 있는 Key가 보일텐데, 들어가서 'Sign In with Apple'서비스가 Enable되어 있는지, 'Primary App ID'가 'Service ID'에 설정한 'Primary App ID'랑 동일한지를 확인해주세요.

이미 만들어놓은 key의 경우 .p8파일 다운로드가 안되니, 어디에 잘 보관해두신 파일이 있는지 찾아보거나 새로 만들어주세요!

이 Service ID와 key는 Firebase Console에 그대로 넣어야 합니다.


2단계: Firebase Console 설정

내 프로젝트의 Authentication-로그인 방법-로그인 제공업체 중 Apple로 들어가서, 위의 Apple Developer Console에서 확인한 정보들이 잘 기입되어 있는지 체크합니다.

특히 비공개 키의 경우, 위에서 말씀드린 대로 사용하시는 키의 .p8파일을 코드에디터로 열어서 그 안에 있는 내용을 전체 다 복붙 해줘야 합니다.


자 이제 Apple Developer Console 점검 방법, Firebase Console 점검 방법, 내 코드 점검 방법까지 확인해봤습니다.
에러가 해결되셨기를 바라며 마치겠습니다.

profile
플러터, 리액트

0개의 댓글