Memigrasikan pengguna antara project dan tenant

Dokumen ini menjelaskan cara memigrasikan pengguna dari project Identity Platform yang ada ke project yang berbeda. Panduan ini juga menunjukkan cara memigrasikan pengguna dari project non-tenant ke tenant, atau memigrasikan pengguna antar-tenant.

Sebelum memulai

Mengonfigurasi kunci akun layanan

Sebelum dapat memigrasikan akun pengguna, Anda memerlukan kunci akun layanan untuk project sumber dan target. Akun layanan harus diberi setidaknya peran Editor IAM (roles/editor) untuk mengakses pengguna dan sandi hash mereka dari project sumber. Lihat dokumentasi IAM untuk mempelajari lebih lanjut cara membuat akun layanan, memberikan izin, dan mendapatkan kunci.

Setelah mendownload kunci, gunakan untuk membuat instance dua instance auth.

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

var sourceApp = admin.initializeApp({
  credential: admin.credential.cert('source-project-service-account.json'),
}, 'source-app');

var targetApp = admin.initializeApp({
  credential: admin.credential.cert('target-project-service-account.json'),
}, 'target-app');

var authFrom = sourceApp.auth();
var authTo = targetApp.auth();

Jika kebijakan kontrol akses Anda tidak mengizinkan penggunaan beberapa akun layanan dalam satu workload, Anda masih dapat menggunakan contoh kode dari dokumen ini, tetapi Anda harus mendownload semua pengguna dari project sumber ke sistem penyimpanan terlebih dahulu, lalu menguploadnya ke project target dalam workload terpisah.

Memigrasikan pengguna antar-project

Untuk memigrasikan pengguna, panggil metode admin.auth().listUsers, yang menampilkan daftar pengguna yang di-pagination. Selanjutnya, Anda dapat memanggil admin.auth().importUsers() untuk menguploadnya ke project target.

Maksimum 1.000 pengguna dapat didownload atau diupload sekaligus.

Untuk pengguna sandi, Anda harus menyediakan konfigurasi hash untuk hashing sandi. Anda dapat mengambil konfigurasi hash dengan membuka halaman Pengguna Identity Platform di konsol Google Cloud, lalu mengklik Impor Pengguna.

Contoh berikut menunjukkan cara memigrasikan pengguna:

function migrateUsers(userImportOptions, nextPageToken) {
 var pageToken;
 authFrom.listUsers(1000, nextPageToken)
   .then(function(listUsersResult) {
    var users = [];
    listUsersResult.users.forEach(function(user) {
      var modifiedUser = user.toJSON();
      // Convert to bytes.
      if (user.passwordHash) {
       modifiedUser.passwordHash = Buffer.from(user.passwordHash, 'base64');
       modifiedUser.passwordSalt = Buffer.from(user.passwordSalt, 'base64');
      }
      // Delete tenant ID if available. This will be set automatically.
      delete modifiedUser.tenantId;
      users.push(modifiedUser);
    });
    // Save next page token.
    pageToken = listUsersResult.pageToken;
    // Upload current chunk.
    return authTo.importUsers(users, userImportOptions);
   })
   .then(function(results) {
    results.errors.forEach(function(indexedError) {
       console.log('Error importing user ' + indexedError.index);
     });
     // Continue if there is another page.
     if (pageToken) {
         migrateUsers(userImportOptions, pageToken);
     }
   })
   .catch(function(error) {
     console.log('Error importing users:', error);
   });
}
var userImportOptions = {
 hash: {
   algorithm: 'SCRYPT',
   // The following parameters can be obtained from the "Users" page in the
   // Cloud console. The key must be a byte buffer.
   key: Buffer.from('base64-secret', 'base64'),
   saltSeparator: Buffer.from('base64SaltSeparator', 'base64'),
   rounds: 8,
   memoryCost: 14
 }
};

migrateUsers(userImportOptions);

Untuk informasi selengkapnya, lihat referensi Admin SDK API.

Memigrasikan pengguna ke tenant

Memigrasikan pengguna dari project non-tenant ke tenant hampir sama persis dengan memigrasikan pengguna antar-project.

Dengan asumsi bahwa tenant termasuk dalam project yang berbeda dengan project Identity Platform sumber, gunakan kode yang sama seperti sebelumnya, tetapi panggil admin.auth().tenantManager().authForTenant() pada instance aplikasi target dan tetapkan ID tenant target sebelum memanggil importUsers().

var authTo = targetApp.auth().tenantManager().authForTenant('tenant');

Memigrasikan pengguna antar-tenant

Memigrasikan pengguna antar-tenant sangat mirip dengan memigrasikan pengguna antar-project, dengan dua perbedaan utama:

  1. Anda harus menghapus ID tenant dari pengguna tenant lama sebelum menguploadnya ke tenant baru. Melewati langkah ini akan menyebabkan error ketidakcocokan ID tenant.

  2. Panggil admin.auth().tenantManager().authForTenant() untuk menetapkan ID tenant di tenant sumber dan target.

    // Migrate from tenant1 to tenant2 in same project.
    var authFrom = admin.auth().tenantManager().authForTenant('tenant1');
    var authTo = admin.auth().tenantManager().authForTenant('tenant2');
    

Kode lainnya sama.