La meilleure façon de mettre en œuvre l'authentification pour une API REST

21

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?

Vladimir Stazhilov
la source
11
C'est l' authentification , pas l' autorisation . Authentification = prouver que vous êtes bien ce que vous dites être. Autorisation = prouver que vous êtes autorisé à faire ce que vous avez demandé.
tdammers
J'allais juste ajouter le même commentaire aux réponses! +1 à vous @tdammers J'ai édité tout le contenu, donc l'autorisation de googler ne vous amène pas ici
Shiplu Mokaddim

Réponses:

14

Il existe plusieurs façons d'implémenter l' authentification dans un contexte RESTful, et il est plus sûr d'envoyer uniquement des jetons au lieu de login / mot de passe: vous pouvez facilement rendre les jetons invalides par timeout ou selon d'autres critères, et demander à l'utilisateur de se ré-authentifier .

Par exemple, les demandes d'authentification REST utilisant HMAC . Dans cette approche, le client disposera de clés publiques et secrètes . Pour toutes les demandes qui nécessitent une authentification , vous devez ajouter une clé publique et utiliser une 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 lui- même requestHash . 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.

Akim
la source