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 (application Web, application mobile). Ce que je ne comprends pas, c'est que lors de l'utilisation de 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é?
Authorization
tête + par exemple l'en- tête du navigateur localStorage VSCookie
+ le stockage standard des cookies du navigateur.Réponses:
Vous pouvez utiliser l'authentification HTTP Basic ou Digest. Vous pouvez authentifier en toute sécurité les utilisateurs en utilisant SSL par-dessus, cependant, cela ralentit un peu l'API.
OAuth est ce qu'il y a de mieux. Les avantages qu'oAuth donne est un jeton révocable ou expirable. Reportez-vous ci-dessous pour savoir comment mettre en œuvre: Lien de travail à partir des commentaires: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf
la source
Par exemple, lorsqu'un utilisateur s'est connecté, disons maintenant que l'utilisateur souhaite créer un sujet de forum, comment saurai-je que l'utilisateur 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 en cours provient d'un utilisateur authentifié. Étant donné que les API REST sont généralement sans état, l'état doit être conservé quelque part . Votre client qui utilise les API REST est responsable du maintien de cet état. Habituellement, il se présente sous la forme d'un jeton qui est transmis depuis le moment où l'utilisateur s'est 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 responsabilité» 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 / d'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, btw), vous pouvez alors faire ce qui suit:
/api/v1/login
etapi/v1/logout
JSESSIONID
) qui est renvoyé au client (Web, mobile, peu importe)/api/v1/findUser
C'est tout. J'espère que cela t'aides.
la source
Utilisez HTTP Basic Auth pour authentifier les clients, mais ne traitez le nom d'utilisateur / mot de passe que comme un jeton de session temporaire .
Le jeton de session est juste un en-tête attaché à chaque requête HTTP, par exemple:
Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0
La chaîne Ym9ic2Vzc2lvbjE6czNjcmV0 ci-dessus est juste la chaîne "bobsession1: s3cret" (qui est un nom d'utilisateur / mot de passe) encodée en Base64.
Pour obtenir le jeton de session temporaire ci-dessus, fournissez une fonction API (par exemple:)
http://mycompany.com/apiv1/login
qui prend le nom d'utilisateur principal et le mot de passe principal comme 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 environ 20 minutes.Pour plus de sécurité, assurez-vous que votre service REST est servi via HTTPS afin que les informations ne soient pas transférées en clair
Si vous êtes sur Java, la bibliothèque Spring Security fournit un bon support pour implémenter la méthode ci-dessus
la source
Je pense que la meilleure approche est d'utiliser OAuth2. Google et vous trouverez de nombreux articles utiles pour vous aider à le configurer.
Cela facilitera le développement d'applications client pour votre API à partir d'une application Web ou d'une application mobile.
J'espère que cela vous aide.
la source
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 requête.
C'est assez facile à mettre en œuvre et très facile à tester.
la source