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. Viene inoltre spiegato come eseguire la migrazione degli utenti da una un progetto non tenant in un tenant o eseguire la migrazione degli utenti tra i 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 per entrambi
i progetti di origine e di destinazione. Agli account di servizio devono essere concessi almeno
il ruolo Editor IAM (roles/editor
) per accedere agli utenti
e le relative password con hash del progetto di origine. Consulta le
Documentazione IAM per scoprire di più sulla creazione
gli account di servizio, la concessione delle autorizzazioni
e l'acquisizione delle 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 criteri di controllo dell'accesso non consentono l'uso di più servizi di lavoro in un singolo carico di lavoro, puoi comunque usare il codice di esempio di questo ma dovrai scaricare tutti gli utenti dal progetto di origine a un sistema di archiviazione di Google Cloud, quindi caricarle nel progetto di destinazione carico di lavoro.
Migrazione degli utenti tra progetti
Per eseguire la migrazione degli utenti, chiama il metodo admin.auth().listUsers
, che restituisce un
un elenco impaginato di utenti. 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 che utilizzano una 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 Riferimento 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 come la migrazione degli utenti da un progetto all'altro.
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:
Dovrai eliminare l'ID tenant dagli utenti del tenant precedente prima e caricarli nel nuovo tenant. Se salti questo passaggio, il tenant Errori di mancata corrispondenza dell'ID.
Chiama
admin.auth().tenantManager().authForTenant()
per impostare l'ID tenant su tra i 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.