Seite 1 von 1

HowTo: Ein Login für mehrere Tools (PHPBB, Wiki, etc...)

Verfasst: 30.08.2006 09:50
von aunib
Hallo!

Da ich gerade dieses Problem für mich gelöst habe, stelle ich die Lösung mal hier rein falls es jemanden interessiert.

Da wir einen Mitgliederbereich haben, der aus mehreren verschiedennen Applikationen besteht, ist das problem aufgetreten, dass der Benutzer sich unzählige Male anmelden mus um den Bereich zu nutzen.
Meine Lösung bezieht sich im Moment auf PHPBB und MediaWiki, ist aber auf sämtliche Logins auf dem Server anwendbar!

Voraussetzung ist, dass bei allen Logins die gleichen Benutzer vorhanden sind. (für Wiki gibts da die
PHPBB-Users_Integration)
Für das synchronisieren der Benutzertabellen werde ich später mal noch ein Skript schreiben...

Vom Prinzip her ist der Login sehr simpel: wir erstellen ein Login Formular, und beim absenden simuliert PHP allen logins, dass die Daten von "ihrem eigenen" Formular kämen.

Als erstes erstellen wir ein Login-Formular, typischerweise mit den Feldern "benutzer", "passwort" und "autologin".
Vom verarbeitungsskript aus müssen wir nun mehrere POST-anfragen starten. Da dies mit PHP relativ kompliziert ist, holt man sich am besten die PHP Snoopy-Klasse: http://sourceforge.net/projects/snoopy/

nach einbinden der Klasse, müssen wir einige Variablen definieren:

Code: Alles auswählen

$url = "http://www.meinedomain.ch/wiki/index.php?title=Spezial:Userlogin&action=submitlogin&returnto=Hauptseite";
$vars["wpName"] = $benutzer;
$vars["wpPassword"] = $passwort;
$vars["wpRemember"] = $autologin;
$vars["wpLoginattempt"] = 'Anmelden';
Die Werte können alle vom Original Loginformular des Tools (in diesem Fall Wiki) genommen werden (die Eingabefeldnamen und das Formular-Ziel)

nun muss das ganze nur noch abgesendet werden:

Code: Alles auswählen

$snoopy = new Snoopy();
$snoopy->submit($url, $vars);
Die Login Prozedur des Wikis hat nun, sofern Benutzer und Passwort stimmten, eine Session gestartet.

Um den Benutzer zu erkennen wird beim Login immer ein Cookie gesetzt. Da wir die Anfrage aber nur simuliert haben, ist dieses Cookie auch nicht beim eigentlichen Benutzer gesetzt worden; es befindet sich noch immer in einer Variable der Snoopy-klasse und muss nun noch beim Benutzer gesetzt werden:

Code: Alles auswählen

//Cookies beim User registrieren
foreach($snoopy->cookies as $key=>$value){
 setcookie($key, $value ,time()+3600,'/');
}
Somit ist der Login beendet: wenn man nun das Wiki besucht, ist man schon eingeloggt. Das kann nacheinander für beliebig viele Logins wiederholt werden!

hier noch das Ganze im Zusammenhang:

Code: Alles auswählen

<?php
include("Snoopy/Snoopy.class.php"); //Zugriffsklasse um Browser zu "simulieren"

 /***************************************************************************
 * Login in Wiki
***************************************************************************/
//Formularfelder als Variablen an die Loginseite schicken 
$url = "http://www.meinedomain.ch/wiki/index.php?title=Spezial:Userlogin&action=submitlogin&returnto=Hauptseite";
$vars["wpName"] = $benutzer;
$vars["wpPassword"] = $passwort;
$vars["wpRemember"] = $autologin;
$vars["wpLoginattempt"] = 'Anmelden';
$snoopy = new Snoopy();
$snoopy->submit($url, $vars);
//print($snoopy->results); //Rückgabe der Loginseite

//Cookies beim User registrieren
foreach($snoopy->cookies as $key=>$value){
 setcookie($key, $value ,time()+3600,'/');
}
 /***************************************************************************
 * Login in Wiki Ende
***************************************************************************/
  /***************************************************************************
 * Login in Forum
***************************************************************************/
//Formularfelder als Variablen an die Loginseite schicken 
$url = "http://www.meinedomain.ch/forum/login.php";
$vars["username"] = $benutzer;
$vars["password"] = $passwort;
$vars["autologin"] = $autologin;
$vars["login"] = 'Login';
$snoopy = new Snoopy();
$snoopy->submit($url, $vars);
//print($snoopy->results);//Rückgabe der Loginseite

