Check out what’s new from Firebase at Google I/O 2022. Learn more

인증 에뮬레이터에 앱 연결

앱에서 인증 에뮬레이터를 사용하기 전에 전체 Firebase 로컬 에뮬레이터 제품군 워크플로를 이해하고 로컬 에뮬레이터 제품군설치 및 구성 하고 해당 CLI 명령 을 검토해야 합니다.

인증 에뮬레이터로 무엇을 할 수 있습니까?

인증 에뮬레이터는 Firebase 인증 서비스의 충실도가 높은 로컬 에뮬레이션을 제공하여 프로덕션 Firebase 인증 에서 볼 수 있는 많은 기능을 제공합니다. Apple 플랫폼, Android 및 Web Firebase SDK와 함께 사용되는 에뮬레이터를 사용하면 다음을 수행할 수 있습니다.

  • 이메일/비밀번호, 전화번호/SMS 및 타사 ID 제공업체(예: Google) 로그인을 테스트하기 위해 에뮬레이트된 사용자 계정을 생성, 업데이트 및 관리합니다.
  • 에뮬레이트된 사용자 보기 및 편집
  • Emulator UI Logs 탭에서 인증 관련 메시지를 확인하세요.

Firebase 프로젝트 선택

Firebase 로컬 에뮬레이터 제품군은 단일 Firebase 프로젝트에 대한 제품을 에뮬레이트합니다.

사용할 프로젝트를 선택하려면 에뮬레이터를 시작하기 전에 CLI에서 작업 디렉터리에서 firebase use 를 실행합니다. 또는 --project 플래그를 각 에뮬레이터 명령에 전달할 수 있습니다.

로컬 에뮬레이터 제품군은 실제 Firebase 프로젝트 및 데모 프로젝트의 에뮬레이션을 지원합니다.

프로젝트 유형 특징 에뮬레이터와 함께 사용
진짜

실제 Firebase 프로젝트는 사용자가 만들고 구성한 프로젝트입니다(대부분 Firebase 콘솔을 통해).

실제 프로젝트에는 데이터베이스 인스턴스, 저장소 버킷, 함수 또는 해당 Firebase 프로젝트에 대해 설정한 기타 리소스와 같은 라이브 리소스가 있습니다.

실제 Firebase 프로젝트로 작업할 때 지원되는 제품의 일부 또는 전체에 대해 에뮬레이터를 실행할 수 있습니다.

에뮬레이션하지 않는 제품의 경우 앱과 코드가 라이브 리소스(데이터베이스 인스턴스, 스토리지 버킷, 기능 등)와 상호 작용합니다.

데모

데모 Firebase 프로젝트에는 실제 Firebase 구성과 라이브 리소스가 없습니다. 이러한 프로젝트는 일반적으로 Codelab 또는 기타 자습서를 통해 액세스합니다.

데모 프로젝트의 프로젝트 ID에는 demo- 접두사가 있습니다.

데모 Firebase 프로젝트로 작업할 때 앱과 코드는 에뮬레이터와 상호 작용합니다. 앱이 에뮬레이터가 실행되고 있지 않은 리소스와 상호 작용하려고 하면 해당 코드가 실패합니다.

가능하면 데모 프로젝트를 사용하는 것이 좋습니다. 혜택은 다음과 같습니다.

  • Firebase 프로젝트를 생성하지 않고도 에뮬레이터를 실행할 수 있으므로 설정이 간편합니다.
  • 코드가 실수로 에뮬레이션되지 않은(프로덕션) 리소스를 호출하는 경우 데이터 변경, 사용 및 청구 가능성이 없으므로 더 강력한 안전성
  • SDK 구성을 다운로드하기 위해 인터넷에 액세스할 필요가 없기 때문에 더 나은 오프라인 지원.

인증 에뮬레이터와 통신하도록 앱 계측

Android, iOS 및 웹 SDK

다음과 같이 인증 에뮬레이터와 상호 작용하도록 인앱 구성 또는 테스트 클래스를 설정합니다.

기계적 인조 인간
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
빠른
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Web version 9

import { getAuth, connectAuthEmulator } from "firebase/auth";

const auth = getAuth();
connectAuthEmulator(auth, "http://localhost:9099");

Web version 8

const auth = firebase.auth();
auth.useEmulator("http://localhost:9099");

인증과 Cloud Functions 또는 Cloud Firestore 또는 실시간 데이터베이스용 Firebase 보안 규칙 간의 상호 작용을 프로토타이핑하고 테스트하기 위해 추가 설정이 필요하지 않습니다. 인증 에뮬레이터가 구성되어 있고 다른 에뮬레이터가 실행 중이면 자동으로 함께 작동합니다.

