logologo
Start
Handbuch
Entwickler
Plugins
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Start
Handbuch
Entwickler
Plugins
API
logologo

Benutzerauthentifizierung

Überblick
Authenticator-Verwaltung

Authentifizierungstypen

Passwort
SMS

OIDC

Konfiguration

Beispiele

Google-Login
Microsoft-Login

SAML

Konfiguration

Beispiele

Google-Login
LDAP
CAS
WeChat Work
DingTalk
API-Schlüssel

Entwicklerhandbuch

Authentifizierungstypen erweitern
API-Referenz

Verifizierung

Überblick

Verifizierungstypen

SMS
TOTP-Authenticator

Entwicklerhandbuch

Verifizierungstypen erweitern
Verifizierungsszenarien erweitern
SMS-Anbieter erweitern
API-Referenz
Zwei-Faktor-Authentifizierung (2FA)
Next PageÜberblick
KI-Übersetzungshinweis

Diese Dokumentation wurde automatisch von KI übersetzt.

#Authentifizierungstypen erweitern

#Überblick

NocoBase ermöglicht es Ihnen, Benutzerauthentifizierungstypen nach Bedarf zu erweitern. Die Benutzerauthentifizierung lässt sich grundsätzlich in zwei Typen unterteilen: Zum einen die Bestimmung der Benutzeridentität innerhalb der NocoBase-Anwendung selbst, wie z. B. die Anmeldung mit Passwort oder SMS. Zum anderen die Bestimmung der Benutzeridentität durch Drittanbieterdienste, die das Ergebnis über Callbacks an die NocoBase-Anwendung übermitteln, wie z. B. OIDC oder SAML. Der Authentifizierungsprozess für diese beiden Typen in NocoBase ist im Wesentlichen wie folgt:

#Ohne Abhängigkeit von Drittanbieter-Callbacks

  1. Der Client ruft über das NocoBase SDK die Anmeldeschnittstelle api.auth.signIn() auf und fordert die Anmeldeschnittstelle auth:signIn an. Dabei wird der Bezeichner des aktuell verwendeten Authentifikators über den Request-Header X-Authenticator an das Backend übermittelt.
  2. Die auth:signIn-Schnittstelle leitet die Anfrage basierend auf dem Authentifikator-Bezeichner im Request-Header an den entsprechenden Authentifizierungstyp weiter. Die validate-Methode der für diesen Authentifizierungstyp registrierten Authentifizierungsklasse übernimmt dann die entsprechende logische Verarbeitung.
  3. Der Client empfängt Benutzerinformationen und den Authentifizierungs-token aus der auth:signIn-Schnittstellenantwort, speichert den token im Local Storage und schließt die Anmeldung ab. Dieser Schritt wird automatisch intern vom SDK verarbeitet.

#Mit Abhängigkeit von Drittanbieter-Callbacks

  1. Der Client ruft über eine selbst registrierte Schnittstelle (z. B. auth:getAuthUrl) die URL für die Drittanbieter-Anmeldung ab und übermittelt gemäß Protokoll Informationen wie den Anwendungsnamen und den Authentifikator-Bezeichner.
  2. Nach der Weiterleitung zur Drittanbieter-URL zur Anmeldung ruft der Drittanbieterdienst die Callback-Schnittstelle der NocoBase-Anwendung (die selbst registriert werden muss, z. B. auth:redirect) auf. Er gibt das Authentifizierungsergebnis sowie Informationen wie den Anwendungsnamen und den Authentifikator-Bezeichner zurück.
  3. Die Callback-Schnittstellenmethode parst die Parameter, um den Authentifikator-Bezeichner zu erhalten, ruft über den AuthManager die entsprechende Authentifizierungsklasse ab und ruft aktiv die Methode auth.signIn() auf. Die Methode auth.signIn() wiederum ruft die Methode validate() auf, um die Authentifizierungslogik zu verarbeiten.
  4. Nachdem die Callback-Methode den Authentifizierungs-token erhalten hat, leitet sie mit dem Statuscode 302 zurück zur Frontend-Seite weiter und übergibt den token sowie den Authentifikator-Bezeichner als URL-Parameter, z. B. ?authenticator=xxx&token=yyy.

Im Folgenden wird beschrieben, wie Sie serverseitige Schnittstellen und clientseitige Benutzeroberflächen registrieren.

#Serverseite

#Authentifizierungsschnittstelle

Der NocoBase-Kernel bietet die Registrierung und Verwaltung zur Erweiterung von Authentifizierungstypen. Die Kernlogik für die Erweiterung eines Anmelde-Plugins erfordert die Vererbung von der abstrakten Klasse Auth des Kernels und die Implementierung der entsprechenden Standardschnittstellen.
Eine vollständige API-Referenz finden Sie unter Auth.

import { Auth } from '@nocobase/auth';

class CustomAuth extends Auth {
  set user(user) {}
  get user() {}

  async check() {}
  async signIn() {}
}

Der Kernel registriert auch grundlegende Ressourcenoperationen im Zusammenhang mit der Benutzerauthentifizierung.

APIBeschreibung
auth:checkÜberprüfen, ob Benutzer angemeldet ist
auth:signInAnmelden
auth:signUpRegistrieren
auth:signOutAbmelden

