Migration von Auth0
Auris bietet Feature-Parität mit Auth0 über Authentifizierung, Autorisierung und Benutzerverwaltung hinaus, plus Funktionen, die Auth0 extra berechnet oder nicht anbietet (Zanzibar-Style FGA, integrierte SCIM-Provisionierung, Actions-Engine mit Visual Editor und selbst-gehostete Bereitstellung).
Feature-Mapping
| Auth0-Feature | Auris-Äquivalent | Hinweise |
|---|---|---|
| Universal Login | Gehostete Login-Seiten | OAuth2 Authorization Code + PKCE, tenant-gebrandet |
| Rules / Actions | Actions-Engine | Sandbox-JavaScript, 6 Trigger-Punkte, visueller Blueprint-Editor |
| RBAC (Rollen + Berechtigungen) | Rollen & Berechtigungen V2 | Tri-State ALLOW/DENY, pro-Anwendungs-Scoping |
| Organizations | Organizations B2B | Multi-Org mit 4 Mitgliederrollen, token-basierte Einladungen |
| Auth0 FGA (OpenFGA) | Auris FGA | Zanzibar-Style ReBAC, OpenFGA-kompatible DSL |
| Social Connections | Social Login | 9 Anbieter (Google, GitHub, Microsoft, Apple, Facebook, Discord, LinkedIn, Twitter/X, Slack) |
| Enterprise Connections (SAML/OIDC) | Enterprise-SSO | SAML 2.0 + OIDC via Keycloak IdP-Brokering, Domain-Verifizierung |
| Machine-to-Machine | Client Credentials | OAuth2 client_credentials-Grant, scope-basiert |
| Webhooks | Webhooks | HMAC-SHA256-signiert, Wiederholung mit exponentiellem Backoff |
| Custom Claims | Custom JWT Claims | Pro-Anwendung, 5 Werttypen |
| MFA | Multi-Faktor-Authentifizierung | TOTP, SMS OTP, WebAuthn/Passkeys, adaptives MFA mit Risikobewertung |
| Passwordless (Email) | Magic Links | Token-basierter E-Mail-Login mit Auto-Signup |
| Attack Protection | Angriffsschutz | IP-Regeln, Brute-Force-Sperre, CAPTCHA, Suspicious-Login-Erkennung |
| Log Streaming | Log Streaming | Webhook, S3, Datadog, Splunk |
| SCIM | SCIM 2.0 Provisionierung | RFC 7644-konform, Attributzuordnung, Bulk-Operationen |
| Custom Domains | Benutzerdefinierte Domains | White-Label-Auth-Seiten, automatisches SSL |
Migrationsschritte
Schritt 1: Benutzer aus Auth0 exportieren
Verwende die Auth0 Management API, um deine Benutzer zu exportieren:
# Export-Job erstellen
curl -X POST https://IHR_AUTH0_DOMAIN/api/v2/jobs/users-exports \
-H "Authorization: Bearer $AUTH0_MANAGEMENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"format": "json",
"fields": [
{ "name": "user_id" },
{ "name": "email" },
{ "name": "email_verified" },
{ "name": "name" },
{ "name": "given_name" },
{ "name": "family_name" },
{ "name": "created_at" },
{ "name": "app_metadata" }
]
}'Auth0 exportiert keine Passwort-Hashes für Benutzer, die sich mit E-Mail/Passwort registriert haben. Diese Benutzer müssen ihr Passwort nach der Migration zurücksetzen, oder du kannst das unten beschriebene Lazy-Migration-Muster verwenden.
Schritt 2: Benutzer in Auris transformieren und importieren
// transform-auth0-users.ts
import fs from 'fs'
interface Auth0User {
user_id: string
email: string
email_verified: boolean
name: string
given_name: string
family_name: string
created_at: string
}
interface AurisImportUser {
email: string
firstName: string
lastName: string
emailVerified: boolean
}
const auth0Users: Auth0User[] = JSON.parse(
fs.readFileSync('auth0-export.json', 'utf-8')
)
const aurisUsers: AurisImportUser[] = auth0Users.map((user) => ({
email: user.email,
firstName: user.given_name || user.name?.split(' ')[0] || '',
lastName: user.family_name || user.name?.split(' ').slice(1).join(' ') || '',
emailVerified: user.email_verified,
}))
fs.writeFileSync('auris-import.json', JSON.stringify(aurisUsers, null, 2))
console.log(`${aurisUsers.length} Benutzer transformiert`)In Auris hochladen:
curl -X POST https://auth.ihredomain.com/api/users/import \
-H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \
-H "x-tenant: ihr-tenant-id" \
-F "[email protected]" \
-F "format=json"Schritt 3: Anwendungen in der Auris-Console erstellen
Für jede Auth0-Anwendung erstelle eine entsprechende Anwendung in Auris:
- Auth0 “Single Page Application” oder “Regular Web Application” = Auris WEB
- Auth0 “Native” = Auris MOBILE
- Auth0 “Machine to Machine” = Auris M2M
Schritt 4: Auth0-SDK durch Auris-SDK ersetzen
# Auth0 entfernen
npm uninstall @auth0/auth0-spa-js @auth0/auth0-react @auth0/nextjs-auth0
# Auris installieren
npm install @auris/js @auris/react
# Für Next.js:
npm install @auris/nextjsSchritt 5: Anwendungscode aktualisieren
Provider-Setup (React):
// VORHER (Auth0)
import { Auth0Provider } from '@auth0/auth0-react'
function App() {
return (
<Auth0Provider
domain="ihr-tenant.auth0.com"
clientId="auth0-client-id"
authorizationParams={{ redirect_uri: window.location.origin + '/callback' }}
>
<MyApp />
</Auth0Provider>
)
}
// NACHHER (Auris)
import { AurisProvider } from '@auris/react'
function App() {
return (
<AurisProvider
domain="auth.ihrUnternehmen.com"
clientId="auris-client-id"
redirectUri={window.location.origin + '/callback'}
>
<MyApp />
</AurisProvider>
)
}Authentifizierungs-Hook:
// VORHER (Auth0)
import { useAuth0 } from '@auth0/auth0-react'
const { loginWithRedirect, logout, user, isAuthenticated, getAccessTokenSilently } = useAuth0()
// NACHHER (Auris)
import { useAuris } from '@auris/react'
const { loginWithRedirect, logout, user, isAuthenticated, getAccessToken } = useAuris()Next.js-Middleware:
// VORHER (Auth0)
import { withMiddlewareAuthRequired } from '@auth0/nextjs-auth0/edge'
export default withMiddlewareAuthRequired()
// NACHHER (Auris)
import { aurisMiddleware } from '@auris/nextjs/middleware'
export default aurisMiddleware({
protectedPaths: ['/dashboard(.*)'],
publicPaths: ['/', '/about', '/pricing'],
loginUrl: '/auth/login',
})Schritt 6: Rules zu Actions migrieren
Auth0-Trigger werden Auris-Actions-Engine-Triggern zugeordnet:
| Auth0-Trigger | Auris-Trigger |
|---|---|
post-login | post-login |
pre-user-registration | pre-signup |
post-user-registration | post-signup |
post-change-password | post-change-password |
Auth0-Action-Beispiel:
// Auth0 Action (post-login)
exports.onExecutePostLogin = async (event, api) => {
if (!event.user.email_verified) {
api.access.deny('Bitte verifiziere deine E-Mail, bevor du dich anmeldest.')
}
api.idToken.setCustomClaim('https://myapp.com/role', event.user.app_metadata.role)
}Auris-Action-Äquivalent:
// Auris Action (post-login-Trigger)
async function action(context) {
if (!context.user.emailVerified) {
return { deny: true, message: 'Bitte verifiziere deine E-Mail, bevor du dich anmeldest.' }
}
return {
claims: {
role: context.user.metadata?.role || 'user'
}
}
}Schritt 7: RBAC migrieren
Rollen und Berechtigungen aus Auth0 exportieren und in Auris neu erstellen:
curl -X POST https://auth.ihredomain.com/api/roles \
-H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \
-H "x-tenant: ihr-tenant-id" \
-H "Content-Type: application/json" \
-d '{
"name": "Editor",
"description": "Kann Inhalte bearbeiten",
"color": "#3B82F6"
}'Schritt 8: DNS-Umschaltung
- Eine benutzerdefinierte Domain in Auris einrichten (z. B.
auth.ihrUnternehmen.com) - DNS aktualisieren, um deine Auth-Domain auf Auris zu zeigen
- Alle Anwendungen aktualisieren, um die neue Domain zu verwenden
Passwörter verwalten (Lazy Migration)
Da Auth0 keine Passwort-Hashes exportiert, hast du zwei Optionen:
Option A: Passwort-Reset erzwingen (Einfacher)
Nach dem Importieren der Benutzer einen Massen-Passwort-Reset auslösen. Alle importierten Benutzer erhalten eine “Dein Passwort setzen”-E-Mail.
Option B: Lazy Migration (Reibungslos)
Auth0 und Auris vorübergehend parallel betreiben:
- Auris versucht, den Benutzer zu authentifizieren
- Wenn kein Passwort in Auris vorhanden, gibt Auris einen spezifischen Fehler zurück
- Deine Anwendung versucht als Fallback, gegen Auth0 zu authentifizieren
- Bei Auth0-Erfolg erstellt deine Anwendung das Passwort in Auris über die Admin-API
- Nachfolgende Logins gehen direkt durch Auris
Das Lazy-Migration-Muster erfordert, dass dein Auth0-Tenant während der Migrationsperiode aktiv bleibt. Plane dessen Außerbetriebnahme nach einer angemessenen Periode (z. B. 30–90 Tage).
Rollback-Plan
- Auth0 mindestens 30 Tage nach der Umschaltung aktiv halten
- DNS-Rollback: Auth-Domain zurück auf Auth0 zeigen
- SDK-Rollback:
@auris/*-Pakete zu@auth0/*zurücksetzen und neu deployen
Post-Migration-Checkliste
- Alle Benutzer können sich anmelden
- Social-Login-Anbieter funktionieren
- MFA-Registrierung und -Verifizierung funktionieren
- Rollenbasierte Zugriffskontrolle wird korrekt durchgesetzt
- Webhooks liefern Ereignisse an deine Endpunkte
- Benutzerdefinierte Domains und SSL funktionieren
- M2M-Anwendungen können Tokens abrufen
Verwandte Leitfäden
- Gehostetes Login (PKCE) — Login-Flow implementieren
- Rollen & Berechtigungen — RBAC einrichten
- Fine-Grained Authorization — Von Auth0 FGA migrieren
- Benutzer-Import/Export — Massen-Benutzermigration
- Benutzerdefinierte Domains — Auth-Seiten white-labeln