Je développe actuellement une REST-API qui est protégée par HTTP-Basic pour l'environnement de développement. Comme l'authentification réelle se fait 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 IP mais comme je travaille habituellement dans différents environnements avec des IP dynamiques, ce n'est pas une bonne solution. Alors est-ce que je manque quelque chose?
400 Bad request
. Idiot.Réponses:
Essayez celui-ci pour pousser l'authentification de base à l'url:
Si ci-dessus ne fonctionne pas, 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é à cette fin particulière.
Remarquez que j'ai changé l'en-tête en
Application-Authorization
. Donc, à partir de 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, pour passer le à
token
travers lesPOST
paramètres et la valeur de saisir le paramètre du côté serveur. Par exemple en passant un jeton avec le paramètre curl post:la source
-v
param. Vous constaterez que son envoiAuthorization: Basic Ym9zY236Ym9zY28=, Authorization: Bearer mytoken123
à l'en-tête de demande. Du côté de votre serveur, si vous cochez, vous constaterez que vous avez un en-tête d'autorisation comme celui-ciAuthorization: Basic Ym9zY236Ym9zY28=, Bearer mytoken123
séparé par une virgule. Donc, je pensais que je devrais vous suggérer des substituts.Standard ( https://tools.ietf.org/html/rfc6750 ) indique que vous pouvez utiliser:
Il est donc possible de passer de nombreux jetons au porteur avec URI, mais cela est déconseillé (voir la section 5 de la norme).
la source
Si vous utilisez un proxy inverse tel que nginx entre les deux, vous pouvez définir un jeton personnalisé, tel que
X-API-Token
.Dans nginx, vous le réécririez pour que le proxy en amont (votre api de repos) soit simplement auth:
... tandis que nginx peut utiliser l'en-tête Authorization d'origine pour vérifier HTTP AUth.
la source
J'ai eu un problème similaire - authentifier l'appareil et l'utilisateur sur l'appareil. J'ai utilisé un en-
Cookie
tête à côté d'un en-Authorization: Bearer...
tête.la source
Cookie
tête est déjà fréquemment utilisé pour l'authentification.la source
Il existe une autre solution pour tester les API sur le serveur de développement.
HTTP Basic Authentication
uniquement pour les itinéraires WebConfiguration du serveur Web pour
nginx
etLaravel
serait comme ceci:Authorization: Bearer
fera le travail de défendre le serveur de développement contre les robots d'exploration et autres visiteurs indésirables.la source
Avec nginx, vous pouvez envoyer les deux jetons comme celui-ci (même si c'est contre la norme):
Cela fonctionne tant que le jeton de base est le premier - nginx le transmet avec succès au serveur d'applications.
Ensuite, vous devez vous assurer que votre application peut extraire correctement le porteur de la chaîne ci-dessus.
la source