Terug naar hoofdinhoud

Authenticatie in Joomla

14 juni 2026

Wanneer je je gebruikersnaam en wachtwoord in Joomla intypt, moet iets bepalen of die kloppen. Dat iets is niet het loginformulier, en het is ook niet de kerncomponent erachter. Het is een kleine keten van authenticatie-plugins, en zij zijn de echte poortwachters van elke Joomla-site.

Dit artikel legt uit hoe de authenticatie-plugins van Joomla echt werken. Het behandelt de basis voor eigenaren en redacteuren, de dagelijkse instellingen voor beheerders, en de technische details voor ontwikkelaars. Je leert wat de twee plugin-groepen doen, hoe de wachtwoordcontrole precies verloopt, hoe "Onthoud mij" en LDAP daarin passen, en hoe de Web Services API een verzoek met een token in plaats van een formulier authenticeert.

Joomla zet nooit vast in code hoe een wachtwoord wordt gecontroleerd. Het vraagt het aan plugins, en de plugins geven antwoord.

Het doel is eenvoudig: je de authenticatie-plugins goed genoeg laten begrijpen om ze met vertrouwen in te stellen, te beveiligen en te debuggen.

1. De basis

1.1 Wat is een authenticatie-plugin?

Een authenticatie-plugin beantwoordt een enkele vraag: "zijn deze inloggegevens geldig?" Wanneer een bezoeker het loginformulier verstuurt, controleert Joomla het wachtwoord niet zelf. Het roept een event aan en laat elke ingeschakelde authenticatie-plugin naar de inloggegevens kijken. Elke plugin antwoordt met succes, mislukking, of "dit is niet mijn taak".

Dit ontwerp is de reden dat je inloggen via Google, LDAP, single sign-on of je eigen aangepaste methode aan Joomla kunt toevoegen zonder ooit de core te bewerken. Je schrijft een plugin, hij voegt zich in de keten, en Joomla begint het ook aan hem te vragen.

1.2 Twee aparte plugin-groepen

Joomla levert authenticatie-plugins in twee verschillende groepen, en beginners halen ze vaak door elkaar:

Plug-in-groepMapGebruikt door
authentication plugins/authentication/ Het loginformulier van de website en de backend (HTML, met een sessie).
api-authentication plugins/api-authentication/ De Web Services API (REST, geen formulier, geen sessie).

Beide groepen beantwoorden dezelfde eventnaam, maar ze draaien in verschillende applicaties. De authentication-groep bewaakt het loginformulier voor mensen. De api-authentication-groep bewaakt API-aanroepen tussen machines. Het inschakelen van de een heeft geen effect op de ander.

1.3 Het ene event dat ertoe doet

Elke authenticatie-plugin in beide groepen abonneert zich op hetzelfde event: onUserAuthenticate. Joomla roept het aan met de verstuurde inloggegevens, en elke plugin vult een gedeeld response-object in dat ja of nee zegt. Dat ene event is de kern van dit hele artikel.

Naar boven

2. De authenticatie-response

2.1 Hoe Joomla de antwoorden verzamelt

Wanneer het inloggen begint, loopt Joomla de ingeschakelde authenticatie-plugins een voor een af. Het geeft elke plugin een AuthenticationResponse-object en vraagt hem een status in te stellen. Op het moment dat een plugin succes meldt, is de gebruiker geauthenticeerd. Als geen van hen ja zegt, mislukt het inloggen.

Het response-object draagt meer dan een ja of nee. Een geslaagde plugin vult ook de gegevens van de gebruiker in, zodat Joomla het inloggen kan afronden:

EigenschapBetekenis
status Het oordeel: succes, mislukking, geweigerd, enzovoort.
username De gebruikersnaam die wordt gecontroleerd.
email Het e-mailadres van de gebruiker.
fullname De weergavenaam van de gebruiker.
language De voorkeurstaal van de gebruiker.
error_message Een reden, getoond wanneer de status een mislukking is.

