HTTP-Authentifizierung mit phpBB
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
HTTP-Authentifizierung mit phpBB
Hallo liebe Leute,
habe bereits phpbb.de und phpbb.com per Suche abgegrast, und u.a. gefunden, ist aber leider alles nicht das Richtige.
Was ich gerne machen würde, ist HTTP-Authentifizierung mit PHP, siehe http://php.net/manual/de/features.http-auth.php, wobei der Username und das Passwort gegen die phpBB Benutzerdatenbank geprüft werden sollen.
Mir ist zwar prinzipiell klar, wie man das "per Hand" machen kann, aber ich würde vermutlich nur eine sehr umständliche und fragile Lösung hinkriegen (in etwa: "mit PHP direkt auf die DB zugreifen").
Kann mir evtl. jemand für eine elegantere Lösung Tipps geben bzw. auf die Sprünge helfen? z.B. kann ich irgendwie die phpBB Klassen für die DB-Abfrage benutzen? Wäre deutlich eleganter.
Ganz herzlichen Dank im voraus!
habe bereits phpbb.de und phpbb.com per Suche abgegrast, und u.a. gefunden, ist aber leider alles nicht das Richtige.
Was ich gerne machen würde, ist HTTP-Authentifizierung mit PHP, siehe http://php.net/manual/de/features.http-auth.php, wobei der Username und das Passwort gegen die phpBB Benutzerdatenbank geprüft werden sollen.
Mir ist zwar prinzipiell klar, wie man das "per Hand" machen kann, aber ich würde vermutlich nur eine sehr umständliche und fragile Lösung hinkriegen (in etwa: "mit PHP direkt auf die DB zugreifen").
Kann mir evtl. jemand für eine elegantere Lösung Tipps geben bzw. auf die Sprünge helfen? z.B. kann ich irgendwie die phpBB Klassen für die DB-Abfrage benutzen? Wäre deutlich eleganter.
Ganz herzlichen Dank im voraus!
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Re: HTTP-Authentifizierung mit phpBB
Soll das grundsätzlich für das gesamte Forum gelten? Dann kannst du einfach im ACP das mitgelieferte Auth-Plugin aktivieren.
KB:knigge
Re: HTTP-Authentifizierung mit phpBB
Ähm, eigentlich möchte ich erreichen, dass man sich ganz wo anders (Bug/Issue Tracker Trac, dieser hier) authentifizieren kann, indem man seinen Username + Passwort aus dem Forum eingibt. Trac unterstützt HTTP Authentication, d.h. würde dafür das von mir zu schreibende Script aufrufen. Insofern verstehe ich glaube ich Deine Rückfrage nicht so ganz... [EDIT: Habe gerade nachgeschaut, das Auth-Plugin ist doch eher für den umgekehrten Fall gedacht, d.h. man logged sich in phpBB3 ein mit Daten aus einer "anderen" DB, oder??]Pyramide hat geschrieben:Soll das grundsätzlich für das gesamte Forum gelten? Dann kannst du einfach im ACP das mitgelieferte Auth-Plugin aktivieren.
(Kann leider nicht aus Trac selbst auf die Datenbank direkt zugreifen - unterschiedliche Hoster.)
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Re: HTTP-Authentifizierung mit phpBB
D.h. du brauchst einfach nur ein Script, welches das per HTTP Authentication übertragene Passwort auf Gültigkeit prüft und einfach eine leere Seite mit 200/401 Status liefert? Dann brauchst du doch bloß ein Grundgerüst wie im PHP-Handbuch beschrieben erstellen und das Passwort mit phpbb_check_hash() prüfen.
KB:knigge
Re: HTTP-Authentifizierung mit phpBB
Im Prinzip ja, wobei die Seite voraussichtlich bei 200 Antwort noch die (irgendwie unkenntlich gemachte) Email-Adresse des Users enthält, das aufrufende Script kann die gut gebrauchen. Aber das nur am Rande.Pyramide hat geschrieben:D.h. du brauchst einfach nur ein Script, welches das per HTTP Authentication übertragene Passwort auf Gültigkeit prüft und einfach eine leere Seite mit 200/401 Status liefert?
Ah!! Vielen Dank! Ja, das geht definitiv in die richtige Richtung!Dann brauchst du doch bloß ein Grundgerüst wie im PHP-Handbuch beschrieben erstellen und das Passwort mit phpbb_check_hash() prüfen.
Aber am wichtigsten wäre ja erstmal, wie ich (ausgehend vom Grundgerüst, welches mir den Username und Passwort liefert) überhaupt bzw. korrekt in der phpBB DB nachschlage, ob ein solcher User überhaupt existiert und wenn ja, wie sein Passwort-Hash lautet??
Und noch eine Nebenfrage: ist phpbb_check_hash($password, $hash) evtl. in etwa so implementiert: return phpbb_hash($password)==$hash; ? Falls ja, worin liegt der Sinn? (Letzteres kann der User-Code doch direkt so aufrufen?)
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Re: HTTP-Authentifizierung mit phpBB
Dazu reicht doch simpelstes SQL:CarstenF hat geschrieben:Aber am wichtigsten wäre ja erstmal, wie ich (ausgehend vom Grundgerüst, welches mir den Username und Passwort liefert) überhaupt bzw. korrekt in der phpBB DB nachschlage, ob ein solcher User überhaupt existiert und wenn ja, wie sein Passwort-Hash lautet??
Code: Alles auswählen
SELECT user_password FROM phpbb_users WHERE username='xyz'
Guck dir am besten selbst den Quellcode an: http://www.phpbb.de/infos/3.0/xref/nav. ... .html#l413CarstenF hat geschrieben:Und noch eine Nebenfrage: ist phpbb_check_hash($password, $hash) evtl. in etwa so implementiert: return phpbb_hash($password)==$hash; ? Falls ja, worin liegt der Sinn? (Letzteres kann der User-Code doch direkt so aufrufen?)
KB:knigge
Re: HTTP-Authentifizierung mit phpBB
Ok, klar, danke! Und das letzte Teil vom Ganzen, das mir noch gefehlt hat, habe ich glaube ich gerade über eine Google Suche nach "phpbb database class" gefunden: Using the phpBB3.0 DBAL.Pyramide hat geschrieben:Dazu reicht doch simpelstes SQL:Code: Alles auswählen
SELECT user_password FROM phpbb_users WHERE username='xyz'
Damit ist dann wohl alles beisammen - nochmals ganz herzlichen Dank!!
(Wenn mein Script fertig ist, werde ich's hier posten.)
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Re: HTTP-Authentifizierung mit phpBB
Um die Sache gerade noch zum Abschluss zu bringen, hier mein Ergebnis:
[ EDIT: Bantus Vorschläge eingearbeitet. ]
Im Nachhinein völlig simpel.
Nochmals vielen Dank, Pyramide!
Code: Alles auswählen
<?php
/**
*
* Quellen:
* [1] http://www.phpbb.de/community/viewtopic.php?f=93&t=201405
* [2] http://wiki.phpbb.com/Using_the_phpBB3.0_DBAL
* [3] http://php.net/manual/de/features.http-auth.php
*
* HTTP-Authentifizierung geht bei 1und1 leider nicht (PHP läuft als CGI, nicht als Apache Modul):
* [4] http://hilfe-center.1und1.de/hosting/scripte_datenbanken/php/5.html
*
*/
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
# Verwende request_var() statt $_GET, siehe [1] und <http://wiki.phpbb.com/Request_var>.
$username=request_var('u', '');
$password=request_var('p', '');
# Besser mit "clean", siehe [1] und <http://wiki.phpbb.com/Utf8_clean_string>.
$sql ="SELECT user_password, user_email FROM " . USERS_TABLE .
" WHERE username_clean='" . $db->sql_escape(utf8_clean_string($username)) . "'";
$result=$db->sql_query($sql);
$row =$db->sql_fetchrow($result);
if (phpbb_check_hash($password, $row['user_password']))
{
// Sende die Antwort in der vom Empfänger erwarteten Form.
echo "ok\n";
echo $row['user_email'];
}
else
{
header('HTTP/1.0 401 Unauthorized');
echo "Sorry, the username or the password was invalid.\n";
echo "Please try again!";
}
?>
Im Nachhinein völlig simpel.
Nochmals vielen Dank, Pyramide!
Zuletzt geändert von CarstenF am 15.01.2010 00:49, insgesamt 1-mal geändert.
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Re: HTTP-Authentifizierung mit phpBB
Achso, und vielleicht noch das Wichtigste - der Sinn des Ganzen:
Mit diesem kleinen Script und diesem Plugin (auch von mir ) für Trac kann man sich nun in Trac einloggen mit den Login-Daten des (eigenen) phpBB Forums, und zwar auch dann, wenn
Mit diesem kleinen Script und diesem Plugin (auch von mir ) für Trac kann man sich nun in Trac einloggen mit den Login-Daten des (eigenen) phpBB Forums, und zwar auch dann, wenn
- die Datenbank des Forums auf einem komplett anderen Host liegt als Trac (und von letzterem bzw. öffentlich nicht erreichbar ist), und
- PHP als CGI ausgeführt wird und daher HTTP-Auth (siehe Link oben) nicht möglich ist.
Viele Grüße,
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Carsten
Cafu - die open-source Spiele- und Grafik-Engine für multiplayer, cross-platform, real-time 3D Action
Re: HTTP-Authentifizierung mit phpBB
Für Benutzernamen und Passwort solltest du besser request_var() anstatt $_GET verwenden, wenn du phpBB sowieso geladen hast.
Und anstatt "username =" besser
Auf username_clean gibt's einen INDEX.
Und anstatt "username =" besser
Code: Alles auswählen
$sql ="SELECT user_password, user_email
FROM " . USERS_TABLE . "
WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";
Powered by Coffee