Authentifizierung und Sitzungen
Diese Seite richtet sich an Entwickler, die eine Security-Firewall, Guards oder ein Authentifizierungs-Backend
konfigurieren. In Exponential sind Benutzer Inhalte: Jeder Benutzer ist ein Inhaltsobjekt der Benutzerklasse mit
einem ezuser-Feld, das Login, E-Mail-Adresse und Passwort-Hash enthält, und liegt in Benutzergruppen im
Inhaltsbaum. Die Authentifizierung übernehmen das Kernel-Modul user und die Login-Handler; die Sitzung hält den
angemeldeten Benutzer fest.
Inhalt
- Benutzer und der anonyme Benutzer
- Anmelden
- Sitzungen
- Anmeldung erzwingen
- Maschinen: API-Schlüssel und OAuth2
- Der aktuelle Benutzer im Code
- Im Vergleich mit anderen Frameworks
Benutzer und der anonyme Benutzer
| Konzept | In Exponential |
|---|---|
| Benutzermodell | ein Inhaltsobjekt der Benutzerklasse (site.ini [UserSettings] UserClassID, bei einer Standardinstallation 4) mit einem ezuser-Attribut; PHP-Klasse eZUser |
| Gruppen | Benutzergruppen-Objekte im Baum; Rollen werden Gruppen oder Benutzern zugewiesen |
| Gast | ein echter Benutzer, der anonyme Benutzer (site.ini [UserSettings] AnonymousUserID, bei einer Standardinstallation 10), mit einer eigenen Rolle |
| Profilfelder | Attribute der Benutzerklasse, die wie jeder andere Inhalt bearbeitet werden |
Weil Benutzer Inhalte sind, erhalten sie Versionen, Übersetzungen ihrer Profilfelder, Berechtigungen und Suche wie jeder andere Inhalt.
Anmelden
- Der View
user/loginmeldet einen Benutzer an;user/logout,user/register,user/forgotpasswordunduser/activatetun, was ihr Name sagt. - Login-Handler prüfen die Zugangsdaten:
site.ini [UserSettings] LoginHandler[](standardwird mitgeliefert;LDAPundtextfilestehen als Alternativen bereit). Der erste Handler, der die Zugangsdaten akzeptiert, meldet den Benutzer an. Ein eigener Handler ist ein Erweiterungspunkt (Login-Handler für Benutzer). - Die Anmeldung in zwei Schritten (Authenticator-App oder Code per E-Mail) stammt aus der Erweiterung
sevenx_authentication_2fa, einem Login-Handler, der vorstandardeingetragen wird (Anmeldung in zwei Schritten). - Im Code prüft
eZUser::loginUser( $login, $password )die Zugangsdaten und meldet den Benutzer an.
Sitzungen
- Eine Sitzung hält einen Browser angemeldet. Sie endet
site.ini [Session] SessionTimeoutSekunden nach ihrer letzten Nutzung (mitgeliefert: 31104000, also 360 Tage). - Ein leeres
site.ini [Session] Handler(die Voreinstellung) bedeutetezpSessionHandlerPHP: die Sitzungsspeicherung von PHP selbst.ezpSessionHandlerDBspeichert Sitzungen in der Tabelleezsession, sodass Setup > Sitzungen sie auflisten und entfernen kann (Sitzungen). Ein Symfony-basierter Handler (ezpSessionHandlerSymfony) kommt zum Einsatz, wenn der Kernel innerhalb von Symfony läuft. - Lesen und schreiben Sie Sitzungswerte über
eZHTTPTool::instance()(setSessionVariable(),sessionVariable(),hasSessionVariable()), nicht direkt über$_SESSION. - Sitzungscookies tragen das Präfix aus
[Session] SessionNamePrefixim Namen.
Anmeldung erzwingen
| Bedarf | Einstellung |
|---|---|
| Ein ganzer Siteaccess nur für angemeldete Benutzer (die Administrationsoberfläche, ein Intranet) | site.ini [SiteAccessSettings] RequireUserLogin=true für diesen Siteaccess |
| Views, die auf einem solchen Siteaccess ohne Anmeldung erreichbar sind | [SiteAccessSettings] AnonymousAccessList[] (user/register, user/forgotpassword ...) |
| Anmeldung vor einem Bereich einer öffentlichen Website | eine Request-Regel mit Action=login (Middleware) |
| Wer einen Siteaccess überhaupt benutzen darf | die Richtlinie user/login, eingeschränkt nach Siteaccess (Autorisierung) |
Maschinen: API-Schlüssel und OAuth2
Maschinen melden sich nicht über ein Formular an. Die REST-API akzeptiert persönliche API-Schlüssel
(Authorization: Bearer expk_...) und OAuth2-Tokens (POST /api/auth/v1/oauth/token); expservices hat eigene
Tokens (OAuth und API-Schlüssel,
Persönliche API-Schlüssel). Unabhängig von der Art der Zugangsdaten wird jeder Aufruf
gegen die Richtlinien des Benutzers geprüft.
Der aktuelle Benutzer im Code
$user = eZUser::currentUser();
if ( !$user->isRegistered() ) { /* anonymous */ }
$userID = eZUser::currentUserID();Auf der Kommandozeile und in Workern ist der Benutzer anonym, bis der Code einen Benutzer anmeldet, zum Beispiel
einen eigenen Integrationsbenutzer mit eZUser::setCurrentlyLoggedInUser( $user, $user->id() ); niemals den
gemeinsam genutzten Administrator (Zugriffskontrolle im Code).
In Templates: fetch( 'user', 'current_user' ).
Im Vergleich mit anderen Frameworks
| Framework | Konzept | Exponential |
|---|---|---|
| Symfony | User-Provider, Authenticators, Firewalls | die Benutzerklasse, Login-Handler, Anmelderegeln pro Siteaccess |
| Laravel | Guards, Provider, Sanctum-Tokens | Sitzungsanmeldung, Login-Handler, API-Schlüssel und OAuth2 für die REST-API |
| Django | User-Modell, Authentifizierungs-Backends | Benutzerobjekte, Login-Handler |
| Rails | Devise, has_secure_password | das Benutzermodul und Login-Handler, eingebaut |
| Spring | Filterkette von Spring Security | Login-Handler, Request-Regeln, Richtlinien |
Verwandte Seiten
- Konten und Anmeldung
- Mitgliederregistrierung und Mitgliederbereiche
- Sicherheit und Audit
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.