Was ich versuche zu tun:
Erstellen Sie eine Startseite im Intranet unseres Unternehmens, die automatisch den angemeldeten Windows-Benutzernamen der Person aufnimmt, die die Seite anzeigt ohne die Person, die beim Laden der Seite zur Eingabe dieser Anmeldeinformationen aufgefordert wird.
Momentan möchte ich nur, dass es den lokalen Benutzernamen abruft, da es eine Weile dauern wird, bis unsere IT-Leute ein Domain-Setup bekommen. Zum Beispiel möchte ich jetzt, dass es den "(PC-Name) \ windows.user.name" ohne irgendwelche Eingabeaufforderungen erfasst.
Umgebung:
Apache 2.2.21 unter Windows 7 x64 (wird auf CentOS sein, sobald es in Produktion ist).
PHP 5.3.8 (VC9-ZTS).
Internet Explorer 9.0.8x und Firefox 6.0.2 (wird sich später um Chrome sorgen).
Die aktuelle Testseite ist nur ein PHP-Skript, das print_r ($ _SERVER) aufruft.
Um die Dinge einfach zu halten, ist das Verzeichnis, in dem ich das teste, kein VirtualHost.
Bisherige Schritte:
Laden Sie mod_sspi_1.0.4-2.2.2 von SourceForge herunter und extrahieren Sie mod_auth_sspi.so in das Apache-Modulverzeichnis.
Die Moduldeklaration hinzugefügt:
LoadModule sspi_auth_module modules / mod_auth_sspi.so
Die Verzeichnisdefinition hinzugefügt:
AllowOverride Keine Optionen Keine Auftrag erlauben, ablehnen Erlaube von allen
%Vor%
Aktivieren Sie die integrierte Authentifizierung in Firefox, indem Sie zu: config gehen und network.automatic-ntlm-auth.trusted-uris auf den absoluten URL-Pfad des PHP-Skripts einstellen und dann Firefox neu starten.
Ich habe noch keinen äquivalenten Schritt in IE gemacht, aber ich werde sobald ich Firefox funktioniere als das ist unser primär unterstützter Browser intern.
Neustart des Apache und Versuch, das Test-PHP-Skript zu laden.
Das Ergebnis:
Bisherige Fehlerbehebung:
Ich habe versucht, die verschiedenen SSPI-Optionen zu durchlaufen, wie zum Beispiel authitative Ein / Aus und was nicht. Keine Wirkung.
Die Eingabeaufforderung wird nicht mehr angezeigt, wenn ich "require valid-user" entferne, aber dann wird der Benutzername auch nicht übergeben (er ist nicht NULL; einfach nicht in der Array-Periode festgelegt).
Wenn ich in der Eingabeaufforderung auf "Abbrechen" klicke, erhalte ich die Standardseite "Authentifizierung erforderlich".
Wenn ich einen ungültigen Benutzernamen oder den korrekten Benutzernamen, aber mit dem falschen Passwort eintrage, wird die Seite geladen, aber der Benutzername lautet "(PC-Name) \ Gast".
Wenn ich den richtigen Benutzernamen / Passwort eingegeben habe, wird der Benutzername anstelle von Guest angezeigt.
Sobald ich einen Benutzernamen / ein Passwort in IE oder Firefox eingegeben habe, merkt sich der Browser diesen Benutzernamen beim nächsten Laden der Seite, bis ich den Cache für gespeicherte Passwörter lösche oder den Browser neu starte.
Ich habe die letzten drei Stunden damit verbracht zu googeln und zu raten. Null Erfolg. Ich habe ein paar isolierte Forenbeiträge von Leuten gefunden, die diese Frage stellen, aber entweder blieben sie unbeantwortet oder boten Lösungen an, die ich bereits ohne Erfolg ausprobiert hatte.
Noch einmal, was ich will ist, dass die Seite geladen wird, OHNE irgendeine Aufforderung, und den aktuell angemeldeten Windows-Benutzernamen in der $ _SERVER-Array-Ausgabe anzuzeigen.
Soweit ich es ergründen kann, ist dies entweder: Ein Windows-Konfigurationsproblem, ein Apache-Konfigurationsproblem oder ein Browserkonfigurationsproblem. Ansonsten habe ich keine Ideen mehr.
Ich wäre sehr dankbar für jede Hilfe, die Sie anbieten können. Danke!
- Kris
Ich habe ein paar Tage gebraucht, aber irgendwann habe ich es selbst herausgefunden. Anscheinend sind die verschiedenen Dokumente und Tutorials, die die Konfiguration von Firefox über: config beschreiben, falsch. Sie behaupten, dass der vollständige URI einschließlich Protokollpräfix enthalten sein muss. Wie sich herausstellt, ist das genaue Gegenteil der Fall.
Als Zufallsfoto im Dunkeln habe ich versucht, es auf "localhost" (die Domäne, auf der der Testserver läuft) zu setzen. Und voila! Das hat es behoben! "http: // localhost" verursachte dagegen einen Bruch.
Sobald ich es in Firefox funktionierte, nachdem ich überprüft hatte, dass die serverseitige Konfiguration korrekt war, war es ein Kinderspiel, es auf IE und Chrome anzuwenden. Für IE habe ich gerade "http: // localhost" (in diesem Fall möchten Sie das Protokollpräfix) in die Zone "Intranet" hinzugefügt. Und da Chrome die gleichen Netzwerkeinstellungen verwendet, die IE verwendet, hat dieser Schritt für beide Browser funktioniert.
Was die serverseitige Konfiguration angeht, sieht es so aus, als hätte ich das von Anfang an. Ich konnte es jedoch ein wenig vereinfachen, also ist wirklich alles, was du im Verzeichnisblock brauchst:
%Vor%Wenn Sie bei dieser Konfiguration auf ein PHP-Skript zeigen, das eine print_r ($ _SERVER) ausführt, enthält die Ausgabe etwa Folgendes:
%Vor%Wenn Sie den Domain-Teil (zB "dev-kdc-pc01 \") loswerden wollen, können Sie ihn entweder in PHP parsen oder diese Zeile zu Ihrem SSPI-Code im Verzeichnisblock in httpd.conf hinzufügen oben erwähnt:
%Vor%Bitte beachten Sie, dass ich dies nur auf einem Windows-System getestet habe, auf dem der Apache-Webserver auf localhost ausgeführt wurde. Ich habe es noch nicht in einer Situation getestet, in der der Apache-Server unter Linux läuft, obwohl dies keinen Einfluss auf die Ergebnisse haben sollte, da der Server nur akzeptiert, was immer der Browser sendet. Dazu muss der Client Windows oder eine andere SSPI-kompatible Umgebung ausführen. Ich habe noch nicht festgelegt, wie wir diese Arbeit für unsere Mac-Mitarbeiter leisten können.
Beachten Sie auch, dass ich dies erfolgreich in einem Netzwerk getestet habe, das nicht derzeit eine Domäne konfiguriert hat. Laut anderswo veröffentlichten Artikeln sollte das Verhalten auf einer Arbeitsstation identisch sein, die Mitglied einer Domäne ist.
Ich hoffe, das hilft! Danke!
Dies könnte eine teilweise Antwort sein.
%Vor%Es sieht so aus, als könnten Sie Systeminformationen abrufen, die andere Hälfte könnte das sein Automatisieren Sie es mit PERL oder Python, um die Informationen zu scrappen, und veröffentlichen Sie sie dann in PHP.
Hier ist die Übersicht über das Holen von SysInfo in Windows.
Ehrlich gesagt ist dies eine ziemlich einfache Sache mit PECL / PAM, wenn Sie Linux benutzen.
Tags und Links php windows authentication apache sspi