Sign in with Apple 버튼 클릭 시 Apple 로그인 창은 뜨고 응답도 도착함[firebase_auth/invalid-credential] Invalid OAuth response from apple.com
OAuthCredential 생성은 정상적으로 진행되었음identityToken과 authorizationCode도 유효해 보임| 시도 | 예상 원인 | 조치 | 결과 |
|---|---|---|---|
| 1 | 시뮬레이터의 Apple 로그인 지원 문제 | 실기기에서 테스트 | 실패 |
| 2 | Apple 개발자 설정 누락 | Capability, Key, Redirect URI 확인 | 정상 |
| 3 | .env에 설정된 clientId, redirectUri 오류 | 재확인 및 로그 출력 | 정상 |
| 4 | Firebase CocoaPods 버전 불일치 | pod update Firebase/Storage 실행 | 무관 |
| 5 | rawNonce를 잘못 사용했거나 해시가 틀림 | nonce, hashedNonce 출력 확인 | 정상 |
위 모든 조건을 충족했음에도 동일 에러 계속 발생
"external 환경 문제"나 "시뮬레이터 미지원"만으로는 설명 불가
기존 코드:
final credential = await SignInWithApple.getAppleIDCredential(
scopes: [...],
nonce: hashedNonce,
);
final oauthCredential = OAuthProvider("apple.com").credential(
idToken: credential.identityToken,
rawNonce: rawNonce,
);
이 방식은 Apple 로그인 시 OpenID Connect (OIDC) 흐름을 강제함.
Firebase는 이 OIDC 흐름을 검증할 때, Apple에서 받은 identityToken의 nonce 값과 rawNonce를 비교하여 위조되지 않았는지 확인한다.
nonce 필드를 포함하지 않음accessToken 사용 + rawNonce 제거final credential = await SignInWithApple.getAppleIDCredential(
scopes: [...],
// nonce: hashedNonce, // 제거
);
final oauthCredential = OAuthProvider("apple.com").credential(
idToken: credential.identityToken,
accessToken: credential.authorizationCode, // 추가
// rawNonce: rawNonce, // 제거
);
accessToken은 OAuth 2.0 Authorization Code Flow에 가까운 방식nonce를 검증하지 않음nonce를 리턴하지 않더라도 로그인 가능| 구분 | 방식 | 장점 | 단점 | 사용 권장 시점 |
|---|---|---|---|---|
| OIDC 방식 (nonce 포함) | rawNonce + idToken | 보안성 뛰어남 | 일부 계정, 디바이스에서 실패 | 배포용 앱, 최신 계정 |
| OAuth 방식 (accessToken 사용) | idToken + authorizationCode | 호환성 넓음, 오류 적음 | 일부 보안 검증 생략됨 | 테스트, 시뮬레이터, 호환성 우선 앱 |
| 단계 | 조치 | 결과 |
|---|---|---|
| 1 | 시뮬레이터에서 Apple 로그인 시도 → 실패 | invalid-credential 발생 |
| 2 | 실기기 TestFlight로 배포 후 테스트 → 실패 | 동일 오류 발생 |
| 3 | Firebase, Apple 설정 확인 (.env 포함) | 문제 없음 |
| 4 | rawNonce, hashedNonce 값 로그로 출력 | 정상 생성 확인 |
| 5 | Firebase credential 생성 로직 수정 (accessToken 추가, nonce 제거) | 로그인 성공 |
이 문제의 본질은 "Apple 로그인에서 받은
identityToken에nonce가 포함되지 않으면 Firebase가 인증을 거부하는 구조"였습니다.
accessToken방식은 nonce 검증을 생략하기 때문에 일부 Apple 계정이나 시뮬레이터에서도 넓은 호환성을 보장합니다.
하지만 보안상 OIDC 흐름이 더 안전하므로, 배포 전에는 실제 환경에서rawNonce방식이 작동하는지 꼭 확인해야 합니다.