관리 SDK

Firebase Admin SDK는 FIREBASE_AUTH_EMULATOR_HOST 환경 변수가 설정되면 인증 에뮬레이터에 자동으로 연결됩니다.

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

Cloud Functions 에뮬레이터는 인증 에뮬레이터를 자동으로 인식하므로 Cloud Functions와 인증 에뮬레이터 간의 통합을 테스트할 때 이 단계를 건너뛸 수 있습니다. 환경 변수는 Cloud Functions의 Admin SDK에 대해 자동으로 설정됩니다.

환경 변수가 설정되면 Firebase Admin SDK는 인증 에뮬레이터(각각 verifyIdTokencreateSessionCookie 메서드를 통해)에서 발급한 서명되지 않은 ID 토큰 및 세션 쿠키를 수락하여 로컬 개발 및 테스트를 용이하게 합니다. 프로덕션 환경에서 환경 변수를 설정 하지 않도록 하십시오.

Admin SDK 코드가 다른 환경에서 실행되는 공유 에뮬레이터에 연결되도록 하려면 Firebase CLI를 사용하여 설정한 것과 동일한 프로젝트 ID 를 지정해야 합니다. 프로젝트 ID를 initializeApp 에 직접 전달하거나 GCLOUD_PROJECT 환경 변수를 설정할 수 있습니다.

Node.js 관리 SDK
admin.initializeApp({ projectId: "your-project-id" });
환경 변수
export GCLOUD_PROJECT="your-project-id"

ID 토큰

보안상의 이유로 인증 에뮬레이터는 다른 Firebase 에뮬레이터 또는 구성된 경우 Firebase Admin SDK에서만 허용되는 서명되지 않은 ID 토큰을 발행합니다. 이러한 토큰은 프로덕션 모드에서 실행되는 프로덕션 Firebase 서비스 또는 Firebase Admin SDK에서 거부됩니다(예: 위에서 설명한 설정 단계가 없는 기본 동작).

인증 에뮬레이터 및 에뮬레이터 제품군 UI로 대화형 프로토타입 제작을 시작하려면 Firebase 로컬 에뮬레이터 제품군을 시작하세요.

firebase emulators:start

익명 인증 의 경우 앱에서 플랫폼( iOS , Android , web )에 대한 로그인 로직을 실행할 수 있습니다.

이메일/비밀번호 인증 의 경우 인증 SDK 메서드를 사용하거나 에뮬레이터 제품군 UI를 사용하여 앱에서 인증 에뮬레이터에 사용자 계정을 추가하여 프로토타이핑을 시작할 수 있습니다.

  1. Emulator Suite UI에서 인증 탭을 클릭합니다.
  2. 사용자 추가 버튼을 클릭합니다.
  3. 사용자 계정 생성 마법사를 따라 이메일 인증 필드를 채우십시오.

테스트 사용자가 생성되면 앱은 플랫폼( iOS , Android , web )에 대한 SDK 로직을 사용하여 사용자를 로그인 및 로그아웃할 수 있습니다.

이메일 링크 흐름으로 이메일 확인/로그인을 테스트하기 위해 에뮬레이터는 firebase emulators:start 가 실행된 터미널에 대한 URL을 인쇄합니다.

i  To verify the email address customer@ex.com, follow this link:
http://localhost:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-key

확인 이벤트를 시뮬레이션하기 위해 링크를 브라우저에 붙여넣고 확인 성공 여부를 확인합니다.

{
  "authEmulator": {
    "success": "The email has been successfully verified.",
    "email": "customer@example.com"
  }
}

비밀번호 재설정을 테스트하기 위해 에뮬레이터는 newPassword 매개변수(필요에 따라 변경할 수 있음)를 포함하여 유사한 URL을 터미널에 인쇄합니다.

http://localhost:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD

비대화형 테스트

에뮬레이터 제품군 UI 또는 클라이언트 코드를 사용하여 이메일/비밀번호 사용자 계정을 관리하는 대신 REST API를 호출하여 사용자 계정을 생성 및 삭제하고 대역 외 이메일 확인 코드를 가져와 에뮬레이터 이메일 확인을 채우는 테스트 설정 스크립트를 작성할 수 있습니다. URL. 이렇게 하면 플랫폼과 테스트 코드가 분리되어 비대화형으로 테스트할 수 있습니다.

비대화형 이메일 및 비밀번호 테스트 흐름의 경우 일반적인 순서는 다음과 같습니다.

  1. 인증 가입 REST 끝점 을 사용하여 사용자를 만듭니다.
  2. 테스트를 수행하려면 이메일과 비밀번호를 사용하여 사용자를 로그인하십시오.
  3. 테스트에 적용 가능한 경우 에뮬레이터별 REST 엔드폰 에서 사용 가능한 대역 외 이메일 확인 코드를 가져옵니다.
  4. 데이터를 지우기 위해 에뮬레이터별 REST 끝점 으로 사용자 레코드를 플러시합니다.

