fussel01
Goto Top

Digestauthentifizierung über Formular mit php

Hi,
ich hoffe ihr könnt mir weiterhelfen.

Meine Frage ist, kann man den erforderlichen Benutzernamen sowie das Kennwort statt der Abfrage im externen Fenster diese im Formular schon abfragen und dann per php setzten lassen ?
Bin für jede Idee offen, aber möglichst nicht mit einer Formauth., da ich komplett mit php arbeite und nicht mit asp.Net .

MfG

Fussel

Content-ID: 173489

Url: https://administrator.de/contentid/173489

Ausgedruckt am: 22.11.2024 um 08:11 Uhr

dog
dog 21.09.2011 um 20:34:18 Uhr
Goto Top
...du möchtest Digest Auth am Browser vorbei machen?

Das geht nur mit Javascript und dazu gibt es genug bei Google.
Fussel01
Fussel01 21.09.2011 um 22:13:15 Uhr
Goto Top
Hi Dog,
Ich möchte ein Forumlar auf der Webseite haben und nicht in dem Fenster was sich normalerweise öffnet, um dort das Kennword und den Benutzernamen einzugeben.
Mein Grund dafür ist einfach die Schönheit und man möchte den User nicht verwirren.
Habe bei google bis jetzt nur etwas gefunden wie man so ein Fenster erzeugt(das Windowsanmeldefenster oder so face-smile ),aber ich wollte ja ein Formular.

Meine Idee war das man dies einfach wie Variablen setzten könnte.

MfG

Fussel
dog
dog 21.09.2011 um 22:16:08 Uhr
Goto Top
Meine Idee war das man dies einfach wie Variablen setzten könnte.

Nein, kann man nicht.
Die einzige Möglichkeit ist die komplette Digest-Implementierung von Hand(!) in JavaScript nachzubauen.
Dafür gibt es genug Beispiele (auch mit MD5 etc.)

Wenn du es über den Browser machen willst, dann auch nur mit dem Formular vom Browser.
Fussel01
Fussel01 22.09.2011 um 14:09:50 Uhr
Goto Top
So wie ich das verstanden habe, baut man die Digestauth. nach.
Kann man von dort, weil wir den ISS 7.0 benutzen, auf die Benutzernamen und Kennwörter vom Active Directory zugreifen ? Evtl. mit Ldap ?!

MfG

Fussel
dog
dog 22.09.2011 um 14:20:39 Uhr
Goto Top
Da du auch die Funktionen des Servers in dem Fall nicht benutzen kannst, ist das egal.

In PHP geht Digest gegen AD mit ldap_sasl_bind()
Fussel01
Fussel01 22.09.2011 um 19:20:17 Uhr
Goto Top
 

<?php
$realm = 'Geschützter Bereich';  

// Benutzer => Passwort
$benutzer = array('admin' => 'mypass''gast' => 'gast');  

if (empty($_SERVER['PHP_AUTH_DIGEST'])) {  
    header('HTTP/1.1 401 Unauthorized');  
    header('WWW-Authenticate: Digest realm="' . $realm .  
           '",qop="auth",nonce="' . uniqid() . '",opaque="' . md5($realm) .  
           '"');  

    die('Text, der gesendet wird, falls der Benutzer auf Abbrechen drückt');  
}

// Analysieren der Variable PHP_AUTH_DIGEST
if (!($daten = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||  
    !isset($benutzer[$daten['username']]))  
    die('Falsche Zugangsdaten!');  

// Erzeugen einer gültigen Antwort
$A1 = md5($daten['username'] . ':' . $realm . ':' .  
          $benutzer[$daten['username']]);  
$A2 = md5($_SERVER['REQUEST_METHOD'] . ':' . $daten['uri']);  
$gueltige_antwort = md5($A1 . ':' . $daten['nonce'] . ':' . $daten['nc'] .  
                        ':' . $daten['cnonce'] . ':' . $daten['qop'] . ':' .  
                        $A2);

if ($daten['response'] != $gueltige_antwort)  
    die('Falsche Zugangsdaten!');  

// OK, gültige Benutzername & Passwort
echo 'Sie sind angemeldet als: ' . $daten['username'];  

// Funktion zum analysieren der HTTP-Auth-Header
function http_digest_parse($txt) {
    // gegen fehlende Daten schützen
    $noetige_teile = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1,  
                           'username'=>1, 'uri'=>1, 'response'=>1);  
    $daten = array();
    $schluessel = implode('|'array_keys($noetige_teile));  

    preg_match_all('@(' . $schluessel . ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@',  
                   $txt$treffer, PREG_SET_ORDER);

    foreach ($treffer as $t) {
        $daten[$t[1]] = $t[3] ? $t[3] : $t[4];
        unset($noetige_teile[$t[1]]);
    }

    return $noetige_teile ? false : $daten;
}
?>
Wenn man dort noch das Ldap reinpackt müsste es doch gehen, oder ?!
dog
dog 22.09.2011 um 20:16:00 Uhr
Goto Top
Das ist nur die Methode für Digest Auth über die Browser-eigene Funktion.
Fussel01
Fussel01 29.09.2011 um 18:03:14 Uhr
Goto Top
Bekomme es irgendwie nicht hin. Es wäre nett, wenn mir einer ein Beispiel geben könnte.

MfG
Fussel