Admin SDK 설치

이 문서에서는 Identity Platform Admin SDK를 설치하는 방법을 설명합니다. Admin SDK를 사용하면 서버 환경에서 Identity Platform을 관리하고 사용자 마이그레이션, 커스텀 클레임 설정, ID 공급업체 구성과 같은 관리자 작업을 수행할 수 있습니다.

시작하기 전에

Admin SDK를 사용하려면 다음 중 하나를 실행하는 서버 앱이 필요합니다.

언어 최소 프레임워크 버전
Node.js Node.js 8.13.0 이상
자바 자바 7 이상(자바 8 이상 권장)
Python Python 2.7 이상 또는 3.4 이상(3.4 이상 권장)
Go Go 1.9 이상
C# .NET Framework 4.5 이상 또는 .NET Core 1.5 이상

다음 표에는 각 SDK 언어에서 지원되는 기능이 나와 있습니다.

기능 Node.js 자바 Python Go C#
커스텀 토큰 발급
ID 토큰 확인
사용자 관리
커스텀 클레임으로 액세스 제어
갱신 토큰 취소
사용자 가져오기
세션 쿠키 관리
이메일 작업 링크 생성
SAML 및 OIDC 공급업체 구성 관리
멀티테넌시 지원

또한 프로젝트의 서비스 계정과 키가 필요합니다.

Cloud Console

  1. Cloud Console에서 서비스 계정 키 만들기 페이지로 이동합니다.

    서비스 계정 키 만들기 페이지로 이동
  2. 서비스 계정 목록에서 새 서비스 계정을 선택합니다.
  3. 서비스 계정 이름 필드에 이름을 입력합니다.
  4. 역할 목록에서 프로젝트 > 소유자.

  5. 만들기를 클릭합니다. 키가 포함된 JSON 파일이 컴퓨터에 다운로드됩니다.

명령줄

로컬 머신 또는 Cloud Shell에서 Cloud SDK를 사용하여 다음 명령어를 실행할 수 있습니다.

  1. 서비스 계정을 만듭니다. NAME을 서비스 계정 이름으로 바꿉니다.

    gcloud iam service-accounts create NAME
  2. 서비스 계정에 권한을 부여합니다. PROJECT_ID를 프로젝트 ID로 바꿉니다.

    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role="roles/owner"
  3. 키 파일을 생성합니다. FILE_NAME을 키 파일 이름으로 바꿉니다.

    gcloud iam service-accounts keys create FILE_NAME.json --iam-account=NAME@PROJECT_ID.iam.gserviceaccount.com

GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정하여 애플리케이션 코드에 사용자 인증 정보를 제공합니다. [PATH]를 서비스 계정 키가 포함된 JSON 파일의 파일 경로로 바꿉니다. 이 변수는 현재 셸 세션에만 적용되므로 새 세션을 연 경우 변수를 다시 설정합니다.

Linux 또는 macOS

export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

예를 들면 다음과 같습니다.

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"

Windows

PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

예를 들면 다음과 같습니다.

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\my-key.json"

명령어 프롬프트:

set GOOGLE_APPLICATION_CREDENTIALS=[PATH]

SDK 설치

Node.js

Node.js Admin SDK는 npm에서 사용할 수 있습니다. 아직 package.json 파일이 없으면 npm init를 사용하여 파일을 만듭니다. 다음으로 npm 패키지를 설치하고 package.json에 저장합니다.

npm install firebase-admin --save

앱에서 모듈을 사용하려면 자바스크립트 파일에서 require합니다.

var admin = require('firebase-admin');

ES2015를 사용하는 경우 대신 모듈을 import할 수 있습니다.

import * as admin from 'firebase-admin';

자바

자바 Admin SDK가 Maven Central Repository에 게시됩니다. 라이브러리를 설치하려면 build.gradle 파일에서 종속 항목으로 선언합니다.

dependencies {
  implementation 'com.google.firebase:firebase-admin:6.11.0'
}

Maven을 사용하여 앱을 빌드하는 경우 pom.xml에 다음 종속 항목을 추가할 수 있습니다.

<dependency>
  <groupId>com.google.firebase</groupId>
  <artifactId>firebase-admin</artifactId>
  <version>6.11.0</version>
</dependency>

Python

Python Admin SDK는 pip를 통해 제공됩니다.

pip install --user firebase-admin

Go

go get 유틸리티를 사용하여 Go Admin SDK를 설치합니다.

go get firebase.google.com/go

C#

.NET 패키지 관리자를 사용하여 .NET Admin SDK를 설치합니다.

Install-Package FirebaseAdmin -Version 1.9.1

또는 dotnet 명령줄 유틸리티를 사용하여 설치합니다.

dotnet add package FirebaseAdmin --version 1.9.1

또는 .csproj 파일에 다음 패키지 참조 항목을 추가하여 설치할 수 있습니다.

