Automatische Anmeldung am Forum mit NTLM
Automatische Anmeldung am Forum mit NTLM
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
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
- itst
- Ehrenadmin
- Beiträge: 7418
- Registriert: 21.08.2001 02:00
- Wohnort: Büttelborn bei Darmstadt
- Kontaktdaten:
Login.php, Zeilen 57 bis 60:
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:
Ich habe hier aus $HTTP_POST_VARS $HTTP_GET_VARS gemacht.
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'] : '';
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'] : '';
Sascha A. Carlin,
phpBB.de Ehrenadministrator
phpBB.de Ehrenadministrator

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
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
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
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
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
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
sessions.php, Zeile 302:
Hier könnte man den Code einbauen, um die zum Usernamen in $_SERVER passende user_id aus der DB zu lesen.
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;