Bonjour,
Je tente de mettre en place une authentification HTTP digest pour mon application. Ci-dessous mon code (tiré directement de la doc Zend) :
Lorsque je tente d'accéder à mon appli, le browser affiche bien la fenêtre de login. Lorsque je rentre mes login/password, il semble ne pas les reconnaître comme corrects et me réaffiche la fenêtre de login. J'ai essayé en basic et en digest et j'ai le même problème dans les deux cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 $logger = Zend_Registry::get('logger'); $config = array( 'accept_schemes' => 'digest', 'realm' => 'zks', 'digest_domains' => '/', 'nonce_timeout' => 3600, ); $adapter = new Zend_Auth_Adapter_Http($config); //$basicResolver = new Zend_Auth_Adapter_Http_Resolver_File(); //$basicResolver->setFile(dirname(__FILE__).'/../security/basicPasswd.txt'); $digestResolver = new Zend_Auth_Adapter_Http_Resolver_File(); $digestResolver->setFile(dirname(__FILE__).'/../security/digestPasswd.txt'); //$adapter->setBasicResolver($basicResolver); $adapter->setDigestResolver($digestResolver); $response = Zend_Controller_Front::getInstance()->getResponse(); $request = Zend_Controller_Front::getInstance()->getRequest(); assert($request instanceof Zend_Controller_Request_Http); assert($response instanceof Zend_Controller_Response_Http); $adapter->setRequest($request); $adapter->setResponse($response); //Authorization $result = $adapter->authenticate(); if (!$result->isValid()) { $logger->log('[preDispatch] IDENTITY : '.print_r($result->getIdentity(),true).' <br /><br />', Zend_Log::DEBUG); $logger->log('[preDispatch] ERREURS : '.print_r($result->getMessages(),true).' <br /><br />', Zend_Log::DEBUG); $logger->log("RESPONSE : ".print_r($response->getHeaders(),true).' <br /><br />', Zend_Log::DEBUG); $logger->log("REQUEST : ".$request->getHeader("Authorization").' <br /><br />', Zend_Log::DEBUG); }
Voici l'output que j'obtiens sur la page :
2010-01-29T14:16:41+01:00 DEBUG (7): [preDispatch] IDENTITY : Array ( )
2010-01-29T14:16:41+01:00 DEBUG (7): [preDispatch] ERREURS : Array ( [0] => Invalid or absent credentials; challenging client )
2010-01-29T14:16:41+01:00 DEBUG (7): RESPONSE : Array ( [0] => Array ( [name] => Www-Authenticate [value] => Digest realm="zks", domain="/", nonce="98112168bacad0dab7a0db892f127b2a", opaque="d75db7b160fe72d1346d2bd1f67bfd10", algorithm="MD5", qop="auth" [replace] => ) )
2010-01-29T14:16:41+01:00 DEBUG (7): REQUEST :
Côté fichiers contenant les données sur les users, j'ai :
pour le basic :
pour le digest :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 thomas:zks:thomas
D'après l'output généré, il semble que la requête reçue par le serveur ne contient pas le header "Authorization". Pourtant, cette même requête contient bien ce header lorsque je sniff le réseau entre les deux. J'ai le problème sur Firefox comme sur IE.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 thomas:zks:ca53835d2a7e04669ccf2dd1410acbe4
J'en suis venu à penser qu'il s'agirait peut-être d'un problème de configuration d'Apache qui empêcherait les requêtes de type authentification de garder leurs headers. Quelqu'un a-t-il déjà rencontré ce problème ? (Je travaille en local sur un Zend server)
Merci d'avance pour votre aide.
Partager