In den meisten Fällen kann der erweiterte Benutzerauthentifizierungstyp auch die bestehende JWT-Authentifizierungslogik nutzen, um Anmeldeinformationen für den API-Zugriff des Benutzers zu generieren. Die BaseAuth-Klasse im Kernel bietet eine grundlegende Implementierung der abstrakten Klasse Auth. Siehe BaseAuth. Plugins können direkt von der BaseAuth-Klasse erben, um Teile des Logikcodes wiederzuverwenden und so die Entwicklungskosten zu senken.

import { BaseAuth } from '@nocobase/auth';

class CustomAuth extends BaseAuth {
  constructor(config: AuthConfig) {
    // Benutzer-Sammlung festlegen
    const userCollection = config.ctx.db.getCollection('users');
    super({ ...config, userCollection });
  }

  // Benutzerauthentifizierungslogik implementieren
  async validate() {}
}

#Benutzerdaten

Bei der Implementierung der Benutzerauthentifizierungslogik ist in der Regel die Verarbeitung von Benutzerdaten involviert. In einer NocoBase-Anwendung sind die zugehörigen Sammlungen standardmäßig wie folgt definiert:

Daten-SammlungBeschreibungPlugin
usersSpeichert Benutzerinformationen wie E-Mail, Spitzname und PasswortBenutzer-Plugin (@nocobase/plugin-users)
authenticatorsSpeichert Authentifikator-Informationen (Authentifizierungstyp-Entität), entsprechend dem Authentifizierungstyp und der KonfigurationBenutzerauthentifizierungs-Plugin (@nocobase/plugin-auth)
usersAuthenticatorsVerknüpft Benutzer und Authentifikatoren, speichert Benutzerinformationen unter dem entsprechenden AuthentifikatorBenutzerauthentifizierungs-Plugin (@nocobase/plugin-auth)

Im Allgemeinen können erweiterte Anmeldemethoden die Sammlungen users und usersAuthenticators verwenden, um die entsprechenden Benutzerdaten zu speichern. Nur in speziellen Fällen ist es notwendig, eine neue Sammlung hinzuzufügen.

Die Hauptfelder von usersAuthenticators sind:

FeldBeschreibung
uuidEindeutiger Benutzerbezeichner für diese Authentifizierungsmethode, z. B. Telefonnummer oder WeChat OpenID
metaJSON-Feld für weitere zu speichernde Informationen
userIdBenutzer-ID
authenticatorName des Authentifikators (eindeutiger Bezeichner)

Für Benutzerabfragen und -erstellungen kapselt das Datenmodell AuthModel der authenticators ebenfalls mehrere Methoden, die in der CustomAuth-Klasse über this.authenticator[Methodenname] verwendet werden können. Eine vollständige API-Referenz finden Sie unter AuthModel.

import { AuthModel } from '@nocobase/plugin-auth';

class CustomAuth extends BaseAuth {
  async validate() {
    // ...
    const authenticator = this.authenticator as AuthModel;
    this.authenticator.findUser(); // Benutzer abfragen
    this.authenticator.newUser(); // Neuen Benutzer erstellen
    this.authenticator.findOrCreateUser(); // Benutzer abfragen oder erstellen
    // ...
  }
}

#Registrierung des Authentifizierungstyps

Die erweiterte Authentifizierungsmethode muss beim Authentifizierungsverwaltungsmodul registriert werden.

class CustomAuthPlugin extends Plugin {
  async load() {
    this.app.authManager.registerTypes('custom-auth-type', {
      auth: CustomAuth,
    });
  }
}

#Clientseite

Die clientseitige Benutzeroberfläche wird über die vom Client des Benutzerauthentifizierungs-Plugins bereitgestellte Schnittstelle registerType registriert:

import AuthPlugin from '@nocobase/plugin-auth/client';

class CustomAuthPlugin extends Plugin {
  async load() {
    const auth = this.app.pm.get(AuthPlugin);
    auth.registerType('custom-auth-type', {
      components: {
        SignInForm, // Anmeldeformular
        SignInButton, // Anmelde-Button (Drittanbieter), kann alternativ zum Anmeldeformular verwendet werden
        SignUpForm, // Registrierungsformular
        AdminSettingsForm, // Admin-Einstellungen-Formular
      },
    });
  }
}

#Anmeldeformular

Wenn mehrere Authentifikatoren, die einem Authentifizierungstyp entsprechen, Anmeldeformulare registriert haben, werden diese in Form von Tabs angezeigt. Der Tab-Titel entspricht dem im Backend konfigurierten Titel des Authentifikators.

#Anmelde-Button

Dies ist in der Regel ein Anmelde-Button für Drittanbieter, kann aber tatsächlich jede beliebige Komponente sein.

#Registrierungsformular

Wenn Sie von der Anmeldeseite zur Registrierungsseite wechseln möchten, müssen Sie dies selbst in der Anmeldekomponente implementieren.

#Admin-Einstellungen-Formular

Oben sehen Sie die allgemeine Authentifikator-Konfiguration, unten den Teil des benutzerdefinierten Konfigurationsformulars, der registriert werden kann.

#API-Anfragen

Um clientseitig Anfragen an Schnittstellen zur Benutzerauthentifizierung zu stellen, können Sie das von NocoBase bereitgestellte SDK verwenden.

import { useAPIClient } from '@nocobase/client';

// In einer Komponente verwenden
const api = useAPIClient();
api.auth.signIn(data, authenticator);

Eine detaillierte API-Referenz finden Sie unter @nocobase/sdk - Auth.