Nutzer zwischen Projekten und Mandanten migrieren

In diesem Dokument wird erläutert, wie Sie Nutzer von einem vorhandenen Identity Platform-Projekt zu einem anderen migrieren. Außerdem erfahren Sie, wie Sie Nutzer von einem Nicht-Mandantenprojekt zu einem Mandanten migrieren oder Nutzer zwischen Mandanten migrieren.

Hinweise

Dienstkontoschlüssel konfigurieren

Bevor Sie Nutzerkonten migrieren können, benötigen Sie Dienstkontoschlüssel für die Quell- und Zielprojekte. Den Dienstkonten muss mindestens die Rolle des IAM-Bearbeiters (roles/editor) gewährt werden, um auf die Nutzer und ihre gehashten Passwörter aus dem Quellprojekt zugreifen zu können. In der IAM-Dokumentation erfahren Sie mehr über das Erstellen von Dienstkonten, das Erteilen von Berechtigungen und das Abrufen von Schlüsseln.

Nachdem Sie die Schlüssel heruntergeladen haben, können Sie damit zwei auth-Instanzen instanziieren.

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

Wenn Ihre Zugriffssteuerungsrichtlinien die Verwendung mehrerer Dienstkonten in einer einzigen Arbeitslast nicht zulassen, können Sie den Beispielcode aus diesem Dokument dennoch verwenden. Sie müssen jedoch zuerst alle Nutzer aus dem Quellprojekt herunterladen in ein Speichersystem und diese dann in einer separaten Arbeitslast in das Zielprojekt hochladen.

Nutzer zwischen Projekten migrieren

Rufen Sie zum Migrieren von Nutzern die Methode admin.auth().listUsers auf. Diese gibt eine paginierte Liste von Nutzern zurück. Sie können dann admin.auth().importUsers() aufrufen, um sie in das Zielprojekt hochzuladen.

Es können maximal 1.000 Nutzer gleichzeitig herunter- oder hochgeladen werden.

Für Passwortnutzer müssen Sie die Hash-Konfiguration für die Passwort-Hash-Technologie angeben. Sie können die Hash-Konfiguration abrufen, indem Sie in der Google Cloud Console die Seite „Identity Platform-Nutzer“ aufrufen und dann auf Nutzer importieren klicken.

Das folgende Beispiel zeigt, wie Nutzer migriert werden:

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

Weitere Informationen finden Sie in der Referenz zur Admin SDK API.

Nutzer zu einem Mandanten migrieren

Die Migration von Nutzern von einem Nicht-Mandanten-Projekt zu einem Mandanten ist fast identisch mit der Migration von Nutzern zwischen Projekten.

Wenn der Mandant zu einem anderen Projekt als dem Identity Platform-Quell-Projekt gehört, verwenden Sie denselben Code wie zuvor, rufen jedoch admin.auth().tenantManager().authForTenant() für die Zielinstanz auf und legen die Ziel-Mandanten-ID fest, bevor Sie importUsers() aufrufen.

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

Nutzer zwischen Mandanten migrieren

Die Migration von Nutzern zwischen Mandanten erfolgt ähnlich wie die Migration von Nutzern zwischen Projekten, jedoch mit zwei wichtigen Unterschieden:

  1. Sie müssen die Mandanten-ID von Nutzern des alten Mandanten löschen, bevor Sie die Nutzer für den neuen Mandanten hochladen. Wenn Sie diesen Schritt überspringen, führt dies zu Fehlern des Typs "Nichtübereinstimmung von Mandanten-IDs".

  2. Rufen Sie admin.auth().tenantManager().authForTenant() auf, um die Mandanten-ID für die Quell- und Zielmandanten festzulegen.

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

Der Rest des Codes ist identisch.