Migrazione degli utenti tra progetti e tenant

Questo documento spiega come eseguire la migrazione degli utenti da un progetto Identity Platform esistente a un progetto diverso. Mostra inoltre come eseguire la migrazione degli utenti da un progetto non tenant a un tenant o la migrazione di utenti tra tenant.

Prima di iniziare

Configurazione delle chiavi degli account di servizio

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

Dopo aver scaricato le chiavi, utilizzale per creare un'istanza di due istanze 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 criteri di controllo dell'accesso non consentono l'utilizzo di più account di servizio in un unico carico di lavoro, puoi comunque utilizzare il codice di esempio da 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.

Eseguire la migrazione degli utenti tra progetti

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

Puoi scaricare o caricare un massimo di 1000 utenti alla volta.

Per gli utenti delle password, devi fornire la configurazione hash per l'hashing delle password. Per recuperare la configurazione hash, vai alla pagina Utenti di Identity Platform in Google Cloud Console e fai 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 maggiori informazioni, consulta la documentazione di riferimento per l'API Admin SDK.

Migrazione di utenti in un tenant

La migrazione degli utenti da un progetto non tenant a un tenant è quasi esattamente uguale alla migrazione degli utenti tra progetti.

Supponendo che il tenant appartenga a un progetto diverso dal progetto Identity Platform di origine, 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 di utenti tra tenant

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

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

  2. Chiama admin.auth().tenantManager().authForTenant() per impostare l'ID tenant sui 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.