<ItemGroup>
  <PackageReference Include="FirebaseAdmin" Version="1.9.1" />
</ItemGroup>

기본 사용자 인증 정보를 사용하여 SDK 초기화

서버 앱에 다음 코드를 추가하여 기본 사용자 인증 정보를 사용해 Admin SDK를 초기화합니다.

Node.js

// Initialize the default app
var admin = require('firebase-admin');
var app = admin.initializeApp({
  credential: admin.credential.applicationDefault()
});

자바

FirebaseApp.initializeApp();

Python

default_app = firebase_admin.initialize_app()

Go

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create();

서비스 계정 키 파일로 SDK 초기화

서비스 계정 키 파일을 수동으로 지정할 수도 있습니다.

Node.js

// Initialize the default app
var admin = require('firebase-admin');
var app = admin.initializeApp({
  credential: admin.credential.cert('/path/to/serviceAccountKey.json')
});

자바

FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.fromStream(serviceAccount))
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

Python

import firebase_admin
from firebase_admin import credentials
from firebase_admin import exceptions

cred = credentials.Certificate('path/to/serviceAccountKey.json')
default_app = firebase_admin.initialize_app(cred)

Go

opt := option.WithCredentialsFile("path/to/serviceAccountKey.json")
app, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.FromFile("path/to/serviceAccountKey.json"),
});

여러 앱 초기화

일반적으로 단일 기본 앱만 초기화하는 것이 좋습니다. 그러나 구성 옵션과 인증 상태가 각기 다른 여러 개의 앱 인스턴스를 만들 수도 있습니다.

Node.js

// Initialize the default app
admin.initializeApp(defaultAppConfig);

// Initialize another app with a different config
var otherApp = admin.initializeApp(otherAppConfig, 'other');

console.log(admin.app().name);  // '[DEFAULT]'
console.log(otherApp.name);     // 'other'

// Use the shorthand notation to retrieve the default app's services
var defaultAuth = admin.auth();

자바

// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);

// Initialize another app with a different config
FirebaseApp otherApp = FirebaseApp.initializeApp(otherAppConfig, "other");

System.out.println(defaultApp.getName());  // "[DEFAULT]"
System.out.println(otherApp.getName());    // "other"

// Use the shorthand notation to retrieve the default app's services
FirebaseAuth defaultAuth = FirebaseAuth.getInstance();
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance();

// Use the otherApp variable to retrieve the other app's services
FirebaseAuth otherAuth = FirebaseAuth.getInstance(otherApp);
FirebaseDatabase otherDatabase = FirebaseDatabase.getInstance(otherApp);

Python

# Initialize the default app
default_app = firebase_admin.initialize_app(cred)

#  Initialize another app with a different config
other_app = firebase_admin.initialize_app(cred, name='other')

print(default_app.name)    # "[DEFAULT]"
print(other_app.name)      # "other"

# Retrieve default services via the auth package...
# auth.create_custom_token(...)

# Use the `app` argument to retrieve the other app's services
# auth.create_custom_token(..., app=other_app)

Go

// Initialize the default app
defaultApp, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Initialize another app with a different config
opt := option.WithCredentialsFile("service-account-other.json")
otherApp, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Access Auth service from default app
defaultClient, err := defaultApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

// Access auth service from other app
otherClient, err := otherApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

C#

// Initialize the default app
var defaultApp = FirebaseApp.Create(defaultOptions);

// Initialize another app with a different config
var otherApp = FirebaseApp.Create(otherAppConfig, "other");

Console.WriteLine(defaultApp.Name); // "[DEFAULT]"
Console.WriteLine(otherApp.Name); // "other"

// Use the shorthand notation to retrieve the default app's services
var defaultAuth = FirebaseAuth.DefaultInstance;

// Use the otherApp variable to retrieve the other app's services
var otherAuth = FirebaseAuth.GetAuth(otherApp);

범위 설정

인증에 Google 애플리케이션 기본 사용자 인증 정보와 함께 Compute Engine VM을 사용하는 경우 올바른 액세스 범위를 설정해야 합니다. Identity Platform에는 userinfo.emailcloud-platform 액세스 범위가 필요합니다.

기존 액세스 범위를 확인하려면 다음을 실행합니다.

gcloud compute instances describe [INSTANCE-NAME] --format json

이 명령어는 서비스 계정에 대한 정보를 반환합니다. 예를 들면 다음과 같습니다.

"serviceAccounts": [
 {
  "email": "example.gserviceaccount.com",
  "scopes": [
   "https://www.googleapis.com/auth/cloud-platform",
   "https://www.googleapis.com/auth/userinfo.email"
   ]
  }
]

액세스 범위를 업데이트하려면 VM을 중지한 후 다음을 실행합니다.


gcloud compute instances set-service-account [INSTANCE-NAME] \
  --service-account "your.gserviceaccount.com" \
  --scopes ""https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/userinfo.email"

다음 단계