2016-12-27 2 views
1

Je dois développer une API RESTful pour une application mobile et j'ai quelques inquiétudes concernant le flux de la communication entre ces parties. Je suis nouveau dans le développement d'API pour les appareils mobiles et OAuth.API REST + OAuth + flux mobile

Le projet en commun devrait fonctionner de cette façon:

  • utilisateurs sont autorisés à se connecter en utilisant uniquement leurs comptes Google
  • l'application mobile utilise l'API de site Web et toutes les informations sont stockées sur le backend

J'ai trouvé une question similaire ici OAuth on REST API for mobile app et je préfère la première solution, mais j'ai quelques questions sur la sécurité de cette solution.

1) Dois-je utiliser OAuth2 pour l'API? Je ne suis pas sûr que ce soit une bonne idée de simplement envoyer l'identifiant Google de l'utilisateur à l'API pour obtenir les données de l'utilisateur.

2) Comment puis-je vérifier sur le serveur que l'identifiant Google est correct et réel? Ou ce n'est pas important du tout?

Je pense à ce scénario, mais je ne suis pas sûr que c'est la meilleure solution:

1) L'utilisateur ouvre une session sur l'application mobile pour la première fois à l'aide de son compte Google.

2) L'application mobile reçoit un identifiant Google et quelques informations supplémentaires.

3) L'application mobile envoie l'identifiant Google au serveur.

4) Le serveur utilise OAuth2. Il crée un compte pour l'utilisateur (en enregistrant l'identifiant Google dans la base de données) et renvoie un jeton d'accès à l'application mobile.

5) L'application mobile stocke localement le jeton d'accès et l'utilise pour les requêtes au serveur. Une fois le jeton d'accès expiré, l'utilisateur doit se reconnecter à l'application mobile en utilisant son compte Google.

J'ai quelques inquiétudes concernant l'utilisation de Google ID uniquement pour générer un jeton. Je veux dire, n'importe qui peut simplement utiliser l'identifiant Google de quelqu'un pour créer un jeton. Mauvaise idée :(

dois-je utiliser mieux JWT aussi en signe?

Merci pour votre aide!

Répondre

1
  1. Vous devez envoyer id_token à l'API de l'utilisateur à la place
  2. Il y a dans lequel vous pouvez valider l'intégrité du jeton d'identification côté serveur:

    a) "Manuellement" - téléchargez en permanence le k eys, vérifier la signature, puis chaque champ, y compris le iss un; l'avantage principal (quoique un petit à mon avis) je vois ici, c'est que vous pouvez réduire le nombre de demandes envoyées à Google.

    b) "automatiquement" - faire une requête GET sur le point final de Google pour vérifier ce jeton https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}

    c) L'utilisation d'un Google API Client Library.

En ce qui concerne le flux de travail, il est la plupart du temps correct, sauf pour la dernière étape, où vous pouvez à la place refresh an access token sans demander à l'utilisateur la permission. Btw, id_token de Google est en fait un JWT.

+0

Merci! C'est très utile – Elena