Seite 1 von 1
Login-Übergabe aus externer Datenbank per eigenem Skript
Verfasst: 15.10.2004 22:37
von CC_FH-Bielefeld
Hi, ich habe folgendes vor:
Ich habe das Login unseres Forums etwas abgewandelt. Die Verifizierung soll nicht mehr über die phpbb-sql laufen, sondern über eine externe Datenbank (details bei Interesse, gerne!) erfolgen. Das sieht dann so aus:
Der Student gibt seine Matrikelnummer ( $matr ) und das dazugehörige Passwort ( $ldappw ) auf der Forenseite ein. Ein php-Skript checkt die eingegebenen Daten bei der LDAP-Datenbank ab, und wenn beides passt, liefert das php den Wert "1" zurück. Ansonsten ist der Wert "" (NULL).
Code: Alles auswählen
Vorgeschichte:
Die Matrikelnummer wird beim registrieren als zusätzliches Feld in die phpbb-sql-tabelle (users) geschrieben (unique)
Wie kann ich dem Forum jetzt sagen, dass es
a) in der sql-tabelle "users.matr" nach dem Wert $matr suchen soll, und
b) den gefundenen User als eingeloggt betrachten soll? (oder anders, kann ich das login.php so verändern, dass eine übergebene user-id ("u") automatisch eingeloggt wird?)
Das Problem a) ist sicher recht simpel, aber bei b) kneiff ich mich im moment noch richtig!
Ich bitte bloss um "Hilfe zur Selbsthilfe", wie das ein Zeitgenosse schön auf den Punkt brachte, aber einen kleinen Ansatz/Denkanstoß brauch ich
Ich danke euch für eure Tips, mfg Tim Henze
PS: Richtig, die Passwortfunktion des Forums wird gar nicht genutzt! Das geschiet ja alles über den LDAP!
Verfasst: 16.10.2004 00:03
von PhilippK
Also nur damit ich das richtig verstanden habe: der Student registriert sich einmal auf dem LDAP-Server (bzw. ist es schon) und registriert sich dann zusätzlich für das Forum?
Wenn dem so ist: wird zusätzlich ein Benutzername für das Forum vergeben?
Gruß, Philipp
Verfasst: 16.10.2004 01:00
von CC_FH-Bielefeld
hi phillipp, kurz gesagt: ganz genau!
Also, jeder Student, Mitarbeiter, Prof und Putzfrau wird in diese LDAP-Datenbank eingetragen, und auch automatisch, nach Mitgliedsende (Exmatrikulation, Beschäftigungsende, Pension) wieder gelöscht!
Jeder bekommt eine eindeutige id (seine Matrikelnummer) zugewiesen, und dies ist dann die login-id für alle möglichen hochschulweiten Dienste (Drucken, Webmail, DFÜ usw.) Deshalb soll beim einloggen auch nicht der Foren-Benutzername verwendet werden, sondern $matr.
Wir können bei dem LDAP keine weiteren Daten speichern (Alter, Email, Beruf) usw. so dass das Forum seinerseits die normalen Daten aus der Standard-SQL-Datenbank holen soll. Daran soll sich nichts ändern.
Beim erstmaligen Registrieren des Benutzers im Forum (dies ist für jeden einzeln notwendig!) kann dieser einen freien Benuternamen wählen, wie bei einer ganz gewöhnlichen Registrierung. Ausserdem hat der Benutzer die $matr und das $ldappw angeben. Damit wird auf der einen Seite sichergestellt, dass sich nur berechtigte Personen im Forum registrieren und zweitens wird die $matr als uniques Feld dem Benutzerdatenbankeintrag hinzugefügt!
Das ganze hat folgenden Hintergrund:
1.) Wir dürfen aus Datenschutzgründen nicht die gesamten LDAP-Daten exportieren und damit automatisch Forenbenutzer anlegen, das muss jeder selbstständig tun!
2.) Wir möchten die Benutzung von Matrikelnummer und Passwort fördern, ein weiterer Login/PW wäre manchen Personen der Zielgruppe nicht zuzumuten.
3.) Dennoch soll jeder möglichst anonyme Nicknames nehmen können, und nicht mit seiner Matrikelnummer posten müssen.
4.) Ersparen wir uns so Wartungsaufwand. Es wird keine Karteileichen geben, wenn wir jede Woche einen Abgleich zwischen LDAP und SQL starten, und alle ForenBenutzer löschen, die nicht mehr im LDAP stehen.
Wir haben ca. 10000 User, dass wäre ansonsten viel zu viel Arbeit!
Ich hoffe, dass das ganze jetzt etwas klarer ist?
Sollte es unverständlich sein oder Fragen geben, her damit! Ich erklärs gerne!
gruß Tim
PS: Das ganze ist kein geheimes Projekt, aber der Server ist momentan nur aus dem Hochschulnetz zu erreichen, somit würde euch eine URL auch nichts bringen!
Verfasst: 16.10.2004 11:53
von PhilippK
Nun, der Ansatzpunkt dafür ist relativ einfach - der komplette Login-Vorgang findet in der login.php statt.
Als erstes müssen wir die Anmelderoutine abändern: Suche
Code: Alles auswählen
$sql = "SELECT user_id, username, user_password, user_active, user_level
FROM " . USERS_TABLE . "
WHERE username = '" . str_replace("\\'", "''", $username) . "'";
und ändere dort die letzte Zeile so ab, dass er dir den Datensatz zu der übergebenen Matrikelnummer ausgibt.
Ein paar Zeilen später findest du
Danach musst du die SQL-Abfrage auf den LDAP machen und ein paar weitere Zeilen später dann
Code: Alles auswählen
if( md5($password) == $row['user_password'] && $row['user_active'] )
so anpassen, dass statt der Passwortabfrage die erfolgreiche Prüfung des LDAP-Ergebnisses geprüft wird.
Allerdings brauch ich ein paar mehr Informationen, wie die LDAP-Datenbank genau zugänglich ist, wenn du da genaueres wissen willst.
Gruß, Philipp
Verfasst: 16.10.2004 12:07
von CC_FH-Bielefeld
ich muss gleich erstmal wech, nur schnell vorher noch das script:
Code: Alles auswählen
<?php
$ds=ldap_connect("ldap.fh-bielefeld.de", 389 );
if ( isset( $ds ) ) {
$anzahl = 1;
$basis_dn = ",ou=people,o=user,o=fh-bi";
// hier werden die Matrikelnummer und das LDAP-Passwort übergeben
if ( empty($nn) ) $nn = $matr; // Anmeldename
if ( empty($mypw) ) $mypw = $ldappw; // passwort
// hier wird der korrekte ldap-bind zusammengestellt
$uid_all = "uid=" . $nn . $basis_dn;
// nen simpler nicht-anonymer ldap-bind
if ($result = ldap_bind( $ds, $uid_all, $mypw )) {
// erfolgreiche authentifizierung; hier müsste die weitergabe an das login-script laufen!
} else {
//hier würde jetzt die Meldung für fehlerhaftes PW oder Login kommen
}
}
//bloss noch sauber vom ldap trennen
ldap_close( $ds );
?>
vielen dank schonmal soweit, ich hab´s mit dem sqlö leider noch nicht so, wills aber durch übung lernen!
ps: das die login.php dafür verantwortlich ist, dachte ich mir schon, nur weiß ich eben nicht was genau man wie "setzen" muss!
ich meld mich später nochmal und nehm zu deinem letzten posting stellung, danke und gruß Tim
Verfasst: 21.10.2004 22:49
von CC_FH-Bielefeld
so, ich hab mich denn mal die woche über an die login.php gemacht, und wenn jetzt noch dieses dämliche "resource #3" prob verschwindet sind wir mit dem login fertig...
dann gibts nur nochmal richtig stress mit der registrierung!
aber dann werd ich mich nochmal melden.
vielen dank soweit!