Seite 1 von 2
Automatische Anmeldung am Forum mit NTLM
Verfasst: 05.08.2003 15:24
von JuMayr
Hallo zusammen,
folgendes Problem habe ich im Moment:
Ich möchte die Windows-UserID auslesen und mit diesem User einen automatischen Login im Forum durchführen.
Meine Idee hierzu ist folgende:
1. UserID und Passwort werden in die Tabelle phpbb_users eingetragen. Auf die MD5-Verschlüsselung habe ich getrost verzichtet, da UserID und Passwort identisch sínd.
Die eigentliche Authentifizierung findet ja schon beim Anmelden an der Domäne statt.
2. Der User startet das Forum und führt eine "logon-pflichtige" Aktion durch.
Normalerweise würde jetzt die Login-Maske kommen.
Diese möchte ich gerne automatisiert übergehen indem ich mit
$anmeldeuser = $_SERVER['AUTH_USER'];
Den Benutzer auslese. Dies funktioniert natürlich nur, wenn mind. die Loginseite im IIS auf Basic- oder NTLM-Auth gestellt ist.
Nachdem der $anmeldeuser ausgelesen ist (Form: DOMÄNE\USERID) führe ich einen Split durch
list ($domain, $username) = split ('[\]', $anmeldeuser);
Direkt danach weise ich mit $password = $username; das passwort zu.
Wenn ich nun aber auch abschicken klicke, dann kommt immer die Meldung, dass der User nicht bekannt ist.
Habe ich eine Chance Benutzername und Kennwort in den dafür vorgesehenen Feldern anzeigen zu lassen? Quasi als Kontrolle.
Vermutlich habe ich irgendeinen dummen Fehler gemacht, aber ich beschäftige mich erst seit heute morgen mit PHP.
Wäre nett, wenn mir jemand weiterhelfen könnte.
so long
Jürgen
Verfasst: 05.08.2003 15:31
von itst
Login.php, Zeilen 57 bis 60:
Code: Alles auswählen
$username = isset($HTTP_POST_VARS['username']) ? trim(htmlspecialchars($HTTP_POST_VARS['username'])) : '';
$username = substr(str_replace("\\'", "'", $username), 0, 25);
$username = str_replace("'", "\\'", $username);
$password = isset($HTTP_POST_VARS['password']) ? $HTTP_POST_VARS['password'] : '';
Das bedeutet, das phpBB nur per POST ankommenden Usernamen und Passöwrter akzeptiert. Entweder Du ändert Dein Skript so um, das es Username und Passwort per POST verschickt, oder Du änderst die Zeilen oben (genauer die erste und letzte) um:
Code: Alles auswählen
$username = isset($HTTP_GET_VARS['username']) ? trim(htmlspecialchars($HTTP_POST_VARS['username'])) : '';
$username = substr(str_replace("\\'", "'", $username), 0, 25);
$username = str_replace("'", "\\'", $username);
$password = isset($HTTP_GET_VARS['password']) ? $HTTP_POST_VARS['password'] : '';
Ich habe hier aus $HTTP_
POST_VARS $HTTP_
GET_VARS gemacht.
Verfasst: 05.08.2003 15:34
von JuMayr
Wow.. das ging ja schnell.. vielen Dank, werde ich sofort ausprobieren.
Verfasst: 05.08.2003 15:51
von JuMayr
Hmm.. hat irgendwie nicht so richtig geklappt.
Ich habe jetzt einen Weg gefunden:
in der login.php wurden die beiden Zeilen auskommentiert.
// $username = isset($HTTP_POST_VARS['username']) ? $HTTP_POST_VARS['username'] : '';
// $password = isset($HTTP_POST_VARS['password']) ? $HTTP_POST_VARS['password'] : '';
Stattdessen verwende ich folgendes:
$anmeldeuser = $_SERVER['AUTH_USER'];
list ($domain, $slash, $logonusername) = split ('[\]', $anmeldeuser);
$username = $logonusername;
$password = $logonusername;
Damit klappt zumindest der Logon...
Dumm ist nur, dass ich jetzt noch "MANUELL" auf den Login-Button klicken muss. Kann man das irgendwie umgehen.
Also aufruf der login.php und sofortiges absenden des Forms?
so long
Jürgen
Verfasst: 05.08.2003 15:54
von itst
Ich hatte Dich wohl missverstanden. Beschreibe bitte detailiert, wie Du vorgehst/vorgehen willst und welche Dateien Du wie aufrufst bzw aufrufen (durch Formular o. ä.) lässt/lassen willst.
Verfasst: 05.08.2003 16:04
von JuMayr
Oki.. mal sehen ob ich es genau genug hinbekomme.
1. User meldet sich an der Windows Maschine an und wird gegen eine Domäne Authentifiziert.
2. Der User ruft das Forum über eine HTTPs-Verbindung auf (um evtl. Proxys zu umgehen).
3. Der User versucht einen neuen Beitrag zu schreiben.
Im Normalfall würde nun die Login-Masker kommen, der User gibt Benutzername und Kennwort ein und klickt auf Login.
In meinem Fall möchte ich diesen Schritt 3 aber "unsichtbar" gestalten.
Dazu habe ich folgendes Vorgehen gewählt.
Wenn die Loginmaske geladen wird, dann wird über
$anmeldeuser = $_SERVER['AUTH_USER'];
Der Windows-Domänenuser ausgelesen.
Da steht dann zum beispiel drinnen: Zentrale\\cbddea (Domäne\UserID)
Diesen String splitte ich auf und extrahiere die UserID
list ($domain, $slash, $logonusername) = split ('[\]', $anmeldeuser);
Diese UserID wird dann den PHP-Variablen
$username = $logonusername; und
$password = $logonusername;
zugewiesen.
Wenn ich nun auf den Login-Button klicke, dann läuft alles weitere wie gewohnt ab.
Die Domänenuser werden jede Nacht automatisiert in die phpBB_Users Tabelle eingetragen. Username und Passwort sind identisch. Auf die MD5 Encryption wird verzichtet.
Der einzige Wunsch im Moment besteht im automatischen Klicken des Logon Buttons bzw. im daraus resultierenden Submit Form.
Ist mein Weg krank????
Wie gesagt.. ich bin eigentlich nicht der große Programmirer:-)
so long
Jürgen
Verfasst: 05.08.2003 16:36
von itst
Man könnte natürlich en Login gleich zu Beginn machen, wenn der User den Index aufruft oder so...
Was das automatische einloggen angeht: Die Zeilen 80 bis 88 (login.php) sollten das für Dich erledigen.
Verfasst: 05.08.2003 20:48
von JuMayr
Hi...
das habe ich auch schon mal versucht, aber da komme ich nicht mit zurecht. Ist für mich als Einsteiger zu kompliziert.
Außerdem möchte ich so wenig wie möglich am Source ändern um bei einer Updateversion alle Schritte nachvollziehen zu können.
Wie gesagt.. am liebsten wäre mir das automatische Submit.
Leider fehlt mir das Know How WIE das geht.
Ich dachte schon an einen Onload-Java-Script-Submit.
Kann mit vielleicht jemand einen Sourcecodeschnipsel reichen der in diese Richtung geht?
so long
Jürgen
Verfasst: 05.08.2003 21:52
von Pyramide
sessions.php, Zeile 302:
Code: Alles auswählen
//
// If we reach here then no (valid) session exists. So we'll create a new one,
// using the cookie user_id if available to pull basic user prefs.
//
$user_id = ( isset($sessiondata['userid']) ) ? intval($sessiondata['userid']) : ANONYMOUS;
Hier könnte man den Code einbauen, um die zum Usernamen in $_SERVER passende user_id aus der DB zu lesen.
Verfasst: 05.08.2003 21:55
von JuMayr
Das klingt gut.. wäre dann der sofortige Login...
Leider fehlt mir an der Stelle das PHP und Programmier KNow-How...
Findet sich vielleicht ein Freiwilliger?