에뮬레이트된 전화/SMS 인증

전화 인증의 경우 인증 에뮬레이터는 다음을 지원하지 않습니다.

  • reCAPTCHA 및 APN 흐름. 에뮬레이터와 상호 작용하도록 구성된 클라이언트 SDK는 통합 테스트( iOS , Android , web )에 대해 설명한 것과 유사한 방식으로 이러한 확인 방법을 비활성화합니다.
  • Firebase 콘솔에 미리 구성된 코드로 전화번호를 테스트합니다.

그렇지 않으면 클라이언트 코드 측면에서 전화/SMS 인증 흐름은 프로덕션( iOS , Android , web )에 대해 설명된 것과 동일합니다.

에뮬레이터 제품군 UI 사용:

  1. Emulator Suite UI에서 인증 탭을 클릭합니다.
  2. 사용자 추가 버튼을 클릭합니다.
  3. 사용자 계정 생성 마법사를 따라 전화 인증 필드를 채우십시오.

그러나 전화 인증 흐름의 경우 이동통신사에 연락하는 것은 범위를 벗어나고 로컬 테스트에 적합하지 않기 때문에 에뮬레이터는 문자 메시지 전달을 트리거하지 않습니다! 대신 에뮬레이터는 SMS를 통해 firebase emulators:start 를 실행한 동일한 터미널로 전송된 코드를 인쇄합니다. 이 코드를 앱에 입력하여 사용자가 문자 메시지를 확인하는 것을 시뮬레이션합니다.

비대화형 테스트

비대화형 전화 인증 테스트의 경우 인증 에뮬레이터 REST API를 사용하여 사용 가능한 SMS 코드를 검색합니다. 코드는 흐름을 시작할 때마다 다릅니다.

일반적인 순서는 다음과 같습니다.

  1. 플랫폼 signInWithPhoneNumber 를 호출하여 확인 프로세스를 시작합니다.
  2. 에뮬레이터별 REST 엔드포인트 를 사용하여 인증 코드를 검색합니다.
  3. 확인 코드를 사용하여 평소와 같이 confirmationResult.confirm(code) 을 호출합니다.

에뮬레이트된 타사 ID 공급자(IDP) 인증

인증 에뮬레이터를 사용하면 프로덕션 코드를 변경하지 않고도 iOS, Android 또는 웹 앱에서 많은 타사 인증 흐름을 테스트할 수 있습니다. 인증 흐름의 예는 앱에서 사용할 수 있는 다양한 공급자 및 플랫폼 조합에 대한 설명서를 참조하세요.

일반적으로 Firebase SDK를 사용하여 다음 두 가지 방법 중 하나로 인증할 수 있습니다.

  • 앱을 통해 SDK는 자격 증명을 검색하기 위한 타사 IDP 공급자와의 모든 상호 작용을 포함하여 전체 프로세스를 종단 간 처리할 수 있습니다.
  • 앱은 해당 당사자의 SDK를 사용하여 타사 공급자로부터 자격 증명을 수동으로 검색하고 해당 자격 증명을 인증 SDK에 전달합니다.

다시 위의 문서 링크를 확인하고 사용하려는 흐름(Firebase SDK 관리 또는 수동 자격 증명 검색)에 대해 잘 알고 있는지 확인하세요. 인증 에뮬레이터는 두 접근 방식의 테스트를 지원합니다.

Firebase SDK 기반 IDP 흐름 테스트

앱이 대화형 테스트를 위해 Microsoft, GitHub 또는 Yahoo에 로그인하기 위해 OAuthProvider 와 같은 Firebase SDK 종단 간 흐름을 사용하는 경우 인증 에뮬레이터는 테스트에 도움이 되도록 해당 로그인 페이지의 로컬 버전을 제공합니다. signinWithPopup 또는 signInWithRedirect 메소드를 호출하는 웹 앱의 인증. 로컬에서 제공되는 이 로그인 페이지는 플랫폼의 webview 라이브러리에서 렌더링된 모바일 앱에도 나타납니다.

에뮬레이터는 흐름이 진행됨에 따라 필요에 따라 모의 타사 사용자 계정과 자격 증명을 생성합니다.

수동 자격 증명 검색으로 IDP 흐름 테스트

"수동" 로그인 기술을 사용하고 플랫폼의 signInWithCredentials 메서드를 호출하면 평소와 같이 앱이 실제 타사 로그인을 요청하고 실제 타사 자격 증명을 검색합니다.

