Authentification HTTP et de jeton de base

Je développe actuellement une API REST protégée par HTTP-Basic pour l’environnement de développement. Comme l’authentification réelle est effectuée via un jeton, j’essaie toujours de savoir 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 dynamics, ce n’est pas une bonne solution. Alors est-ce que je manque quelque chose?

Essayez celui-ci pour pousser l’authentification de base à l’url:

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

Si ci-dessus on ne fonctionne 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 gérez l’autorisation de votre application. Vous pouvez donc facilement utiliser cette flexibilité dans ce but particulier.

 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 . Ainsi, à partir de votre application, saisissez le jeton sous cet en-tête et traitez ce que vous devez faire.

Une autre chose à faire est de passer le token travers les parameters POST et de récupérer la valeur du paramètre côté serveur. Par exemple, jeton de passage avec paramètre post curl:

 -d "auth-token=mytoken123" 

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

  • Paramètre de corps codé par formulaire: Autorisation: porteur mytoken123
  • Paramètre de requête d’URI: access_token = mytoken123

Il est donc possible de passer de nombreux Token Bearers avec l’URI, mais cela est déconseillé (voir la section 5 de la norme).

curl –anyauth

Indique à curl de déterminer lui-même la méthode d’authentification et d’utiliser le plus sécurisé que le site distant prétend prendre en charge. Cela se fait en faisant d’abord une demande et en vérifiant les en-têtes de réponse, induisant ainsi éventuellement un aller-retour réseau supplémentaire. Ceci est utilisé au lieu de définir une méthode d’authentification spécifique, que vous pouvez utiliser avec –basic, –digest, –ntlm et –negotiate.

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

En nginx, vous le réécrivez pour que le proxy en amont (votre rest api) soit juste auth:

 proxy_set_header Authorization $http_x_api_token; 

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

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 de Cookie côté d’un en-tête Authorization: Bearer...