Authentification HTTP de base - quelle est l'expérience de navigateur Web attendue?

255

Lorsqu'un serveur autorise l'accès via l'authentification HTTP de base, quelle est l'expérience attendue dans un navigateur Web ?

En ignorant le navigateur Web pendant un moment, voici comment créer une demande d'authentification de base avec curl:

curl -u myusername:mypassword http://somesite.com

Mais qu'en est-il dans un navigateur Web? Ce que j'ai vu sur certains sites Web, c'est que je visite l'URL, puis le serveur renvoie le code de réponse 401. Le navigateur affiche ensuite une invite de nom d'utilisateur / mot de passe.

Cependant, sur somesite.com, je ne reçois pas du tout une invite d'autorisation, juste une page qui dit que je ne suis pas autorisé. Somesite n'a-t-il pas implémenté correctement le flux de travail d'authentification de base ou dois-je faire autre chose?

bpapa
la source
Voulez-vous vraiment utiliser Basic Auth et non Digest?
b_erb
pas sûr de la différence, sauf si vous demandez si je code en base 64. si je le faisais par programme, ce serait le cas, mais curl le fait pour moi.
bpapa
Vous pouvez découvrir quelle authentification est utilisée à partir de l'en-tête de réponse WWW-Authenticate (valeur: Digest ou Basic).
Kniganapolke
2
Je pense que cette question doit être reformulée. Plus d'un répondant pense qu'il s'agit d'une question de curl plutôt que de navigateur.
LS
Voulez-vous dire «authentification» lorsque vous utilisez le terme «autorisation»?
Tarun

Réponses:

160

Pour aider tout le monde à éviter la confusion, je reformulerai la question en deux parties.

Premièrement: "comment faire une requête HTTP authentifiée avec un navigateur, en utilisant l'authentification BASIC?" .

Dans le navigateur, vous pouvez d'abord effectuer une authentification de base http en attendant l'invite à venir ou en modifiant l'URL si vous suivez ce format: http://myusername:[email protected]

NB: la commande curl mentionnée dans la question est parfaitement correcte, si vous avez une ligne de commande et curl installés. ;)

Références:

Toujours selon la page de manuel CURL https://curl.haxx.se/docs/manual.html

HTTP

  Curl also supports user and password in HTTP URLs, thus you can pick a file
  like:

      curl http://name:[email protected]/full/path/to/file

  or specify user and password separately like in

      curl -u name:passwd http://machine.domain/full/path/to/file

  HTTP offers many different methods of authentication and curl supports
  several: Basic, Digest, NTLM and Negotiate (SPNEGO). Without telling which
  method to use, curl defaults to Basic. You can also ask curl to pick the
  most secure ones out of the ones that the server accepts for the given URL,
  by using --anyauth.

  NOTE! According to the URL specification, HTTP URLs can not contain a user
  and password, so that style will not work when using curl via a proxy, even
  though curl allows it at other times. When using a proxy, you _must_ use
  the -u style for user and password.

La deuxième et vraie question est «Cependant, sur somesite.com, je ne reçois pas du tout une invite d'autorisation, juste une page qui dit que je ne suis pas autorisé. sinon je dois faire? "

La documentation de curl indique que l' -uoption prend en charge de nombreuses méthodes d'authentification, Basic étant la valeur par défaut.

Nicocube
la source
3
La question concerne curl, qui n'est pas un navigateur.
Ray Baxter
26
Vous n'avez peut-être pas lu la question entièrement, comme il est dit juste sous la commande curl: "Cependant, pour le moment, je n'ai pas accès à curl (longue histoire), et je veux le faire à partir du navigateur Web, si possible . " ;)
Nicocube
3
Je suis tout à fait d'accord pour dire que le curl fonctionne bien, je l'utilise personnellement régulièrement, mais la question ne concerne pas le curl ...
Nicocube
4
Le demandeur veut savoir pourquoi auth. ne fonctionne pas dans le navigateur. La question ne concerne pas cURL.
LS
68

As-tu essayé ?

curl somesite.com --user username:password
daronwolff
la source
13
@daronwolff Vous avez seulement changé la position des arguments et remplacé -u par --user (ce qui n'est que le long terme), mais à part cela, vous avez écrit exactement ce que l'OP a déjà écrit dans sa question
Murmel
3
Le demandeur veut savoir pourquoi auth. ne fonctionne pas dans le navigateur. La question ne concerne pas cURL.
LS
15

Votre ancien nom d'utilisateur / mot de passe peut être mis en cache dans votre navigateur. Essayez de les effacer et vérifiez à nouveau.

Si vous utilisez IE et que somesite.com se trouve dans votre zone de sécurité intranet, IE peut envoyer automatiquement vos informations d'identification Windows.

AUSteve
la source
8

En-tête d'authentification WWW

Vous pouvez également l'obtenir si le serveur envoie un code de réponse 401 mais ne définit pas correctement l'en-tête WWW-Authenticate - je dois savoir, je viens de le corriger dans notre propre code parce que les applications VB ne faisaient pas apparaître l'invite d'authentification.

Chris McCauley
la source
6

S'il n'y a pas d'informations d'identification fournies dans les en-têtes de demande, voici la réponse minimale requise pour qu'IE demande à l'utilisateur des informations d'identification et soumette à nouveau la demande.

Response.Clear();
Response.StatusCode = (Int32)HttpStatusCode.Unauthorized;
Response.AddHeader("WWW-Authenticate", "Basic");
Chris Hinch
la source
5

Vous pouvez utiliser Postman un plugin pour Chrome. Il donne la possibilité de choisir le type d'authentification dont vous avez besoin pour chacune des demandes. Dans ce menu, vous pouvez configurer l'utilisateur et le mot de passe. Postman traduira automatiquement la configuration en un en-tête d'authentification qui sera envoyé avec votre demande.

Mgccon
la source