web-dev-qa-db-fra.com

Authentification HTTP de base et jeton de support

Je développe actuellement une API REST protégée par HTTP-Basic pour l'environnement de développement. Comme la véritable authentification se fait via un jeton, j'essaie toujours de comprendre comment envoyer deux en-têtes d'autorisation.

J'ai essayé celui-ci:

curl -i http://dev.myapp.com/api/users \
  -H "Authorization: Basic Ym9zY236Ym9zY28=" \
  -H "Authorization: Bearer mytoken123"

Je pourrais par exemple désactiver l’authentification HTTP pour mon adresse IP, mais comme je travaille habituellement dans des environnements différents avec des adresses IP dynamiques, ce n’est pas une bonne solution. Alors est-ce que je manque quelque chose?

98
Azngeek

Essayez celui-ci pour pousser l'authentification de base à l'URL:

curl -i http://username:[email protected]/api/users -H "Authorization: Bearer mytoken123"
               ^^^^^^^^^^^^^^^^^^

Si plus haut on ne travaille pas, alors vous n'avez rien à voir avec cela. Alors essayez les alternatives suivantes.

Vous pouvez passer le jeton sous un autre nom. Parce que vous manipulez l'autorisation de votre application. Ainsi, vous pouvez facilement utiliser cette flexibilité à cette fin particulière.

curl -i http://dev.myapp.com/api/users \
  -H "Authorization: Basic Ym9zY236Ym9zY28=" \
  -H "Application-Authorization: mytoken123"

Notez que j'ai changé l'en-tête en Application-Authorization. Alors, dans votre application, récupérez le jeton sous cet en-tête et traitez ce que vous devez faire.

Une autre chose que vous pouvez faire est de passer le paramètre token à travers les paramètres POST et de saisir la valeur du paramètre côté serveur. Par exemple, passer un jeton avec le paramètre post curl:

-d "auth-token=mytoken123"
59
Sabuj Hassan

Standard ( https://tools.ietf.org/html/rfc675 ) indique que vous pouvez utiliser:

  • Paramètre de corps codé selon la forme: Autorisation: porteur mytoken123
  • Paramètre de requête URI: access_token = mytoken123

Il est donc possible de transmettre de nombreux jetons de support avec l'URI, mais cela est déconseillé (voir la section 5 de la norme).

31
Janek Olszak

Si vous utilisez un proxy inverse tel que nginx entre-temps, vous pouvez définir un jeton personnalisé, tel que X-API-Token.

Dans nginx, vous devriez le réécrire pour que le proxy en amont (votre api de repos) soit simplement auth:

proxy_set_header Authorization $http_x_api_token;

... tandis que nginx peut utiliser l'en-tête Authorization d'origine pour vérifier HTTP AUth.

4
shredding

J'ai eu un problème similaire - authentifier le périphérique et l'utilisateur sur le périphérique. J'ai utilisé un en-tête Cookie à côté d'un en-tête Authorization: Bearer....

2
Iiridayn

curl --anyauth

Indique à curl de déterminer la méthode d'authentification par lui-même et d'utiliser la méthode la plus sécurisée que le site distant prétend prendre en charge. Ceci est fait en commençant par faire une requête et en vérifiant les en-têtes de réponse, induisant ainsi éventuellement un aller-retour supplémentaire du réseau. Ceci est utilisé au lieu de définir une méthode d'authentification spécifique, ce que vous pouvez faire avec --basic, --digest, --ntlm et --negotiate.

1
bbaassssiiee