Seite 1 von 2

HTTP-Authentifizierung mit phpBB

Verfasst: 10.01.2010 21:51
von CarstenF
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. 8)

Ganz herzlichen Dank im voraus! :grin:

Re: HTTP-Authentifizierung mit phpBB

Verfasst: 10.01.2010 21:55
von Pyramide
Soll das grundsätzlich für das gesamte Forum gelten? Dann kannst du einfach im ACP das mitgelieferte Auth-Plugin aktivieren.

Re: HTTP-Authentifizierung mit phpBB

Verfasst: 10.01.2010 22:05
von CarstenF
Pyramide hat geschrieben:Soll das grundsätzlich für das gesamte Forum gelten? Dann kannst du einfach im ACP das mitgelieferte Auth-Plugin aktivieren.
Ä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??]

(Kann leider nicht aus Trac selbst auf die Datenbank direkt zugreifen - unterschiedliche Hoster.)

Re: HTTP-Authentifizierung mit phpBB

Verfasst: 10.01.2010 23:46
von Pyramide
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.

Re: HTTP-Authentifizierung mit phpBB

Verfasst: 11.01.2010 00:48
von CarstenF
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?
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. ;-)
Dann brauchst du doch bloß ein Grundgerüst wie im PHP-Handbuch beschrieben erstellen und das Passwort mit phpbb_check_hash() prüfen.
Ah!! Vielen Dank! Ja, das geht definitiv in die richtige Richtung! :grin:

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?)

Re: HTTP-Authentifizierung mit phpBB

Verfasst: 11.01.2010 10:27
von Pyramide
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??
Dazu reicht doch simpelstes SQL:

Code: Alles auswählen

SELECT user_password FROM phpbb_users WHERE username='xyz'
CarstenF 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?)
Guck dir am besten selbst den Quellcode an: http://www.phpbb.de/infos/3.0/xref/nav. ... .html#l413

Re: HTTP-Authentifizierung mit phpBB

Verfasst: 11.01.2010 11:21
von CarstenF
Pyramide hat geschrieben:Dazu reicht doch simpelstes SQL:

Code: Alles auswählen

SELECT user_password FROM phpbb_users WHERE username='xyz'
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.

Damit ist dann wohl alles beisammen - nochmals ganz herzlichen Dank!! :D :grin:
(Wenn mein Script fertig ist, werde ich's hier posten.)

Re: HTTP-Authentifizierung mit phpBB

Verfasst: 13.01.2010 21:20
von CarstenF
Um die Sache gerade noch zum Abschluss zu bringen, hier mein Ergebnis:

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!";
}

?>
[ EDIT: Bantus Vorschläge eingearbeitet. ]

Im Nachhinein völlig simpel. :D :lol: :wink:
Nochmals vielen Dank, Pyramide!

Re: HTTP-Authentifizierung mit phpBB

Verfasst: 13.01.2010 23:45
von CarstenF
Achso, und vielleicht noch das Wichtigste - der Sinn des Ganzen:

Mit diesem kleinen Script und diesem Plugin (auch von mir :D) 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.
(Beides trifft übrigens bei 1und1 zu.)

Re: HTTP-Authentifizierung mit phpBB

Verfasst: 14.01.2010 02:52
von bantu
Für Benutzernamen und Passwort solltest du besser request_var() anstatt $_GET verwenden, wenn du phpBB sowieso geladen hast.

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)) . "'"; 
Auf username_clean gibt's einen INDEX.