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 언어에서 지원되는 기능이 나와 있습니다.
또한 프로젝트의 서비스 계정과 키가 필요합니다.
콘솔
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the Other > Identity Toolkit Admin role to the service account.
To grant the role, find the Select a role list, then select Other > Identity Toolkit Admin.
- Click Continue.
-
Click Done to finish creating the service account.
Do not close your browser window. You will use it in the next step.
Create a service account key:
- In the Google Cloud console, click the email address for the service account that you created.
- Click Keys.
- Click Add key, and then click Create new key.
- Click Create. A JSON key file is downloaded to your computer.
- Click Close.
gcloud
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant the
Project > Admin
IAM role to the service account:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=Project > Admin
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service account
-
Generate the key file:
gcloud iam service-accounts keys create FILE_NAME.json --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Replace the following:
FILE_NAME
: a name for the key fileSERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service account
GOOGLE_APPLICATION_CREDENTIALS
환경 변수를 설정하여 애플리케이션 코드에 사용자 인증 정보를 제공합니다. 이 변수는 현재 셸 세션에만 적용됩니다. 이후 셸 세션에 변수를 적용하려면 셸 시작 파일(예: ~/.bashrc
또는 ~/.profile
파일)에서 변수를 설정합니다.
Linux 또는 macOS
export GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH
"
KEY_PATH
를 사용자 인증 정보가 포함된 JSON 파일의 경로로 바꿉니다.
예를 들면 다음과 같습니다.
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
Windows
PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH
"
KEY_PATH
를 사용자 인증 정보가 포함된 JSON 파일의 경로로 바꿉니다.
예를 들면 다음과 같습니다.
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
명령 프롬프트:
set GOOGLE_APPLICATION_CREDENTIALS=KEY_PATH
KEY_PATH
를 사용자 인증 정보가 포함된 JSON 파일의 경로로 바꿉니다.
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()
});
Java
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')
});
Java
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();
Java
// 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.email
및 cloud-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"
다음 단계
- GitHub에서 Admin SDK의 소스 코드 및 추가 문서 보기:
- 기존 사용자를 Identity Platform으로 마이그레이션
- 프로그래매틱 방식으로 SAML 및 OIDC 공급업체 관리
- Identity Platform 테넌트 관리