Een succes hier betekent alleen dat de inloggegevens geldig zijn. Het is de eerste factor. Als multifactor-authenticatie is ingesteld, daagt Joomla de gebruiker daarna nog uit voor een tweede factor. Die stap wordt afgehandeld door een aparte plugin-groep (multifactorauth), niet door de authenticatie-plugins in dit artikel.

2.2 De statusconstanten

Een plugin geeft niet true of false terug. Hij stelt een van de statusconstanten in op de klasse Joomla\CMS\Authentication\Authentication. Als je ze kent, worden plugin-logs en eigen plugins veel makkelijker te lezen:

ConstanteBetekenis
STATUS_SUCCESS De inloggegevens zijn geldig. De gebruiker mag verder.
STATUS_FAILURE De inloggegevens zijn fout. Inloggen wordt geblokkeerd.
STATUS_DENIED Het account bestaat maar mag niet binnen (geblokkeerd, niet geactiveerd, reset vereist).
STATUS_EXPIRED Het account is verlopen.
STATUS_UNKNOWN De plugin heeft geen mening. Dit is "niet mijn taak", geen fout.
STATUS_CANCEL De authenticatie is geannuleerd. Wordt zelden gebruikt.

De waarde STATUS_UNKNOWN is de beleefde standaard. Een plugin die de inloggegevens niet herkent, laat de status onbekend en laat de volgende plugin het proberen. Zo bestaan meerdere plugins naast elkaar zonder elkaar te bevechten.

Naar boven

3. Authentication - Joomla (de standaard)

3.1 Wat het doet

De plugin Authentication - Joomla (plg_authentication_joomla) is degene die de normale gebruikersnaam en het wachtwoord tegen de database controleert. Hij is op elke site ingeschakeld, en dat moet je zo houden. Schakel je hem uit, dan kan niemand meer met een wachtwoord inloggen.

Zijn logica is kort en zorgvuldig. In gewone woorden doet hij dit:

1. Als het wachtwoord leeg is, meteen mislukken.
2. Zoek de gebruikersnaam op in #__users en lees de opgeslagen hash.
3. Controleer het getypte wachtwoord tegen die hash.
4. Match    → STATUS_SUCCESS, vul email/naam/taal in.
   Geen match → STATUS_FAILURE.

3.2 Hoe wachtwoorden worden opgeslagen

Joomla slaat nooit een wachtwoord in platte tekst op. Het bewaart een gesalte bcrypt-hash in de kolom password van #__users, aangemaakt met de eigen wachtwoord-hashfuncties van PHP. Een opgeslagen waarde ziet er zo uit:

$2y$10$Ux3...   (algoritme, kosten, salt en hash in een string)

De plugin controleert met UserHelper::verifyPassword(), die ook opnieuw hasht bij het inloggen. Als de opgeslagen hash een ouder algoritme of lagere kosten gebruikt dan de huidige instelling, herschrijft Joomla hem stilletjes met de sterkere versie terwijl je inlogt. Je inloggegevens worden in de loop van de tijd veiliger zonder dat iemand iets hoeft te doen.

3.3 Een klein maar slim beveiligingsdetail

Wanneer de gebruikersnaam niet bestaat, voert de plugin toch een wachtwoord-hash uit voordat hij mislukking teruggeeft. Dit lijkt verspilling, maar het is opzettelijk. Het zorgt ervoor dat een login met een echt-maar-fout wachtwoord even lang duurt als een login met een gebruikersnaam die niet bestaat. Een aanvaller kan de reactietijd niet meten om te ontdekken welke gebruikersnamen geldig zijn. Dit heet timing-attack-mitigatie.

3.4 Hij stopt de keten bij succes

Wanneer deze plugin slaagt, roept hij stopPropagation() aan op het event. Dat vertelt Joomla de overige authenticatie-plugins niet meer lastig te vallen, want het antwoord is al een duidelijk ja. Een mislukking stopt de keten niet, dus een latere plugin (bijvoorbeeld LDAP) krijgt nog steeds zijn beurt.

Naar boven

4.1 Wat het aandrijft

