התקנה של SDK לאדמינים

במאמר הזה מוסבר איך להתקין את Identity Platform SDK לאדמינים. ‫SDK לאדמינים מאפשר לכם לנהל את Identity Platform מסביבת שרת, ולבצע פעולות אדמין כמו העברת משתמשים, הגדרת טענות בהתאמה אישית והגדרת ספקי זהויות.

לפני שמתחילים

כדי להשתמש ב-SDK לאדמינים, צריך אפליקציית שרת שמריצה אחת מהמערכות הבאות:

שפה גרסת המסגרת המינימלית
Node.js ‫Node.js 8.13.0 ואילך
Java ‫Java 7 ומעלה (מומלץ Java 8 ומעלה)
Python ‫Python 2.7+ או 3.4+ (מומלץ להשתמש בגרסה 3.4+)
המשך ‫Go 1.9 ואילך
C#‎ ‫‎.NET Framework 4.5+‎ או ‎ .NET Core 1.5+‎

בטבלה הבאה מפורטות התכונות שנתמכות בכל שפה של SDK:

תכונה Node.js Java Python Go C#‎
יצירת אסימונים בהתאמה אישית
אימות של אסימון מזהה
ניהול משתמשים
שליטה בגישה באמצעות טענות מותאמות אישית
ביטול טוקן רענון
ייבוא משתמשים
ניהול קובצי Cookie זמניים
יצירת קישורים לפעולות באימייל
ניהול הגדרות של ספקי SAML/OIDC
תמיכה בריבוי דיירים (multitenancy)
מסד נתונים בזמן אמת *
העברת הודעות בענן ב-Firebase
FCM Multicast
ניהול מינויים לנושאים ב-FCM
Cloud Storage
Firestore
ניהול פרויקטים
כללי אבטחה
ניהול מודלים של למידת מכונה
הגדרת תצורה מרחוק ב-Firebase
Firebase App Check
תוספים ל-Firebase

המסוף

  1. יוצרים חשבון שירות:

    1. מוודאים שיש לכם את תפקיד ה-IAM ‏Create Service Accounts ‏(roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM ‏Project Admin ‏(roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים
    2. במסוף Google Cloud , נכנסים לדף יצירת חשבון שירות.

      כניסה לדף Create service account
    3. בוחרים את הפרויקט הרצוי.
    4. כותבים שם בשדה Service account name. המסוף Google Cloud ממלא את השדה מזהה חשבון שירות בהתאם לשם הזה.

      כותבים תיאור בשדה Service account description. לדוגמה: Service account for quickstart.

    5. לוחצים על Create and continue.
    6. מקצים לחשבון השירות את התפקיד Other > Identity Toolkit Admin.

      כדי להקצות את התפקיד, בוחרים באפשרות Other > Identity Toolkit Admin מהרשימה Select a role.

    7. לוחצים על Continue.
    8. לוחצים על Done כדי לסיים ליצור את חשבון השירות.

      חשוב לא לסגור את חלון הדפדפן, כי תשתמשו בו גם בשלב הבא.

  2. יוצרים מַפְתח לחשבון השירות:

    1. במסוף Cloud, לוחצים על כתובת האימייל של חשבון השירות שיצרתם. Google Cloud
    2. לוחצים על Keys.
    3. לוחצים על Add key ואז על Create new key.
    4. לוחצים על Create. למחשב שלכם תתבצע הורדה של קובץ JSON עם המפתח.
    5. לוחצים על Close.

gcloud

  1. מגדירים את האימות:

    1. מוודאים שיש לכם את תפקיד ה-IAM ‏Create Service Accounts ‏(roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM ‏Project Admin ‏(roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים
    2. יוצרים את חשבון השירות:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      מחליפים את הערך SERVICE_ACCOUNT_NAME בשם שרוצים לתת לחשבון השירות.

    3. מקצים לחשבון השירות את התפקיד roles/identitytoolkit.admin ב-IAM:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/identitytoolkit.admin

      מחליפים את מה שכתוב בשדות הבאים:

      • SERVICE_ACCOUNT_NAME: השם של חשבון השירות
      • PROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירות
    4. יוצרים את קובץ המַפְתח:

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

      מחליפים את מה שכתוב בשדות הבאים:

      • FILE_NAME: שם לקובץ המַפְתח
      • SERVICE_ACCOUNT_NAME: השם של חשבון השירות
      • PROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירות

התקנת ה-SDK

Node.js

‫Node.js SDK לאדמינים זמין ב-npm. אם עדיין אין לכם קובץ package.json, אתם יכולים ליצור אותו באמצעות npm init. לאחר מכן, מתקינים את חבילת npm ושומרים אותה ב-package.json:

npm install firebase-admin --save

כדי להשתמש במודול באפליקציה, require אותו מכל קובץ JavaScript:

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

אם משתמשים ב-ES2015, אפשר import את המודול במקום זאת:

import * as admin from 'firebase-admin';

Java

‫Java Admin SDK מתפרסם ב-Maven Central Repository. כדי להתקין את הספרייה, צריך להצהיר עליה כתלות בקובץ build.gradle:

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

אם משתמשים ב-Maven כדי לבצע build לאפליקציה, אפשר להוסיף את יחסי התלות הבאים לקובץ 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 get כדי להתקין את Go Admin SDK לאדמינים:

go get firebase.google.com/go

C#‎

מתקינים את .NET Admin SDK באמצעות מנהל החבילות של .NET:

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 באמצעות פרטי כניסה שמוגדרים כברירת מחדל

מוסיפים את הקוד הבא לאפליקציית השרת כדי לאתחל את 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 = CredentialFactory.FromFile<ServiceAccountCredential>("path/to/serviceAccountKey.json").ToGoogleCredential(),
});

אתחול של כמה אפליקציות

בדרך כלל, תרצו לאתחל רק אפליקציה אחת שמוגדרת כברירת מחדל. עם זאת, אתם יכולים גם ליצור כמה מופעים של אפליקציות, שלכל אחד מהם יש אפשרויות הגדרה ומצב אימות משלו.

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);

הגדרת היקפי הרשאות

אם אתם משתמשים במכונה וירטואלית ב-Compute Engine עם אישורי ברירת מחדל של אפליקציות Google לאימות, תצטרכו להגדיר את היקפי ההרשאות הנכונים. ‫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"

המאמרים הבאים