2017-04-22 1 views
2

Je considère AWS Cognito comme un système de gestion des utilisateurs pour une application Web monopage que je construis en utilisant React avec un backend d'API Rython Python (Pyramid). J'ai du mal à voir comment toutes les pièces s'emboîtent pour mon architecture (les docs ne semblent pas m'aider). Il y a beaucoup d'excellents exemples de la façon d'implémenter l'authentification dans le frontend en utilisant JS. Mon problème est de savoir comment intégrer cette authentification dans mon API REST backend.Sécurisation d'un frontend React et d'API Python avec AWS Cognito

Dans mon système de gestion des utilisateurs actuel, le client appelle l'API REST à la connexion et reçoit un jeton qui est à nouveau transmis à l'API pour chaque requête suivante. Je peux ensuite utiliser les ACL sur mes fonctions API, vérifier les permissions pour accéder aux ressources, etc. Si je devais utiliser Cognito et effectuer l'authentification sur le frontend (comme beaucoup d'exemples), comment mon backend saura-t-il si le jeton est valide quand il le reçoit avec une demande? Sûrement je ne devrais pas appeler Coginto du backend pour vérifier ceci pour chaque demande? Comment puis-je effectuer des vérifications pour des informations telles que «cet utilisateur est-il dans le groupe admin» si ce groupe est défini dans Cognito? Encore une fois, appeler Cognito pour chaque requête semble très lourd et lourd.

J'ai vu un exemple où une liste de jetons valides a été exportée à partir de Cognito en tant que fichier JSON et conservée dans le backend. Cela semble horriblement statique lorsque les utilisateurs peuvent être ajoutés et supprimés régulièrement.

Cognito est-il vraiment adapté à mon cas d'utilisation? Des conseils de haut niveau et des liens vers des exemples et documents pertinents seraient grandement appréciés!

Répondre

0

Lors de l'authentification avec Cognito, l'utilisateur peut avoir 3 jetons:

  • Actualiser
  • Accès
  • ID

Pour python, boto3 peut interfacer maintenant avec Cognito. Il y a aussi ce wrapper python lib: warrant, pour le rendre plus facile.

Une fois que vous avez le jeton, il est possible de le transmettre à l'API (par exemple: l'accès) et il peut être vérifié sur le côté serveur avec python-jose, selon AWS docs

Pour passer le jeton, un par exemple la mise en œuvre pyramide/login peut conserver les informations contenues dans la session avant de la réponse à la demande:

request.session['my_token'] = str(a_token) 

les default cookie session factory œuvres, mais il avertit que le jeton n'est pas envoyé chiffré.