De plugin Authentication - Cookie (plg_authentication_cookie) is wat het vinkje Onthoud mij op de frontend-login laat werken. Met deze plugin ingeschakeld blijft een bezoeker die het vinkje aanzet ingelogd over browsersessies heen, zonder het wachtwoord opnieuw te hoeven typen. Zonder de plugin staat het vinkje er wel, maar doet het niets.

Het werkt alleen op de frontend. De plugin slaat de administrator-login volledig over, dus Onthoud mij houdt nooit iemand ingelogd in de backend. Dat is een verstandige beveiligingskeuze.

4.2 De truc met token en serie

Een Onthoud-mij-cookie is meer dan een opgeslagen wachtwoord. Het gebruikt een token en een serie, beide bewaard in de tabel #__user_keys. De cookiewaarde bevat twee delen, samengevoegd met een punt:

{token}.{serie}

De serie blijft hetzelfde gedurende de levensduur van de cookie en identificeert het apparaat. De token is een eenmalig geheim dat Joomla bij elk bezoek vervangt. Wanneer je terugkomt:

  • Joomla vindt de rij in #__user_keys op basis van de serie en een hash van de user agent van je browser.
  • Het controleert de token tegen de opgeslagen hash. Als die overeenkomt, ben je ingelogd en wordt een nieuwe token uitgegeven.
  • Als de serie bekend is maar de token fout, behandelt Joomla het als een mogelijk gestolen cookie. Het verwijdert elke "Onthoud mij" token voor die gebruiker en logt een beveiligingsmelding, zodat een dief en de echte gebruiker niet allebei ingelogd kunnen blijven.

4.3 De instellingen die je kunt afstemmen

ParameterStandaardBetekenis
cookie_lifetime 60 Hoeveel dagen de Onthoud-mij-cookie geldig blijft.
key_length 16 De lengte van de gegenereerde token. Opties zijn 8, 16, 32, 64.

Een kortere levensduur is veiliger maar vraagt mensen vaker in te loggen. De standaard van 60 dagen is voor de meeste sites een redelijke balans.

Naar boven

5. Authentication - LDAP (externe directory)

5.1 Wanneer je het nodig hebt

De plugin Authentication - LDAP (plg_authentication_ldap) controleert inloggegevens tegen een externe LDAP- of Active Directory-server in plaats van de Joomla-database. Organisaties gebruiken het zodat medewerkers in Joomla inloggen met hetzelfde account dat ze voor e-mail en het netwerk gebruiken. Het is standaard uitgeschakeld, omdat de meeste sites het niet nodig hebben.

5.2 Twee manieren om te verbinden

De plugin biedt twee strategieen via zijn parameter auth_method:

MethodeHoe het authenticeert
Bind Bouwt de volledige directory-naam (DN) van de gebruiker uit een sjabloon en bindt direct aan LDAP met het getypte wachtwoord. Eenvoudig, geen serviceaccount nodig.
Search Bindt eerst met een serviceaccount, zoekt de gebruiker op, en bindt daarna opnieuw als die gebruiker met het getypte wachtwoord. Gebruik dit wanneer de DN niet voorspelbaar is.

Een geslaagde bind is het bewijs: als de LDAP-server de DN en het wachtwoord van de gebruiker accepteert, zijn de inloggegevens geldig en geeft de plugin STATUS_SUCCESS terug.

5.3 Belangrijke parameters

ParameterDoel
host / port Het adres en de poort van de LDAP-server.
encryption Verbindingsbeveiliging: none, tls of ssl.
base_dn De tak van de directory waarin gezocht wordt.
users_dn Het DN-sjabloon voor de bind-methode, met een [username]-placeholder.
searchstring Het filter voor de search-methode, met een [search]-placeholder.
ldap_uid / ldap_email / ldap_fullname Welke directory-velden gekoppeld worden aan de gebruikersnaam, e-mail en volledige naam.

Gebruik in productie altijd tls of ssl. Een gewone LDAP-verbinding stuurt het wachtwoord onversleuteld over het netwerk.

Naar boven

6. Authenticatie voor de Web Services API

6.1 Een andere wereld