//Cookies beim User registrieren
foreach($snoopy->cookies as $key=>$value){
 setcookie($key, $value ,time()+3600,'/');
}
 /***************************************************************************
 * Login in Forum Ende
***************************************************************************/
?> 

Verfasst: 10.07.2007 21:19
von Adun
Kannst Du noch eine kleine Hilfe geben, wie man das mit dem Formular am besten einrichtet?

Ich würde am liebsten einfach das jetzige Formular vom Forum dafür verwenden, nur weiß ich nicht so recht, wie ich Deinen Code von oben damit verknüpfen soll.

Kannst Du helfen?

Verfasst: 24.01.2008 22:09
von tauro
Hallo

Wie schaffe ich es, dass mediawiki alle Benutzer übernimmt, d.h. auch Administratoren, registrierte, ...
Und die Daten, welche man in die LocalSetting.php eingeben muss, versteheh ich auch nicht ganz. Was muss ich nun dort alles noch ändern??

Mfg

tauro

Verfasst: 25.01.2008 14:40
von Eyoob
Das klingt interessant. Kannst du mal eine Allgemeine Hergehensweise für Themen wie Single Sign On schreiben? :)

Dann könnte man das direkt verallgemeinern :)

Verfasst: 25.01.2008 17:44
von tauro
Was soll ich tun?


Weiss denn niemand Rat??????

Phpbb 3.3 Ein Login für mehrere Tools (PHPBB, Wiki, etc...)

Verfasst: 01.04.2020 13:39
von JooMoo
Hallo,

krame hier mal ein altes Thema hervor - da bei mir brandaktuell.
Benötige so ein Login für 2x Phpbb 3.3 Foren die auf dem selben Server liegen (PHP 7.4) aber getrennte (öffentliche / nicht öffentliche Inhalte) zeigen.
Sprich 1 Login für beide Foren wäre wünschenswert - bisher konnte ich einen "Externen Login" mittels: https://www.phpbb.com/community/viewtopic.php?t=2511956 realisieren.

Gefunden habe ich https://developer-blog.net/phpbb-automa ... ner-seite/ aber da bin ich mit meinem latein am Ende

Hat wer einen Tipp oder gibt es vlt. neue / andere Möglichkeiten (Cookie SID irgendein Strohhalm damit ich da weiter komme)?
Würde mich freuen, da ich schon lange an dem Problem hänge..

LG

Re: HowTo: Ein Login für mehrere Tools (PHPBB, Wiki, etc...)

Verfasst: 30.07.2021 11:05
von JooMoo
Ist weiterhin aktuell und ich suche jemanden der dies gegen Bezahlung übernimmt...

Re: HowTo: Ein Login für mehrere Tools (PHPBB, Wiki, etc...)

Verfasst: 30.07.2021 12:14
von Dr.Death
Gegenfrage:

Warum nicht nur ein Forum und dann mit verschiedenen Rechten arbeiten ?

Re: HowTo: Ein Login für mehrere Tools (PHPBB, Wiki, etc...)

Verfasst: 03.08.2021 15:01
von JooMoo
Berechtige Frage, es sind zwei bestehende Foren, die muss ich dann wohl mal zusammenführen...
Wird wohl das einfachste / das Beste sein... :grin:

Re: HowTo: Ein Login für mehrere Tools (PHPBB, Wiki, etc...)

Verfasst: 13.10.2021 00:01
von gn#36
Nur der Vollständigkeit halber (wo das Thema eh schon aufgewärmt ist...): Um soetwas zu realisieren muss man im Grunde einen Authentication Provider für phpBB erstellen (bzw. in deinem Fall in einem von beiden, das dann mithilfe des anderen Forums überprüft ob der User in Ordnung ist).

Davon gibt's schon ein paar, denn phpBB selbst verwendet ebenfalls welche:

https://github.com/phpbb/phpbb/tree/mas ... h/provider

Sowas lässt sich auch in einer Extension bereitstellen. Im Grunde muss die Klasse die da geschrieben wird dieses Interface implementieren: https://github.com/phpbb/phpbb/blob/mas ... erface.php

Außerdem unterstützt phpBB OAuth, d.h. du kannst, sofern alle übrigen Tools das auch tun, einen SSO per OAuth realisieren. Das ist vielleicht einfacher, als sowas selber zu schreiben.