Hallo Jens,
als Hintergrundinfo siehe http://mrbs.sourceforge.net/view_tex...AUTHENTICATION
Letztendlich sind es zwei Probleme:
1. Authentifizierung
MRBS muss die Userdaten mit der Contao-Datenbank abgleichen. Bei MRBS gibt es dazu den Modus "db_ext" für externe Datenbank. Da kann man dann die entsprechenden Tabellenspalten, in denen Benutzername und Contao-Passwörter-Hashs stehen sowie deren Verschlüsselungsalgorithmen angeben und MRBS "bedient" sich dann aus der Contao-Datenbank.
Das habe ich allerdings damals nicht hinbekommen, da Contao die Passwörter deutlich stärker verschlüsselt (mit SALT und so...), vielleicht klappt es mit der neuen MRBS-Version inzwischen aber doch. Ich habe mich dann so beholfen, dass ich die Nutzer manuell anlege, mit gleichem Benutzernamen/Passwort wie in Contao. Ansonsten müsste man im Code von Contao nachschauen wie die Passwörter erzeugt werden und das ganze dann in MRBS nachprogrammieren (ist natürlich nicht update-sicher in MRBS).
2. Session
Auch wenn MRBS die Nutzerdaten aus der Contao-Datenbank zieht, muss man sich dort trotzdem als Nutzer nochmal separat anmelden. Um nun single sign on zu realisieren, habe ich in MRBS das Session-Verfahren auf "cookie" gestellt und mir im Quellcode von MRBS (insbesondere die Datei session_cookie.inc im Ordner session) angeschaut, wie der Cookie, der die Session hält, generiert wird. Diesen Code habe ich 1:1 kopiert und in eine PHP-Datei in Contao -> Templates eingefügt. Durch Aufruf dieser PHP-Datei kann ich den Session-Cookie also auch aus Contao heraus erzeugen. Um nun die Nutzerdaten zu übernehmen, ersetze ich den username über die Contao-Funktion $this->replaceInsertTags('{{user::username}}');. Nötige Änderungen sind in Großbuchstaben.
Code:
<?php
/*****************************************************************************\
* *
* File name session_cookie.inc = QUELLE DER NEUPROGRAMMIERUNG!!!! *
* *
\*****************************************************************************/
$cookie_path = 'COOKIE-PFAD SIEHE MRBS-CONFIG-Datei';
$expiry_time = 0;
$session_data = array();
$session_data['user'] = $this->replaceInsertTags('{{user::username}}');
$session_data['expiry'] = $expiry_time;
if ($auth['session_cookie']['include_ip'])
{
$session_data['ip'] = $REMOTE_ADDR;
}
$json_data = json_encode($session_data);
if (!function_exists('hash_hmac'))
{
fatal_error(FALSE, "It appears that your PHP has the hash functions ".
"disabled, which are required for the 'cookie' ".
"session scheme.");
}
$hash = hash_hmac(
'sha512',
$json_data,
'GEHEIMNIS AUS CONFIG-DATEI'
);
setcookie("SessionToken",
"${hash}_".base64_encode($json_data),
$expiry_time,
$cookie_path);
?>
Das ist aber schon etwas hemdsärmelig, wie es eleganter geht sieht du vermutlich durch Vergleich mit dem Joomla oder Wordpress Authentification Plugin, die es für MRBS schon gibt. Am allerbesten wäre es natürlich, jemand würde ein solches Contao-Plugin für MRBS schreiben...
Lesezeichen