J'utilise l'API graphique Facebook (qui utilise oauth 2.0 pour l'authentification) avec succès depuis un certain temps déjà. J'ai maintenant besoin d'écrire ma propre API qui permette aux développeurs de s'y connecter de manière similaire. J'ai examiné diverses bibliothèques, mais j'aimerais quelque chose d'un peu plus léger et j'ai donc décidé de créer la mienne. En regardant le code que j'ai pour authentifier un utilisateur sur Facebook, il semble relativement simple, mais s'il vous plaît, corrigez-moi si je m'égare.
Tout d'abord, je dois fournir une page sécurisée vers laquelle le consommateur doit être redirigé, par exemple https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEY&redirect_url=CALLBACK_URL . L'utilisateur vérifierait l'application puis je redirigerais vers l'url fournie dans l'url de rappel avec le oauth_token dans la chaîne de requête. Je suppose que je pourrais simplement générer une chaîne unique aléatoire ici pour le oauth_token et la stocker contre l'utilisateur pour ce consommateur particulier (EDIT : S'il vous plaît voir la réponse ci-dessous, cela devrait être unique pour chaque application consommateur et non l'utilisateur).
C'est l'étape 1 du chemin. Je dois maintenant fournir une deuxième page sécurisée vers laquelle le consommateur déclenchera une requête web. par exemple https://api.mydomain.com/oauth/access_token?client_id=CONSUMER_KEY&client_secret=CONSUMER_SECRET&oauth_token=OAUTH_TOKEN_RETURNED_ABOVE . Cela permettrait au consommateur d'échanger le oauth_token renvoyé ci-dessus contre un jeton d'accès. Encore une fois, je génère simplement une chaîne unique aléatoire et je la stocke dans l'utilisateur pour ce consommateur particulier.
Désormais, mon API accepterait l'access_token pour les méthodes qui tentent d'obtenir des informations spécifiques à l'utilisateur qui l'utilise.
J'aimerais savoir si j'ai bien compris. La spécification OAuth 2.0 semble extrêmement triviale si c'est le cas. De plus, pourquoi devons-nous échanger l'oauth_token avec un access_token ? J'ai ma propre idée mais j'apprécierais que quelqu'un puisse m'aider à clarifier ce point.
J'apprécierais vraiment vos commentaires car je ne veux pas perdre des heures à implémenter ce système alors qu'il est complètement faux.
Merci