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

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
aunib
Mitglied
Beiträge: 1
Registriert: 29.08.2006 12:26

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

Beitrag 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
***************************************************************************/
?> 
Benutzeravatar
Adun
Mitglied
Beiträge: 61
Registriert: 27.12.2005 21:05
Wohnort: Feldkirchen / München

Beitrag 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?
Benutzeravatar
tauro
Mitglied
Beiträge: 16
Registriert: 15.01.2008 13:12

Beitrag 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
Eyoob
Mitglied
Beiträge: 4
Registriert: 25.01.2008 14:35

Beitrag 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 :)
Benutzeravatar
tauro
Mitglied
Beiträge: 16
Registriert: 15.01.2008 13:12

Beitrag von tauro »

Was soll ich tun?


Weiss denn niemand Rat??????
JooMoo
Mitglied
Beiträge: 4
Registriert: 31.03.2020 15:29

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

Beitrag 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
JooMoo
Mitglied
Beiträge: 4
Registriert: 31.03.2020 15:29

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

Beitrag von JooMoo »

Ist weiterhin aktuell und ich suche jemanden der dies gegen Bezahlung übernimmt...
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17395
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

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

Beitrag von Dr.Death »

Gegenfrage:

Warum nicht nur ein Forum und dann mit verschiedenen Rechten arbeiten ?
JooMoo
Mitglied
Beiträge: 4
Registriert: 31.03.2020 15:29

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

Beitrag 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:
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

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

Beitrag 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.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“