De Joomla Web Services API heeft geen loginformulier en geen sessiecookie. Een programma roept een REST-endpoint aan en moet bij elk afzonderlijk verzoek bewijzen wie het is. Dat is de taak van de plugin-groep api-authentication, die in plugins/api-authentication/ zit en hetzelfde event onUserAuthenticate beantwoordt in de API-applicatie.

Joomla levert twee van deze plugins:

Plug-inHoe het verzoek de identiteit bewijst
API Authentication - Token Een persoonlijke token, verstuurd in een request-header. De aanbevolen methode.
API Authentication - Web Services Basic HTTP Basic Auth: gebruikersnaam en wachtwoord bij elke aanroep.

Welke plugin het verzoek ook accepteert, de resulterende gebruiker behoudt al zijn normale groepen en rechten. Een API-gebruiker is nooit machtiger dan dezelfde gebruiker op de website.

Naar boven

7. API Authentication - Basic

7.1 Wat het doet

De plugin Web Services Basic (plg_api-authentication_basic) laat een client bij elk API-verzoek een gebruikersnaam en wachtwoord meesturen, met standaard HTTP Basic-authenticatie. Joomla leest de inloggegevens, controleert ze tegen de tabel #__users met dezelfde aanroep UserHelper::verifyPassword() die het loginformulier gebruikt, en geeft succes of mislukking terug.

curl -u mijngebruikersnaam:mijnwachtwoord \
     https://example.test/api/index.php/v1/users

7.2 Gebruik het met zorg

Basic-authenticatie stuurt het echte accountwachtwoord bij elk verzoek mee. Dat heeft twee gevolgen. Ten eerste mag je het alleen over HTTPS gebruiken, anders reist het wachtwoord onversleuteld mee. Ten tweede is een script dat een werkend wachtwoord opslaat een serieus risico als het lekt. Voor de meeste integraties is de token-plugin de veiligere keuze, omdat een token kan worden ingetrokken zonder het wachtwoord van de gebruiker te wijzigen.

Naar boven

8. API Authentication - Token

8.1 Wat het doet

De plugin API Authentication - Token (plg_api-authentication_token) is de aanbevolen manier om API-aanroepen te authenticeren. Elke gebruiker krijgt een persoonlijke token, en de client stuurt die bij elk verzoek als header mee. Er verlaat nooit een wachtwoord de server.

curl -H "Authorization: Bearer <jouw-token>" \
     https://example.test/api/index.php/v1/users

# Joomla accepteert ook de oudere header:
curl -H "X-Joomla-Token: <jouw-token>" \
     https://example.test/api/index.php/v1/users

8.2 Hoe de token is opgebouwd

De token is geen willekeurige string die de server opslaat en vergelijkt. Het is een kleine, zelfbeschrijvende waarde die Joomla met rekenwerk kan verifieren. Gedecodeerd bevat hij drie delen:

{algoritme} : {userId} : {HMAC}

Joomla bewaart per gebruiker een geheim zaadje (seed) in de tabel #__user_profiles onder de sleutel joomlatoken.token. Om een verzoek te verifieren, herberekent het een HMAC uit dat zaadje en het eigen secret van de site, en vergelijkt dat met de HMAC in de token. De vergelijking gebruikt Crypt::timingSafeCompare(), een controle met constante looptijd die een aanvaller geen enkele aanwijzing uit de timing geeft. Alleen sha256 en sha512 worden als algoritme geaccepteerd.

8.3 Het instellen

  1. Schakel de gebruikers-plugin User - Joomla API Token in (die voegt het tokenveld toe) en de plugin API Authentication - Token (die leest de header).
  2. Open het profiel van de gebruiker in de backend, zoek het tabblad Joomla API Token, en genereer een token.
  3. Kopieer de token een keer. Joomla bewaart alleen het zaadje, niet de token zelf, dus je kunt hem later niet meer teruglezen.

Een vlag bij joomlatoken.enabled in #__user_profiles laat je de token van een gebruiker aan- of uitzetten. De plugin weigert ook een token voor elk account dat geblokkeerd is, nog niet geactiveerd, of gemarkeerd om zijn wachtwoord te resetten, en geeft dan STATUS_DENIED terug.

