Lorsqu'une API nécessite qu'un client s'authentifie auprès d'elle, j'ai vu deux scénarios différents utilisés et je me demande quel cas utiliser pour ma situation.
Exemple 1. Une API est proposée par une entreprise pour permettre à des tiers de s'authentifier avec un jeton et un secret à l'aide de HTTP Basic.
Exemple 2. Une API accepte un nom d'utilisateur et un mot de passe via HTTP Basic pour authentifier un utilisateur final. Généralement, ils obtiennent un jeton pour les demandes futures.
Ma configuration: je disposerai d'une API JSON que j'utiliserai comme backend pour une application mobile et web. Cela semble être une bonne pratique pour l'application mobile et Web d'envoyer un jeton et un secret afin que seules ces deux applications puissent accéder à l'API bloquant tout autre tiers.
Mais l'application mobile et Web permet aux utilisateurs de se connecter et de soumettre des messages, d'afficher leurs données, etc. Je voudrais donc qu'ils se connectent également via HTTP Basic à chaque demande.
Dois-je utiliser en quelque sorte une combinaison de ces deux méthodes ou envoyer uniquement les informations d'identification de l'utilisateur final (nom d'utilisateur et jeton) à chaque demande? Si j'envoie uniquement les informations d'identification de l'utilisateur final, dois-je les stocker dans un cookie sur le client?
la source
Réponses:
L'authentification de base HTTP nécessite l'envoi du nom d'utilisateur et du mot de passe à chaque demande de ressource. Le nom d'utilisateur: le mot de passe est passé dans l'en-tête de demande "Autorisation" chaîne codée en base64 préfixée par "De base". Si toutes vos communications http sont cryptées (via ssl), les informations de l'en-tête d'autorisation ne devraient pas pouvoir être facilement utilisées par les attaquants, car il est peu probable qu'ils puissent les récupérer.
Un http chiffré SSL avec une authentification de base devrait suffire.
la source
OAuth / OpenID peut-il fonctionner avec un jeton / secret?
J'ai récemment envisagé le scénario suivant:
Comme simple test, j'ai pu:
Cela permettrait à l'application pour appareil mobile de s'authentifier avec les mêmes informations d'identification que via le Web Front End (le même compte) et pourrait également autoriser l'accès à l'API.
la source