에뮬레이터는 JWT(JSON Web Tokens)로 구현된 ID 토큰을 사용하는 Google 로그인, Apple 및 기타 제공업체에서 검색한 자격 증명에 대해서만 signInWithCredential 인증을 지원합니다. 액세스 토큰(예: JWT가 아닌 Facebook 또는 Twitter에서 제공하는 토큰)은 지원되지 않습니다. 다음 섹션에서는 이러한 경우의 대안에 대해 설명합니다.

비대화형 테스트

비대화형 테스트에 대한 한 가지 접근 방식은 에뮬레이터에서 제공하는 로그인 페이지에서 사용자 클릭을 자동화하는 것입니다. 웹 앱의 경우 WebDriver와 같은 제어 인터페이스를 사용합니다. 모바일의 경우 Espresso 또는 Xcode와 같은 플랫폼의 UI 테스트 도구를 사용합니다.

또는 signInWithCredential 을 사용하도록 코드를 업데이트하고(예: 코드 분기에서) 실제 자격 증명 대신 계정에 대한 모의 ID 토큰과 함께 토큰 인증 흐름을 사용할 수 있습니다.

  1. IDP에서 idToken을 검색하는 코드 부분을 다시 연결하거나 주석 처리합니다. 이렇게 하면 테스트 중에 실제 사용자 이름과 암호를 입력할 필요가 없고 IDP의 API 할당량 및 속도 제한에서 테스트가 완화됩니다.
  2. 둘째, signInWithCredential 토큰 대신 리터럴 JSON 문자열을 사용합니다. 웹 SDK를 예로 사용하여 코드를 다음과 같이 변경할 수 있습니다.
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
  '{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));

에뮬레이터와 함께 사용할 때 이 코드는 Google에서 foo@example.com 이메일로 사용자를 성공적으로 인증합니다. 하위 필드를 모든 문자열로 변경할 수 있는 기본 키로 생각하여 다른 사용자 로그인을 조롱합니다. 예를 들어, firebase.auth.GoogleAuthProvidernew firebase.auth.OAuthProvider('yahoo.com') 또는 조롱하려는 다른 공급자 ID로 바꿀 수 있습니다.

인증 에뮬레이터가 프로덕션과 다른 점

Firebase 인증 에뮬레이터는 프로덕션 제품의 많은 기능을 시뮬레이션합니다. 그러나 모든 종류의 인증 시스템은 여러 수준(기기, 타사 공급자, Firebase 등)의 보안에 크게 의존하기 때문에 에뮬레이터가 모든 흐름을 적절하게 재생성하기 어렵습니다.

클라우드 IAM

Firebase 에뮬레이터 제품군은 실행을 위한 IAM 관련 동작을 복제하거나 존중하지 않습니다. 에뮬레이터는 제공된 Firebase 보안 규칙을 준수하지만 IAM이 일반적으로 사용되는 상황(예: Cloud Functions 호출 서비스 계정 및 권한 설정)에서는 에뮬레이터를 구성할 수 없으며 개발자 컴퓨터에서 전역적으로 사용 가능한 계정을 사용합니다. 로컬 스크립트를 직접 실행하는 것과 유사합니다.

모바일 플랫폼에서 이메일 링크 로그인은 Firebase Dynamic Links에 의존하므로 이러한 모든 링크는 대신 (모바일) 웹 플랫폼에서 열립니다.

타사 로그인

타사 로그인 흐름의 경우 Firebase 인증은 Twitter 및 Github와 같은 타사 제공업체의 보안 자격 증명을 사용합니다.

Google 및 Apple과 같은 OpenID Connect 제공업체의 실제 자격 증명은 인증 에뮬레이터에서 허용됩니다. OpenID Connect 제공자가 아닌 제공자의 자격 증명은 지원되지 않습니다.

이메일/SMS 로그인

프로덕션 앱에서 이메일 및 SMS 로그인 흐름에는 사용자가 수신된 메시지를 확인하고 로그인 인터페이스에 로그인 코드를 입력하는 비동기 작업이 포함됩니다. 인증 에뮬레이터는 이메일이나 SMS 메시지를 보내지 않지만 위에서 설명한 것처럼 로그인 코드를 생성하고 테스트에 사용할 터미널로 출력합니다.

에뮬레이터는 Firebase 콘솔을 사용하여 수행할 수 있는 것처럼 고정 로그인 코드로 테스트 전화번호를 정의하는 기능을 지원하지 않습니다.

비율 제한 / 남용 방지

인증 에뮬레이터는 생산 속도 제한 또는 남용 방지 기능을 복제하지 않습니다.

다음은?