8.4 Welke gebruikers een token mogen gebruiken

Standaard mogen alleen gebruikers in de groep Super Users met een token authenticeren. Je verbreedt dit via de parameter allowedUserGroups van de plugin User - Joomla API Token. Houd deze lijst zo smal als de taak toelaat.

Naar boven

9. Onder de motorkap (ontwikkelaarsblik)

9.1 De betrokken tabellen

TabelRol
#__users Bevat de gebruikersnaam en de bcrypt-password-hash, plus de vlaggen block, activation en requireReset.
#__user_keys Slaat de Onthoud-mij-token en serie voor de Cookie-plugin op.
#__user_profiles Bevat het API-tokenzaadje (joomlatoken.token) en de bijbehorende ingeschakeld-vlag (joomlatoken.enabled).
#__extensions Waar elke plugin is in- of uitgeschakeld (enabled = 1 of 0).

9.2 De authenticatieservice

De plugins draaien zichzelf niet. Een kleine serviceklasse, Joomla\CMS\Authentication\Authentication, stuurt de hele keten aan. Wanneer het loginformulier (of je eigen code) hem vraagt te authenticeren, laadt het de ingeschakelde plugins, roept het event aan, verzamelt elke response, en geeft het eindoordeel terug:

use Joomla\CMS\Authentication\Authentication;

$authentication = Authentication::getInstance();
$response       = $authentication->authenticate($credentials, $options);

if ($response->status === Authentication::STATUS_SUCCESS) {
    // de inloggegevens zijn geldig
}

Je roept dit zelden zelf aan, omdat $app->login() het voor je doet. Maar weten dat deze klasse bestaat verklaart waar het event onUserAuthenticate vandaan komt en waarom de statusconstanten erop leven. Elke ingeschakelde plugin is een strategie die de service om de beurt raadpleegt.

9.3 De vorm van een plugin

Een moderne authenticatie-plugin is een kleine namespaced klasse. Hij declareert het event dat hij beantwoordt en doet zijn werk in een bijbehorende methode:

namespace Joomla\Plugin\Authentication\Example\Extension;

use Joomla\CMS\Authentication\Authentication;
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\Event\SubscriberInterface;

final class Example extends CMSPlugin implements SubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return ['onUserAuthenticate' => 'onUserAuthenticate'];
    }

    public function onUserAuthenticate($event): void
    {
        $credentials = $event->getArgument('credentials');
        $response    = $event->getAuthenticationResponse();

        if ($this->isValid($credentials)) {
            $response->status = Authentication::STATUS_SUCCESS;
            $response->email  = '...';
            $event->stopPropagation();
        } else {
            $response->status = Authentication::STATUS_FAILURE;
        }
    }
}

Dit zelfde patroon is hoe echte single-sign-on-integraties worden gebouwd. Een login via OAuth 2.0, SAML, Keycloak, Microsoft Entra ID of Okta is gewoon een authenticatie-plugin die de inloggegevens controleert tegen een externe identity provider in plaats van #__users, en daarna hetzelfde response-object invult. De core verandert nooit.

Wanneer een plugin een gebruiker vindt, laadt hij het volledige account met de moderne UserFactoryInterface in plaats van het oude statische Factory::getUser(). Binnen een plugin bereik je het via $this->getUserFactory()->loadUserById($id):

$user = $this->getUserFactory()->loadUserById($id);

$response->email    = $user->email;
$response->fullname = $user->name;

De factory wordt geinjecteerd via de service provider van de plugin, zodat de code dependency injection ondersteunt, testbaar blijft en statische aanroepen vermijdt. Dit is de standaardmanier om een gebruiker te laden in Joomla 6.

9.4 Waarom je bij een mislukking niet moet blokkeren

Een nette plugin stelt STATUS_SUCCESS in en roept stopPropagation() alleen aan wanneer hij zeker is. Bij een mislukking moet hij de deur openlaten voor de volgende plugin door STATUS_FAILURE in te stellen (of STATUS_UNKNOWN als de inloggegevens simpelweg niet zijn zaak zijn) en stilletjes terug te keren. Zo bestaan de Joomla-, Cookie- en LDAP-plugins naast elkaar: elk probeert om de beurt, en het eerste zekere ja wint.

