6
votes

Envoi de mots de passe sur https: obtenir vs post

Je crée une API sans tête qui va conduire une extrémité avant angulaire. J'ai un peu de difficulté à comprendre comment je dois gérer l'authentification de l'utilisateur.

Évidemment, l'API devrait exécuter SSL, mais la question qui se pose est de savoir comment devrais-je envoyer la demande contenant le mot de passe de l'utilisateur: surveille ou post. C'est une API reposante, alors ce que je fais est de récupérer des informations signifiant qu'il devrait obtenir une demande d'obtention. Mais envoyer le mot de passe sur l'obtention signifie que cela fait partie de l'URI, non? Je sais que même une demande d'obtention est crypté sur HTTPS, mais est-ce toujours la bonne voie? Ou est-ce un cas pour rompre de manière reposante et avoir les données dans le corps ou quelque chose (une demande d'accès peut-elle avoir des données dans le corps?).


0 commentaires

3 Réponses :


1
votes

Vous pouvez également envoyer un corps de données avec une demande d'obtention aussi, mais cela n'est pas pris en charge par toutes les bibliothèques que je suppose.

Mieux vaut utiliser Post ou Demander des en-têtes. Regardez d'autres API et comment ils la manipulent.

Mais vous pouvez toujours utiliser obtenir avec une authentification de base comme ici: http: / /rescookbook.com/basics/loggingin/


4 commentaires

Tellement mieux de casser le repos dans ce cas?


J'ai mis à jour ma réponse. Je pense que cela n'a pas beaucoup d'importance. Et je n'ai pas envie de casser le repos dans ce cas. C'est une sorte de zone grise :) Mais vous pouvez utiliser l'authentification de base cependant


La poste n'est pas nécessairement meilleure. Cela dépendra de l'action prise contre une ressource.


À droite. Je pense que la voie à suivre serait avec une authentification de base ou une sorte de jeton API envoyé via HTTP Header



4
votes

Obtenir la plupart du temps que la demande liera les données de l'URL elle-même ... il est donc plus redurbable que la poste .. Donc, si c'est obtenir, il y a une possibilité pour le journal des antécédents vivants

Utiliser ? user = MyUSNAME & PASS = MyPasswort est exactement comme à l'aide d'une forme basée sur get et, tandis que la question du référeur peut être contenue, les problèmes concernant les journaux et l'historique subsistent.

Envoi de tout type de données sensibles sur GET est dangereux, même s'il s'agit de HTTPS. Ces données peuvent se retrouver dans des fichiers journaux sur le serveur et seront incluses dans l'en-tête de référateur dans des liens vers ou inclus des autres côtés. Ils seront également enregistrés dans l'histoire du navigateur afin qu'un attaquant puisse essayer de deviner et de vérifier le contenu original du lien avec une attaque contre l'histoire.


2 commentaires

Les données sont-elles enregistrées par le navigateur même si c'est une demande d'obtention sur Ajax?


L'envoi de données sensibles dans l'URL d'une demande d'obtention est dangereuse, oui, mais uniquement parce que l'URL est enregistrée sur le serveur comme indiqué. Cependant, l'envoi de données sensibles dans un champ d'en-tête d'une demande d'obtention est correcte, tant que vous communiquez sur HTTPS.



6
votes

Si vous passez les informations d'identification dans une en-tête de demande, vous serez bien avec une demande d'obtention ou de poste. Vous avez la possibilité d'utiliser l'en-tête d'autorisation établi avec votre choix de schéma d'authentification ou vous pouvez créer des en-têtes personnalisés spécifiques à votre API.

Lorsque vous utilisez des champs d'en-tête comme moyen de communication des informations d'identification, vous n'avez pas besoin de craindre les informations d'identification écrites sur le journal d'accès, car les en-têtes ne sont pas inclus dans ce journal. L'utilisation des champs d'en-tête est également conforme aux normes de repos et doit effectivement être utilisée pour communiquer toutes les métadonnées pertinentes pour la demande / réponse des ressources. Ces méta-données peuvent inclure, sans toutefois s'y limiter, des informations telles que: la taille de la collecte, les détails de la pagination ou les emplacements de ressources connexes.

en résumé, utilisez toujours des champs d'en-tête comme moyen d'authentification / autorisation.


1 commentaires

Intéressant. J'utilise l'en-tête Autorisation Lorsque vous avez passé mon JWT, comme prévu, mais je n'ai pas réalisé qu'il était standard de l'utiliser pour une authentification initiale.