Migrazione degli utenti tra progetti e tenant

Questo documento spiega come eseguire la migrazione degli utenti da un progetto Identity Platform esistente a un altro. Inoltre, mostra come eseguire la migrazione degli utenti da un progetto senza tenant a un tenant o tra tenant.

Prima di iniziare

Configurazione delle chiavi degli account di servizio

Prima di poter eseguire la migrazione degli account utente, devi disporre delle chiavi degli account di servizio sia per il progetto di origine sia per quello di destinazione. Agli account di servizio deve essere concesso almeno il ruolo Editor IAM (roles/editor) per accedere agli utenti e alle relative password sottoposte ad hashing dal progetto di origine. Consulta la documentazione IAM per scoprire di più sulla creazione di account di servizio, sulla concessione di autorizzazioni e sull'ottenimento di chiavi.

Dopo aver scaricato le chiavi, utilizzale per creare due istanze di 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();

Se i tuoi criteri di controllo dell'accesso non consentono l'utilizzo di più account di servizio in un singolo carico di lavoro, puoi comunque utilizzare il codice di esempio di questo documento, ma dovrai prima scaricare tutti gli utenti dal progetto di origine in un sistema di archiviazione, quindi caricarli nel progetto di destinazione in un carico di lavoro separato.

Migrazione degli utenti tra progetti

Per eseguire la migrazione degli utenti, chiama il metodo admin.auth().listUsers, che restituisce un elenco di utenti paginato. Puoi quindi chiamare admin.auth().importUsers() per caricarli nel progetto di destinazione.

È possibile scaricare o caricare un massimo di 1000 utenti alla volta.

Per gli utenti con password, devi fornire la configurazione dell'hash per l'hashing delle password. Puoi recuperare la configurazione dell'hash andando alla pagina Utenti di Identity Platform nella console Google Cloud e facendo clic su Importa utenti.

L'esempio seguente mostra come eseguire la migrazione degli utenti:

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

Per ulteriori informazioni, consulta il riferimento all'API SDK Admin.

Migrazione degli utenti a un tenant

La migrazione degli utenti da un progetto non tenant a un tenant è quasi esattamente la stessa della migrazione degli utenti tra progetti.

Supponendo che il tenant appartenga a un progetto diverso da quello di origine della piattaforma Identity, utilizza lo stesso codice di prima, ma chiama admin.auth().tenantManager().authForTenant() nell'istanza dell'app di destinazione e imposta l'ID tenant di destinazione prima di chiamare importUsers().

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

Migrazione degli utenti tra tenant

La migrazione degli utenti tra tenant è molto simile alla migrazione degli utenti tra progetti, con due differenze principali:

  1. Dovrai eliminare l'ID tenant dagli utenti del vecchio tenant prima di caricarli nel nuovo tenant. Se salti questo passaggio, si verificheranno errori di mancata corrispondenza dell'ID tenant.

  2. Chiama admin.auth().tenantManager().authForTenant() per impostare l'ID tenant nei tenant di origine e di destinazione.

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

Il resto del codice è lo stesso.