9.5 De mapindeling

plugins/authentication/joomla/
├─ services/provider.php              (DI-container-bedrading)
├─ src/Extension/Joomla.php           (de plugin-klasse)
└─ joomla.xml                         (manifest, parameters)

De api-authentication-plugins volgen dezelfde indeling onder plugins/api-authentication/. Het enige echte verschil is de applicatie waarin ze draaien.

Naar boven

10. SEO en metadata

Authenticatie is een zaak van de backend en van machines, dus het heeft op zichzelf geen directe SEO-waarde. Er is hier niets voor een zoekmachine om te indexeren, en dat hoort er ook niet te zijn. Maar twee indirecte punten zijn het waard om in gedachten te houden.

Ten eerste: stel API-tokens of Basic-inloggegevens nooit bloot in iets dat een crawler of een browser kan bereiken, zoals een openbare repository, een client-side script, of een URL-querystring. Een gelekte inloggegevens-set is veel schadelijker dan een slechte ranking. Ten tweede: bied elk geauthenticeerd pad over HTTPS aan. Zowel zoekmachines als browsers markeren onveilig wachtwoord- en tokenverkeer, en dat vertrouwenssignaal beschermt de reputatie van je hele domein.

Naar boven

11. Veelvoorkomende fouten en valkuilen

11.1 De plugin Authentication - Joomla uitschakelen

Symptoom: niemand kan ergens met een gebruikersnaam en wachtwoord inloggen.

Oplossing: schakel de plugin Authentication - Joomla opnieuw in. Als je buiten de backend bent gesloten, zet dan enabled = 1 voor hem rechtstreeks in de tabel #__extensions.

11.2 Onthoud mij werkt nooit

Symptoom: het vinkje Onthoud mij verschijnt op de frontend-login, maar niemand blijft ingelogd.

Oplossing: schakel de plugin Authentication - Cookie in. Zonder hem doet het vinkje niets. Onthoud dat het opzettelijk nooit voor de backend geldt.

11.3 De twee plugin-groepen door elkaar halen

Symptoom: je schakelt een plugin in om API-toegang te repareren, maar in plaats daarvan verandert de website-login, of andersom.

Oplossing: de authentication-groep bedient het loginformulier; de api-authentication-groep bedient de Web Services API. Schakel de plugin in de groep in die bij het probleem hoort. Om precies te zien welke plugins in beide groepen tegelijk aanstaan, bevraag je de database:

SELECT name, folder, enabled FROM #__extensions
WHERE folder IN ('authentication', 'api-authentication');

11.4 De API-token geeft 401 terwijl hij klopt

Symptoom: een geldige token wordt geweigerd met een niet-geautoriseerd-fout.

Oplossing: controleer drie dingen. De plugin API Authentication - Token moet ingeschakeld zijn, de gebruiker moet in een groep zitten die in allowedUserGroups staat, en het account mag niet geblokkeerd of in afwachting van activatie zijn.

11.5 LDAP over een onversleutelde verbinding

Symptoom: LDAP-login werkt, maar wachtwoorden reizen onversleuteld over het netwerk.

Oplossing: zet de parameter encryption op tls of ssl en bevestig dat het certificaat van de server vertrouwd is. Draai LDAP in productie nooit met encryption op none.

11.6 Basic Auth gebruiken waar een token thuishoort

Symptoom: een integratiescript slaat een echt accountwachtwoord op om de API aan te roepen.

Oplossing: stap over op de token-plugin. Een token kan op zichzelf worden ingetrokken zonder een wachtwoordwijziging af te dwingen, en hij beperkt de schade als het script lekt.

Naar boven

12. Best practices

