Bonjour tout le monde,

Je développe un site web sous forme d'API / Client. J'ai fait ce choix car je souhaite, une fois le client angular terminé, exploité les données pour développer une application Android avec cette même API.

Je me pose pas mal de questions car c'est nouveau pour moi. J'ai fait pas mal de recherches pendant plusieurs jours sur un sujet qui me préoccupe: l'authentification des membres.

En effet, beaucoup de personnes parlent de OAuth2. J'ai lu beaucoup sur ce sujet mais il y a des points qui restent sombres pour ma part. Quand on parle de client (http://blog.netapsys.fr/oauth-comment-ca-marche/comment-page-1/), on parle bien, dans mon cas, de l'application Angular ? Car je ne sais pas si ces tokens doivent être générés pour chaque client (Angular, Application Android...) ou pour chaque utilisateur (à sa création/à sa connexion). De même, je souhaite que l'API ne puisse être exploitée que par mes clients (Angular et ma future application Android).

Bref, je suis un peu perdu. Je ne sais pas si j'ai été clair mais si quelqu'un se sent d'humeur, merci d'avance :).

4 réponses


Un token va servir à identifier chaque requête effectuée auprès de ton API. Il fournit des informations telles que l'ID de l'utilisateur qui fait la requête, le timeout du token etc ...

En créant un middleware de vérification du token, tu peux ainsi le valider ou non, et permettre à la requête d'aboutir en fonction.

Le token le plus répandu est sans doute JsonWebToken. Tu peux l'implanter sur la plupart des systèmes Back-End actuels (Node, PHP). Le token sera donc un objet JSON, encodé pour les échanges client/serveur. Le client aura donc le token encodé stocké en cookie / session, et le transmet avec chacune de ses requêtes à l'API. Le middleware se charge ensuite de le décoder et de vérifier sa validité.

Plus d'informations sur JsonWebToken (JWT) ici. Si tu utilise Symfony en back-end, un bundle maintenu est disponible pour utiliser JWT ici.

Bien sûr, ce n'est pas OAuth, qui est un peu plus complexe dans son utilisation, mais bien plus sécurisé. JWT permet de mettre en place rapidement une solution sûre d'authentification, mais est loin d'égaler OAuth en termes de sécurité. JWT est cependant bien plus flexible à installer et à comprendre.

Bon courage !

EDIT : (pour répondre plus clairement à ta question) un token est donc généré pour chaque utilisateur, lors de sa connexion, afin d'authentifier ses requêtes auprès de l'API.

keuns
Auteur

Hello Batondsky,

Merci pour ta réponse. Question de sécurité et de fierté, je souhaite utiliser OAuth2 malgré la difficulté.
Pour le Bundle OAuth de fos pour Symfony avec fos user, j'ai suivi cette page: https://gist.github.com/tjamps/11d617a4b318d65ca583
Pas de problème pour le moment.

Pour s'identifier, l'utilisateur renseigne son mdp et son username. Si j'ai bien compris, je dois:

  • envoyer une requete à mon API avec ces infos
  • vérifier quel utilisateur correspond et aller chercher son client id et son Client secret via mon controller grâce à son id user
  • lancer ensuite une nouvelle requete avec toutes ces infos pour récupérer un token sur mon client
  • ce token est stocké dans le header des nouvelles requêtes de mon utilisateur sur mon client Angular
    Je ne sais pas si j'ai tout bon mais je me demande si c'est vraiment la procédure, ça me parait lourd.

Encore merci pour le temps que tu m'accordes.

En effet, la procédure que tu annonces est la bonne.

Afin de faciliter tout celà avec Angular, tu peux créer un service qui va se charger entièrement de l'authentification, et qui va ajouter le token de l'utilisateur aux headers de la requête à l'API, puis ensuite intégrer ce service à ton application en tant qu'intercepteur.

Naturellement tout ceci est valable pour Angular 1, je ne suis pas très renseigné sur Angular 2.

@lucien-lefoll , donc token est un objet json générée pour chaque utilisateur au cours de faire connexion et envoyée avec chaque requéte faire a mon api ?? et stockée en session ou cookie et supprimée en déconnexion , en nouvelle connexion pour chaque utilisateur il génére une nouvelle token ??
le définition qui j'écrit pour token est vrai ??