Authentifizierung
Die Authentifizierung-API erlaubt es Modulen, QUIQQER mit eigenen Authentifizierungsmethoden zu erweitern. QUIQQER bietet schon einige Authentifizierungsmethoden von Haus aus an.
- QUIQQER Standard Authentifizierung
- QUIQQER Authentication with Google Authenticator
- QUIQQER Authentication via Facebook Login
Ablauf der Authentifizierung
Neuer Authenticator realisieren
Ein Authenticator ist eine Authentifizierungsklasse welche einen Benutzer am QUIQQER System über externe Services anmeldet.
Vorgehensweise:
- Authenticator Provider registrieren
- Authenticator Provider realisieren
Authenticator Provider registrieren
Erweitern Sie die package.xml um einen <auth>
Provider Eintrag. Das src
Attribut gibt an, wie Ihr neuer Authenticator aufgerufen werden kann.
<quiqqer>
<package>
<!-- .... PAKET DATEN -->
<provider>
<auth src="\QUI\NameSpace\NameSpace\MyAuthenticator" />
</provider>
</package>
</quiqqer>
Authenticator Provider realisieren
Ein Authenticator muss das QUI\Users\AuthenticatorInterface
implementieren. Die einfachste Methode mit einem Authenticator anzufangen ist es, vom QUI\Users\AbstractAuthenticator
zu erben. So müssen Sie nicht alle Methoden, die das QUI\Users\AuthenticatorInterface
vorgibt, selbst implementieren.
<?php
namespace QUI\NameSpace\NameSpace;
use QUI;
/**
* Class MyAuthenticator
*/
class MyAuthenticator extends QUI\Users\AbstractAuthenticator
{
public function __construct($username= '')
{
}
public function auth($authData)
{
// $authData = Authenzifizierungsdaten / password, Hashes oder ähnliches
// HIer findet der Authenzifizierungsprozess statt
}
/**
* @param null|\QUI\Locale $Locale
* @return string
*/
public function getTitle($Locale = null)
{
return 'Title';
}
/**
* @param null|\QUI\Locale $Locale
* @return string
*/
public function getDescription($Locale = null)
{
return 'Description';
}
}
Dem Konstruktor wird zu Anfang der Benutzername übergeben welche sich am System anmelden möchten über die auth
Methode wird der Benutzer am System authentifiziert. Diese zwei Methoden bilden das grundsätzliche Vorgehen für den Authentifizierungsprozesses.
Ist der Authentifizierungsprozesses nicht erfolgreich muss die auth
methode ein Exception vom Typ QUI\Users\Exception
werfen.
<?php
public function auth($password)
{
if (!is_string($this->username) || empty($this->username)) {
throw new QUI\Users\Exception(
array('quiqqer/system', 'exception.login.fail.wrong.username.input'),
401
);
}
}
Für Funktionalität wie, Passwort vergessen, Registrierung, Login oder Einstellungen kann der Authenticator eigene QUI\Controls
mitbringen.
Hierzu können folgende Methoden im eigenen Authenticator überschrieben werden:
<?php
public static function getLoginControl()
{
}
public static function getRegisterControl()
{
}
public static function getPasswordResetControl()
{
}
public static function getSettingsControl()
{
}
Beispiel für ein eigenes Login
<?php
/**
* This file contains QUI\Users\Auth\QUIQQER
*/
namespace QUI\Users\Auth;
use QUI;
use QUI\Users\AbstractAuthenticator;
use QUI\Utils\Security\Orthos;
/**
* Class Auth
* Standard QUIQQER Authentication
*
* @package QUI\Users
*/
class QUIQQER extends AbstractAuthenticator
{
public function __construct($username = '')
{
// construct
}
public function auth($password)
{
// auth
}
/**
* Controls
*/
/**
* @return Controls\QUIQQERLogin
*/
public static function getLoginControl()
{
return new Controls\QUIQQERLogin();
}
}
Das Login Control von QUIQQER ist ein einfaches Beispiel wie ein normaler Login über Benutzername und Passwort realisiert werden kann. Möchten Sie einen Authenticator realisieren welche keine standard Benutzername / Passwort Authentifizierung hat, geht dies mithilfe von JavaScript etwas einfacher, zum Beispiel über einen Social-Media-Login.
Das Facebook Login Control bindet ein JavaScript Control ein, welches die Authentifizierung über Facebook erledigt und gibt die Facebook Anmeldeinformationen weiter an QUIQQER.
CLI Authentifizierung
Ein Authenticator kann bestimmen, ob ein Anmelden über die QUIQQER CLI Konsole möglich ist. Generell sind Authenticator nicht CLI fähig, dies muss der Authenticator speziell mitteilen. CLI fähige Authenticator sind zum Beispiel die Standard QUIQQER Anmeldung oder der Google Authenticator.
Ein Authenticator ist CLI fähig wenn er über die Methode isCLICompatible
true zurückgibt. Über die Methode cliAuthentication
muss dieser dann die Anmeldung in der CLI tätigen.
Beispiel CLI Authentifizierung
<?php
class QUIQQER extends AbstractAuthenticator
{
// ... noch mehr Methoden
/**
* @return bool
*/
public static function isCLICompatible()
{
return true;
}
/**
* @param QUI\System\Console $Console
*/
public function cliAuthentication(\QUI\System\Console $Console)
{
$username = $Console->getArgument('username');
$password = $Console->getArgument('password');
if (empty($username)) {
$Console->writeLn("Please enter your username");
$Console->writeLn("Username: ", 'green');
$Console->setArgument('username', $Console->readInput());
$username = $Console->getArgument('username');
}
if (empty($password)) {
$Console->clearMsg();
$Console->writeLn("Please enter your password");
$Console->writeLn("Password: ", 'green');
$Console->clearMsg();
$Console->setArgument('password', QUI\Utils\System\Console::readPassword());
$password = $Console->getArgument('password');
}
$this->username = $username;
$this->auth($password);
}
}