Détails dans WWW-Authenticate

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Détails dans WWW-Authenticate

par Louisss » 22 mars 2008, 18:11

Bonjour.
J'ai pas mal avancé dans la compréhension du bidule, et je reviens donc avec d'autres questions :

1) Dans les tutoriels et la documentation officielle qui présente l'identification HTTP, on trouve généralement un exemple avec le code suivant :

Code : Tout sélectionner

if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); echo "Texte utilisé si le visiteur utilise le bouton d'annulation"; exit; }
Or, lorsque l'en-tête WWW-Authenticate est envoyée, donc (si j'ai bien compris) lorsque l'instruction header('WWW-Authenticate: Basic realm="My Realm"'); est exécutée, la boîte de demande des noms et mot de passe apparait et la page est rechargée immédiatement après.
D'où la question : à quoi servent les instructions header('HTTP/1.0 401 Unauthorized');, echo "Texte utilisé si le visiteur utilise le bouton d'annulation"; et exit; ? Logiquement, elles ne peuvent jamais être exécutées, car soit elles sont esquivées par le if, soit elles le sont par l'envoi de l'en-tête WWW-Authenticate.

2) Elle est sensée faire quoi l'en-tête HTTP/1.0 401 Unauthorized ? Quand je l'exécute toute seule, j'obtiens une page blanche... D'après ce que j'ai lu dans les tutos et la doc, c'est le serveur qui l'envoie comme réponse dans le cas d'une mauvaise identification. Mais une réponse sous la forme d'une page blanche ?

Merci d'avance pour vos réponses

par Louisss » 17 mars 2008, 18:25

Merci pour ces débuts de réponse.

HyWaN : j'ai bien jeté un coup d'oeuil à la RFC 2616, mais c'est tout en Anglais et même si je comprend généralement cette langue, là c'est trop lourd. Si quelqu'un connait l'adresse d'une (bonne) traduction de ce genre de page, ce serait génial.

Ryle : effectivement, la valeur affectée à realm apparaît dans le texte de la boîte de demande du nom et du mot de passe. Mais enfin, ce ne peut pas être que ça... Si ???
Par rapport à la possibilité de se déconnecter (autrement dit, de redemander cette boîte de dialogue) : il doit forcément y avoir un moyen de le faire, sinon comment pourrait-on comparer le nom et le mot de passe ainsi reçus avec une BD ou un fichier afin d'authentifier le visiteur ? Il faut bien pouvoir rejeter ce qu'il a saisit s'il se trompe par exemple. Or, comme la page est rechargée dès que la boîte est validée, et que c'est seulement à ce moment qu'on peut faire les tests d'authentification, du coup je ne comprend plus comment ça peut marcher cette histoire ???

Ha, ça y est j'ai compris (je pense) et ça a l'air finalement assez simple : si on remet l'instruction header('WWW-Authenticate: Basic realm="My Realm"'), le nom et le mot de passe sont redemandés, donc ça doit déconnecter le visiteur... Le problème, c'est que la déconnexion se fait avec une nouvelle boîte de dialogue (on devrait pouvoir s'en passer) et son texte dit que le mot de passe est incorrect, ce qui ne correspond pas à toutes les situations (si le visiteur demande explicitement à se déconnecter par exemple).
Je vais continuer de chercher.

par Ryle » 17 mars 2008, 17:40

Je crois que le realm correspond au authname du fichier .htaccess, en gros, c'est le message affiché dans la boite de dialogue...

Quant à la façon de terminer la session, je ne crois pas qu'il y ait d'autre moyen que de fermer tous les navigateurs ouverts dans le même processus. (En gros, si tu te connectes au site protégé, et qu'à côté, tu ouvres une nouvelle fenêtre avec CTRL+N, même si tu refermes la première, si avec la nouvelle tu rentres l'url du site protégé, tu es considéré comme authentifié...)

par Hywan » 17 mars 2008, 17:40

Bonjour :).

Tu as regardé du côté de la RFC 2616 ?

Détails dans WWW-Authenticate

par Louisss » 17 mars 2008, 17:23

Bonjour.

J'ai trouvé pas mal de docs sur l'identification HTTP, mais tout n'est pas expliqué en détail et j'aimerais en savoir plus :
- dans l'instruction header('WWW-Authenticate: Basic realm="My Realm"'), ça veut dire quoi realm="My Realm" ? Je vois que beaucoup de monde reprend cette instruction telle quelle sans se poser de question (et que ça a l'air de marcher), mais il me semble qu'un paramètre peut recevoir différentes valeurs, non ?

- comment fait-on pour remettre à 0 la boîte de dialogue d'identification générée par header() ? Je remarque qu'à partir du moment où j'entre un nom et un mot de passe, si je recharge la page ou que je vais voir ailleurs pour y revenir quelques minutes après, le nom et le mot de passe sont toujours considérés comme saisis et on ne peut pas revoir la boîte. Je suis obligé de fermer complètement mon navigateur pour repartir de 0. C'est un peu comme si ça ouvrait une session qu'il faudrait fermer par une instruction particulière, mais laquelle ?

Pour info, voici le code que je teste pour l'instant :

Code : Tout sélectionner

if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); echo "Texte utilisé si le visiteur utilise le bouton d'annulation"; exit; } else { echo "Bonjour, ".$_SERVER['PHP_AUTH_USER']."<br />"; echo "Votre mot de passe est ".$_SERVER['PHP_AUTH_PW']."."; }
Merci d'avance pour vos éclairages.