Die Ausgangslage
Unchained Engine war ursprünglich auf Meteor aufgebaut. Das bedeutete auch: Meteor Accounts für die Benutzerverwaltung. Funktionierte, aber hatte Limitierungen.
Warum die Migration?
- Meteor-Abhängigkeit – Wir wollten weg von Meteor, aber Accounts war tief integriert
- Keine moderne Auth-Standards – OAuth2 und OpenID Connect nur über Umwege
- GraphQL-Integration – Meteor Accounts spricht DDP, nicht GraphQL
- Multi-Tenancy – Verschiedene Auth-Konfigurationen pro Tenant waren schwierig
Die Wahl: Accounts-js
Nach Evaluation mehrerer Optionen (Passport.js, Auth0, custom) haben wir uns für accounts-js entschieden:
- Open Source und aktiv maintained
- GraphQL-native
- Modularer Aufbau
- MongoDB-Support (wie Meteor)
- Token-basierte Authentifizierung
Die Migration
Schritt 1: Datenbank-Schema
Glücklicherweise waren die Datenstrukturen ähnlich. Emails, hashed Passwords, Services – das meiste konnte bleiben.
// Meteor Format
{
_id: "userId",
emails: [{ address: "user@example.com", verified: true }],
services: {
password: { bcrypt: "..." }
}
}
// Accounts-js ist kompatibelSchritt 2: Token-Migration
Das grösste Problem: Aktive Sessions. Meteor verwendet Login-Tokens, accounts-js JWT. Wir haben einen Hybrid-Ansatz gewählt:
- Alte Meteor-Tokens werden beim nächsten Login invalidiert
- Neue JWTs werden ausgestellt
- Grace Period für die Migration
Schritt 3: GraphQL-Schema
Das neue Auth-Schema in GraphQL:
type Mutation {
authenticate(
serviceName: String!
params: AuthenticateParamsInput!
): LoginResult
logout: Boolean
refreshTokens(
accessToken: String!
refreshToken: String!
): LoginResult
}
type LoginResult {
sessionId: String
tokens: Tokens
user: User
}Schritt 4: OAuth Provider
Accounts-js macht OAuth einfacher. Neue Provider hinzufügen ist jetzt Konfiguration statt Code.
Lessons Learned
- Planen Sie genug Zeit ein – Auth-Migration ist kritisch
- Feature-Flag verwenden – Schrittweise Migration möglich
- Testen, testen, testen – Edge Cases bei Password Reset, Email Verification etc.
- Kommunikation – User müssen wissen, was sich ändert
Das Ergebnis
Nach der Migration haben wir:
- Keine Meteor-Abhängigkeit mehr bei Auth
- Saubere GraphQL-API für alle Auth-Operationen
- Einfache Integration neuer OAuth-Provider
- Bessere Token-Verwaltung mit Refresh-Tokens
Fazit
Die Migration war aufwändig, aber notwendig. Accounts-js hat sich als solide Wahl erwiesen und ermöglicht uns jetzt Features, die mit Meteor Accounts nicht möglich waren.
Für alle, die vor einer ähnlichen Migration stehen: Es lohnt sich. Planen Sie gründlich, migrieren Sie schrittweise, und unterschätzen Sie den Testaufwand nicht.