web-dev-qa-db-fra.com

REST Authentification API

Je construis une application qui sera hébergée sur un serveur. Je souhaite créer une API pour l'application afin de faciliter l'interaction avec n'importe quelle plate-forme (Web App, Mobile App). Ce que je ne comprends pas, c’est que lorsqu’on utilise l’API REST, comment authentifier l’utilisateur.

Par exemple, lorsqu'un utilisateur s'est connecté et souhaite ensuite créer un sujet de forum. Comment saurai-je que l'utilisateur est déjà connecté?

179
Noor

Vous pouvez utiliser l'authentification HTTP Basic ou Digest. Vous pouvez authentifier en toute sécurité les utilisateurs en utilisant SSL, mais cela ralentit un peu l'API.

  • Authentification de base - utilise le codage Base64 pour le nom d'utilisateur et le mot de passe
  • Authentification Digest - hash le nom d'utilisateur et le mot de passe avant de les envoyer sur le réseau.

OAuth est ce qu'il y a de mieux. Les avantages que oAuth donne sont un jeton révocable ou expirable. Voir ci-après comment mettre en œuvre: Lien de travail à partir des commentaires: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf

71
ankitjaininfo

Par exemple, lorsqu'un utilisateur dispose de login.Maintenant, souhaitons créer un sujet de forum, comment saurai-je qu'il est déjà connecté?

Pensez-y - il doit y avoir une poignée de main qui indique à votre API "Créer un forum" que cette requête actuelle provient d'un utilisateur authentifié. Puisque les API REST sont généralement sans état, l'état doit être conservé quelque part. Votre client consommant les API REST est responsable de la gestion de cet état. Généralement, il se présente sous la forme d'un jeton qui est distribué depuis le moment où l'utilisateur a été connecté. Si le jeton est bon, votre demande est bonne.

Vérifiez comment Amazon AWS effectue les authentifications. C'est un exemple parfait de "transfert de l'argent" d'une API à une autre.

* J'ai pensé ajouter une réponse pratique à ma réponse précédente. Essayez Apache Shiro (ou n’importe quelle bibliothèque d’authentification/autorisation). En bout de ligne, essayez d'éviter le codage personnalisé. Une fois que vous avez intégré votre bibliothèque préférée (j'utilise Apache Shiro, d'ailleurs), vous pouvez alors effectuer les opérations suivantes:

  1. Créez une API de connexion/déconnexion du type: /api/v1/login et api/v1/logout
  2. Dans ces API de connexion et de déconnexion, effectuez l'authentification avec votre magasin d'utilisateurs.
  3. Le résultat est un jeton (généralement JSESSIONID) qui est renvoyé au client (Web, mobile, peu importe).
  4. À partir de ce moment, tous les appels ultérieurs passés par votre client comprendront ce jeton.
  5. Disons que votre prochain appel est fait vers une API appelée /api/v1/findUser
  6. La première chose que ce code API fera est de vérifier le jeton ("cet utilisateur est-il authentifié?")
  7. Si la réponse est négative, vous transmettez un statut HTTP 401 au client. Laissez-les gérer.
  8. Si la réponse est OUI, retournez l'utilisateur demandé

C'est tout. J'espère que cela t'aides.

115
Kingz
  1. Utilisez HTTP Basic Auth pour authentifier les clients, mais traitez le nom d'utilisateur/mot de passe uniquement comme jeton de session temporaire.

    Le jeton de session est juste un en-tête attaché à chaque demande HTTP, par exemple: Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0

    La chaîne Ym9ic2Vzc2lvbjE6czNjcmV0 ci-dessus est simplement la chaîne "bobsession1: s3cret" (qui est un nom d'utilisateur/mot de passe) codé en Base64.

  2. Pour obtenir le jeton de session temporaire ci-dessus, fournissez une fonction API (par exemple: http://mycompany.com/apiv1/login) qui prend nom d'utilisateur principal et mot de passe principal en tant qu'entrée, crée un nom d'utilisateur/mot de passe HTTP Basic Auth temporaire côté serveur et renvoie le jeton (par exemple: Ym9ic2Vzc2lvbjE6czNjcmV0). Ce nom d'utilisateur/mot de passe doit être temporaire, il doit expirer après 20 minutes environ.

  3. Pour plus de sécurité, assurez-vous que votre service REST est servi sur HTTPS afin que les informations ne soient pas transférées en clair.

Si vous utilisez Java, la bibliothèque Spring Security fournit un bon support pour mettre en œuvre la méthode ci-dessus.

37
gerrytan

Je pense que la meilleure approche consiste à utiliser OAuth2. Google et vous trouverez beaucoup de messages utiles pour vous aider à le configurer.

Il sera plus facile de développer des applications clientes pour votre API à partir d’une application Web ou mobile.

J'espère que ça vous aide.

7
Paulo Henrique

J'utilise l'authentification JWT. Fonctionne très bien dans mon application.

Il existe une méthode d'authentification qui nécessitera les informations d'identification de l'utilisateur. Cette méthode valide les informations d'identification et renvoie un jeton d'accès en cas de succès.

Ce jeton doit être envoyé à toutes les autres méthodes de mon API Web dans l'en-tête de la demande.

C'est assez facile à mettre en œuvre et très facile à tester.

0
Arthur Medeiros