2015-04-29 2 views
2

J'ai un service REST très simple utilisant Apigility, exposant les méthodes GET et POST. Je l'ai testé en utilisant Postman. Tout fonctionne bien.Authentification de base dans Apigility lors de l'utilisation de Postman

J'essaie alors d'ajouter une couche d'authentification. Pour ce faire, je crée un fichier htpasswd, je crée un adaptateur Basic Auth en pointant vers ce fichier via l'interface Apigility et je sélectionne ce type d'authentification sur la page des paramètres de mon API.

Je choisis enfin d'ajouter une demande d'autorisation pour la requête POST, pas l'EEG. Lorsque j'essaie de poster, on me demande un identifiant et un mot de passe, je tape celui qui correspond au contenu du fichier htpasswd, l'en-tête Authorization est généré et le POST fonctionne très bien.

Mais lorsque je tente de faire une requête GET sans l'en-tête d'autorisation, je suis toujours demandé un login et un mot de passe. Si j'annule, j'obtiens un code d'état 401 (non autorisé). Pour autant que je sache, si aucun en-tête Authorization n'est défini, le mode "guest" est utilisé par Apigility, et comme la méthode GET ne nécessite pas d'authentification, je ne devrais pas avoir à entrer un identifiant et un mot de passe pour accéder à ma ressource.

Où est-ce que je me suis trompé? Qu'est-ce que je n'ai pas compris?

Merci

+0

Il ne va pas aider beaucoup, mais je voulais juste vous faire savoir que je vais avoir exactement le même problème. Avez-vous réussi à résoudre ce problème? Si je me débrouille, je vous le ferai savoir. – Ruben

+0

Salut, je crains de ne pas avoir réussi à le résoudre pour le moment, et je n'y travaille pas régulièrement, donc pas beaucoup de progrès de mon côté. Bonne chance! – gael

Répondre

0

Vous avez probablement juste besoin de mettre à jour votre configuration et définir les méthodes ne & ne nécessitent pas d'authentification.

Vérifiez votre configuration pour la configuration suivante:

[ 
    'zf-mvc-auth' => [ 
     'authorization' => [ 
      'Your\Controller' => [ 
       'collection' => array(
        'default' => true, 
        'GET' => true, 
        'POST' => true, 
        // etc. 
       ), 
       'entity' => array(
        'default' => true, 
        'GET' => true, 
        'POST' => true, 
        // etc. 
       ), 
      ] 
     ] 
    ] 
] 

Vous devez définir les méthodes que vous souhaitez autoriser sans authentification à false.

+0

Vérifié, tout est déjà réglé. J'ai ajouté la valeur par défaut, mais ne fonctionne toujours pas comme il se doit. – gael

2

Vous venez de mentionner que vous faites cela en Postman, et je pense que la question est là.

L'authentification HTTP a une étape de "pré-authentification" dans laquelle, si aucune information d'identification n'est présente, elle inclut un en-tête WWW-Authenticate dans la réponse. Pour les clients de la machine (cURL, HTTPie, clients basées sur la langue, etc.), cela est ignoré tant que le code d'état est pas un 401 ou 403.

Cependant, par navigateur clients, tels que Postman Lorsque le navigateur rencontre un tel en-tête, il lance généralement le défi d'authentification et envoie des informations d'identification vides s'il est annulé. Ceci, bien sûr, signifie un en-tête d'autorisation est envoyée avec les informations d'identification non valides, ce qui conduit à votre 401.

Essayez d'utiliser cURL ou HTTPie de la CLI; vous devriez voir un comportement très différent là-bas.