Právě je 26 dub 2024 14:10

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 
Autor Zpráva
 Předmět příspěvku: HTTP Autentizace - metoda Digest
PříspěvekNapsal: 09 led 2010 20:55 

Registrován:
28 zář 2009 20:05
Příspěvky:
13
Přeji hezký den.

Nejsem schopen rozchodit HTTP autentizaci metodou Digest. Na ukázku sem přidám kód, který mám momentálně na serveru nahrán:
Kód:
<?php
$realm = 'Restricted area';

//user => password
$users = array('admin' => 'mypass', 'guest' => 'guest');


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 to send if user hits Cancel button');
}


// analyze the PHP_AUTH_DIGEST variable
if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
    !isset($users[$data['username']]))
    die('Wrong Credentials!');


// generate the valid response
$A1 = md5($data['username'] . ':' . $realm . '-'. getmyuid(). ':' . $users[$data['username']]);
$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);

if ($data['response'] != $valid_response)
    die('Wrong Credentials!');


// ok, valid username & password
echo 'Your are logged in as: ' . $data['username'];


// function to parse the http auth header
function http_digest_parse($txt)
{
    // protect against missing data
    $needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);
    $data = array();
    $keys = implode('|', array_keys($needed_parts));

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

    foreach ($matches as $m) {
        $data[$m[1]] = $m[3] ? $m[3] : $m[4];
        unset($needed_parts[$m[1]]);
    }

    return $needed_parts ? false : $data;
}
?>


Jenom podotíkám, že na mém lokálu funguje (speciálně jsem si pro tyto účely zapnul safe_mode). Chci se tedy vlastně zeptat, co mi kde uniká?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HTTP Autentizace
PříspěvekNapsal: 09 led 2010 23:08 
C4 podpora
C4 podpora

Registrován:
29 čer 2009 20:53
Příspěvky:
263
Dobrý den, php u nás běží v cgi módu, proto není možné tento postup použít. Bylo to zde již řešeno, více dočtete v diskuzním tématu Autentizace na php5.

_________________
Jan Vítek
Webhosting C4
http://www.c4.cz/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HTTP Autentizace
PříspěvekNapsal: 10 led 2010 19:54 

Registrován:
28 zář 2009 20:05
Příspěvky:
13
Děkuji za odpověď i za návod. Bohužel se mi to ale nepodařilo rozchodit pro metodu Digest. Nevím, jak přesně vygenerovat soubor .htpasswd - přepokládám, že má mít v tomto případě strukturu:

Citace:
jméno:realm:hash hesla


tedy tak, jak jsem si jí na lokálním serveru doma vytvořil pomocí utility htdigest. Nicméně jak jsem psal na mé doméně to nefunguje. Předkládám ještě .htaccess

Kód:
AuthName realm
AuthType Digest
AuthUserFile /data/www/doména.cz/doména.cz/.htpasswd
Require valid-user


Struktura .htpasswd viz výše.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HTTP Autentizace
PříspěvekNapsal: 10 led 2010 23:14 
C4 podpora
C4 podpora

Registrován:
29 čer 2009 20:53
Příspěvky:
263
Zjistil jsem, že na našich web serverech vůbec nebyl k dispozici modul mod_auth_digest, takže uvedená metoda nemohla fungovat. Modul jsme doinstalovali. Hash hesla se pro digest autentizaci vytváří jinak. Pro uživatele jmeno, AuthName realm a heslo heslo získáte hash hesla v php pomocí skriptu:

Kód:
<?
echo md5("jmeno:realm:heslo");
?>

_________________
Jan Vítek
Webhosting C4
http://www.c4.cz/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HTTP Autentizace
PříspěvekNapsal: 11 led 2010 01:12 

Registrován:
28 zář 2009 20:05
Příspěvky:
13
Děkuji. Již je vše funkční.


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
cron
FTP Uploader
Staňte se naším zákazníkem!
Hledáme kolegy
PHP, MySQL Hosting
Návody pro C4

© 2009-2024 ČESKÝ WEBHOSTING s.r.o. Kontaktní e-mail: forum@c4.cz
Diskuzní fórum využívá technologie: phpBB, phpBB-SEO.com, phpBB.cz