web-dev-qa-db-fra.com

La meilleure façon d'implémenter l'authentification pour une API REST

Nous développons des applications sociales pour mobile. Chaque application utilise les services Web de l'API RESTful. Lorsque j'implémente la connexion, je stocke généralement le nom d'utilisateur et le mot de passe quelque part sur l'appareil. Ensuite, je les envoie et en réponse, j'ai accès à mon profil. Mais je sais aussi qu'il existe une autre façon de procéder.

L'un génère en quelque sorte un jeton avec un algorithme particulier, puis l'envoie à la place du nom d'utilisateur et du mot de passe pour y accéder.

Comment dois-je mettre cela en œuvre? Dois-je envoyer ce jeton avec toute autre demande que la connexion?

21
Vladimir Stazhilov

Il existe plusieurs façons d'implémenter l'authentification dans le contexte RESTful, et il est plus sûr d'envoyer uniquement des jetons au lieu de login/mot de passe: vous pouvez facilement créer des jetons être invalide par expiration de délai ou par d'autres critères, et demander à l'utilisateur de se ré-authentifier.

Par exemple authentification REST requêtes utilisant HMAC . Dans cette approche, le client aura public et clés secrètes . Pour toutes les demandes qui nécessitent une authentification , vous devez ajouter clé publique , et utilisez clé secrète pour calculer le hachage de votre demande

var myRequest = "https://myserver/resource?publicId=12345&param=value";
var requestHash = hmac_implementation(myRequest);
myRequest = myRequest + '&hmac=' + requestHash;

Maintenant, le serveur peut identifier la demande par clé publique et calculer requestHash lui-même. Si les deux hachages sont égaux, l'utilisateur est autorisé.

Btw, vous devez également utiliser https pour sécuriser la communication sur un réseau informatique - cela réduira considérablement le nombre de problèmes possibles.

14
Akim

oAuth est la norme pour cela, mais il existe d'autres solutions.

N'essayez pas de mettre en œuvre la sécurité, les jetons, etc. tout seul, car c'est un sujet difficile et risqué. Jetez par exemple un coup d'oeil ici:

https://stackoverflow.com/questions/4574868/securing-my-rest-api-with-oauth- while-still-allowing-authentication-via-third-pa

9
Luc Franken