[PHP] Windows-Benutzername vergleichen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von alt-mich, 6. August 2011 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 6. August 2011
    Windows-Benutzername vergleichen

    Hallo,

    ich weiß, meine Frage ist prädestiniert für Google, aber ich habe schon viele Seiten durchforstet und nichts außer ein VBScript gefunden, das nicht auf dem Apache-Webserver läuft.

    Also: Ich biete einen Webdienst an - bei dem wählt man eine zuvor ausgefüllte Datei aus, die Daten werden eingelesen und ins SAP geschrieben. Im Dokument gibt man u. a. seinen Nutzernamen an, der ist gleich dem Windows-Benutzername und dem SAP-Loginnamen. Aus dem SAP werden über den Nutzernamen weitere Daten ausgelesen und in Datenbanken geschrieben.
    Nun könnte (theoretisch) jemand auf die Idee kommen, einen anderen Nutzernamen einzugeben, was dann im produktiv schlimme Folgen hätte. Zu diesem Zweck möchte ich überprüfen, ob der Nutzername im Dokument gleich dem Windows-Benutzernamen ist, wenn ja, kann fortgefahren werden, wenn nicht, wird abgebrochen, um gravierende Fehlbuchungen zu verhindern.

    Den Webservice schreibe ich mit php und es ist gar nicht so einfach, an den Windows-Benutzernamen zu kommen (mit php sogar gar nicht, wie ich gelesen habe). Ich muss den Namen auch nicht wirklich erfahren, mir würde eine Funktion reichen, bei der ich einen String übergebe, und einen bool'schen Wert zurückbekomme, ob der Übergabeparameter gleich dem Windows-Username ist.

    Das alles findet im Intranet statt, Browser ist standardmäßig der Internet Explorer.
    Wie man sieht, komme ich nicht um drum rum, den Nutzernamen abzufragen; welcher Lösungsansatz spielt keine Rolle, es wäre nur schön, wenn ich die Variable an php übergeben könnte (was kein Problem sein sollte).


    Danke im Voraus und beste Grüße
    alt-mich
     
  2. 6. August 2011
    AW: Windows-Benutzername vergleichen

    Größere Unternehmen setzen oftmals LDAP ein - unter anderem um den Mitarbeitern ein Windows-Login von verschidenen Arbeitsrechnern zu ermöglichen.
    Falls das bei deinem Unternehmen der Fall sein sollte hast du mehrere Möglichkeiten an den Benutzernamen ranzukommen:
    Die mir bekannten:
    * Apache mit mod_auth_ldap [Benutzer muss sich mit seinem Namen und Passwort bei der Webseite anmelden. Der Name ist anschließend über eine HTTP Variable einzusehen (kann mit PHP abgerufen werden)
    * Das PHP LDAP Modul kann genutzt werden um den Benutzer zu legitimieren.

    Ein anderer Lösungsansatz: Wieso verwendest du nicht einfach direkt den Namen aus dem SAP Dokument? Offensichtlich darf ja nur der Name eingegeben werden der mit dem Namen aus dem Dokument übereinstimmt - Wieso also so umständlich?
     
  3. 6. August 2011
    AW: Windows-Benutzername vergleichen

    Ja, bei uns wird das Active Directory verwendet, das ich via LDAP anzapfen kann.

    Das hört sich gut an. Nur wie genau funktioniert das? Ich erstelle ein Formular, lese Username und Passwort ein und lasse das gegen das AD laufen mit Hilfe der von Apache vordefinierten mod_auth_ldap?

    Zur zweiten, von dir vorgeschlagene Lösung: Legimitieren heißt nur: User xyz darf die Operation des Webservice nutzen oder eben nicht? Wenn ja: Dann müsste man nochmal eine extra Pflege einrichten für diejenigen User einrichten. Das sind jetzt schon ein paar Hundert und es würden jede Woche neue dazukommen. Also ein ganz schöner, zusätzlicher Pflegeaufwand.

    Das Problem ist, dass jeder Daten in das Dokument eintragen (btw, ein PDF) kann und auch die, die er möchte (falscher Username u. a.). Man könnte natürlich auch dahingehend ansetzen, dass das PDF den Username ausließt und zur Verfügung stellt, aber die Möglichkeit mit obiger Userabfrage gefällt mir besser, denn es kann auch nur der Daten ins System schicken, der berechtigt ist.
     
  4. 6. August 2011
    AW: Windows-Benutzername vergleichen

    Hey,

    ich habe schonmal einen Login für ein PHP-System an einem LDAP-Server relaisiert. Ich gucke am Montag auf der Arbeit mal ob ich den Code habe und poste ihn dir - war eigentlich relativ simpel, aber so ausm Kopf - das ist zulange her.

    Gruß Blackb!rd
     
  5. 6. August 2011
    AW: Windows-Benutzername vergleichen

    Nein kein Formular. Du musst das Apache Modul aktivieren und entpsrechend konfigurieren. Konkret: Du gibst den Pfad an der geschützt sein soll und aktivierst das Modul für den Pfad. Der Benutzer wird dann aufgefordert seinen Namen und Passwort einzugeben bevor er die Seite betreten kann.
    http://www.beehave.de/forum/userpix4/2_htaccess.gif

    Und auf den Benutzernamen kannst du dann mit PHP über die $_SERVER Variable zugreifen.
    Quelle: mod_authnz_ldap - Apache HTTP Server

    Der Nachteil liegt in dem hohen Konfigurationsaufwand - Vielleicht geht das mit PHP einfacher - damit habe ich allerdings selber noch keine Erfahrungen gesammelt.
     
  6. 9. August 2011
    AW: Windows-Benutzername vergleichen

    Hey,

    habe mal meine CodeSchnipsel ausgegraben:

    PHP:
    function  checkAuth ( $usr $pw ) {
            if (
    $conn  ldap_connect ( 'domäne.int' )) {
                
    ldap_set_option ( $conn LDAP_OPT_PROTOCOL_VERSION 3 );
                
    ldap_set_option ( $conn LDAP_OPT_REFERRALS 0 );
                if(@
    ldap_bind ( $conn , $usr . '@domäne.int' , $pw ) !==  false ){
                    return 
    true ;
                }else{
                    return 
    false ;
                }
                
    ldap_close ( $conn );
                unset(
    $conn );
            } else {
                die(
    "Verbindung zum DomänenServer nicht möglich" );
            }
        }
    Die habe bei mir damals funktioniert, allerdings ist das schon ein weilchen her, dass ich damit gespielt habe..

    Gruß Blackb!rd
     
  7. 10. August 2011
    AW: Windows-Benutzername vergleichen

    Hallo,

    danke für deinen Code Snippet, Blackb!ird, der für meinen Anwendungsfall leider einen entscheidenden Nachteil hat, wie sich herausgestellt hat: Es sollen so wenig Anwendungen wie möglich das AD anzapfen; es wird lieber gesehen, wenn man von im Intranet schon verwendeten Anwendungen Gebrauch macht.

    Ich habe meine Lösung über SSO gestaltet, hier ein Link, der mir sehr geholfen hat, mein Problem letztendlich zu lösen:
    Windows-username Mit Apache Auslesen - WinFuture-Forum.de
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.