Als je maar een paar dingen uit dit artikel onthoudt, onthoud dan deze:

  • Houd de plugin Authentication - Joomla ingeschakeld. Het is de wachtwoordcontrole voor de hele site.
  • Schakel de plugin Authentication - Cookie alleen in als je daadwerkelijk Onthoud mij wilt, en weet dat het de backend nooit dekt.
  • Gebruik LDAP voor gedeelde bedrijfsaccounts, altijd over TLS of SSL, nooit over een onversleutelde verbinding.
  • Geef de voorkeur aan API-tokens boven Basic-authenticatie, en houd allowedUserGroups zo smal mogelijk.
  • Behandel tokens en Basic-inloggegevens als wachtwoorden: alleen over HTTPS, nooit in een repository of een browserscript, en trek ze in zodra ze mogelijk lekken.
  • Voeg nieuwe loginmethoden (SSO, social, eigen) toe met je eigen authenticatie-plugin. Pas nooit de core aan.
  • Laat je plugin bij een mislukking de vraag doorgeven; stop de keten alleen wanneer je zeker bent van een succes.
Naar boven

13. In het kort

GROEPEN         authentication       loginformulier (HTML, sessie)
                api-authentication   Web Services API (REST, geen sessie)

EVENT           onUserAuthenticate   beantwoord door elke auth-plugin

LOGIN-PLUGINS   Joomla   wachtwoordcontrole tegen #__users (aan laten)
                Cookie   Onthoud mij, alleen frontend, #__user_keys
                LDAP     externe directory, bind of search, gebruik TLS

API-PLUGINS     Token    Authorization: Bearer / X-Joomla-Token header
                Basic    curl -u gebruiker:wachtwoord  (alleen HTTPS)

STATUS          STATUS_SUCCESS  geldig, ga verder
                STATUS_FAILURE  foute inloggegevens
                STATUS_DENIED   geblokkeerd / inactief / reset vereist
                STATUS_UNKNOWN  "niet mijn taak", probeer de volgende plugin

TABELLEN        #__users          gebruikersnaam + bcrypt-wachtwoordhash
                #__user_keys      Onthoud-mij-token + serie
                #__user_profiles  API-tokenzaadje (joomlatoken.token)
                #__extensions     waar elke plugin is ingeschakeld

API-SETUP       schakel User - Joomla API Token + API Auth Token-plugin in
                genereer token op het gebruikersprofiel, kopieer hem een keer
                verbreed allowedUserGroups voorzichtig

DIAGNOSE        SELECT name, folder, enabled FROM #__extensions
                WHERE folder IN ('authentication','api-authentication');
Naar boven

14. Samenvatting

Authenticatie in Joomla lijkt op een enkele wachtwoordcontrole, maar het is een klein systeem van samenwerkende plugins:

  • Twee plugin-groepen delen een event: authentication bewaakt het loginformulier, api-authentication bewaakt de Web Services API.
  • Authentication - Joomla doet de standaard bcrypt-wachtwoordcontrole, hasht opnieuw bij het inloggen, en verdedigt tegen timing-aanvallen.
  • Authentication - Cookie drijft Onthoud mij aan met een roterende token en serie, alleen op de frontend.
  • Authentication - LDAP controleert inloggegevens tegen een externe directory door eraan te binden.
  • API Token en Basic laten programma's authenticeren zonder formulier; de token-methode is veiliger omdat hij op zichzelf kan worden ingetrokken.
  • Het response-object en zijn statusconstanten zijn hoe elke plugin ja, nee, of "niet mijn taak" zegt.

Zodra je authenticatie ziet als een event dat door een keten van plugins wordt beantwoord, wordt het hele systeem voorspelbaar. Je weet welke plugin je moet inschakelen, waar elk zijn gegevens opslaat, en waar je moet kijken wanneer een login of een API-aanroep wordt geweigerd.

Als je site last heeft van logins die zonder duidelijke reden mislukken, een Onthoud mij die niet blijft plakken, of een API-token die steeds wordt geweigerd, ligt de oorzaak bijna altijd in een van de lagen hierboven. Het in de juiste volgorde terugzoeken is precies het soort methodisch werk dat een Joomla-specialist als eerste doet, en het is vaak het verschil tussen een site die je kunt vertrouwen en een die je niet kunt vertrouwen.

Naar boven
Authenticatie in Joomla
Peter Martin
Peter Martin

Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.