39 votes

AWS Cognito que Django authentification back-end pour site web

Ma lecture de Cognito est qu'il peut être utilisé à la place d'un local de Django admin de la base de données pour l'authentification des utilisateurs d'un site web. Cependant, je ne parviens pas à trouver d'une soupe-aux-noix exemples d'une base "Hello, World" app avec un écran de connexion qui passe par Cognito. Je serais très reconnaissant si quelqu'un pouvait poster un article qui montre, étape par étape, comment créer un Bonjour à tout le Monde de Django app et un Cognito utilisateur de la piscine, et puis comment remplacer l'authentification par défaut de Django avec un appel à AWS Cognito.

En particulier, j'ai besoin de savoir comment rassembler les informations de la Cognito admin du site qui est nécessaire pour la mise en place d'un appel à Cognito API pour authentifier un utilisateur.

Il y a deux cas à considérer: Application de la connexion de l'utilisateur à l'Application, et l'Admin de django Admin URL de site. Je suppose que je voudrais utiliser Cognito pour les deux cas, sinon, je suis en laissant un trou où l'Administrateur URL à l'aide d'un affaiblissement de la connexion de la technologie.

Courant de réponses sur le forum AWS et StackExchange dire soit:

(1) C'est une perte de temps pour l'utiliser Cognito pour l'authentification d'un site web, c'est uniquement pour l'accès aux ressources AWS

(2) Il n'est pas une perte de temps. Je suis sur le point d'abandonner. Je suis allé aussi loin que la création d'un échantillon Cognito groupe d'utilisateurs et groupes d'utilisateurs, et de récurer le web pour de bon exemples de ce cas d'utilisation. (N'en a pas trouvé, ou je ne serais pas écrit.)

(3) https://github.com/capless/warrant, https://github.com/metametricsinc/django-warrant deux solution possible à partir de l'aws forums.

41voto

Gal Silberman Points 2332

Si vous lisez ceci, vous avez probablement googlé "aws cognito django" xD.

Je veux juste partager ce que j'ai fait pour obtenir cette chose à travailler:

  • Django-Mandat. Grand aws cognito package de wrapper.
  • Assurez-vous de comprendre votre Utilisateur actuel modèle de structure. Si vous utilisez personnalisé de l'utilisateur modèle, n'oubliez pas de carte à l'aide de COGNITO_ATTR_MAPPING réglage.
  • Changer votre authentification à l'appui de la 3e partie de la connectivité. Lorsque vous obtenez à partir du client certains Cognito jeton, de le convertir en votre propre jeton à l'aide d'oAuth/JWT/Session.

  • Repenser votre login/register processus. Voulez-vous différent de l'enregistrement? Django-mandat package prend en charge...

À la fin de la journée, c'est une GRANDE solution rapide pour l'authentification.

5voto

Isaac Doidge Points 21

Pour ajouter à la accepté de répondre, il est simple mais très importante étape supplémentaire que j'ai trouvé était nécessaire de prendre pour utiliser django-mandat avec Django 2.0:

Le conditionnel dans backend.py dans le package racine doit être modifié à partir de:

    if DJANGO_VERSION[1] > 10

pour:

    if DJANGO_VERSION[1] > 10 or DJANGO_VERSION[0] > 1:

À l'aide de django-mandat avec Zappa et AWS Lambda:

Le projet que je suis en train de travailler sur utilise également Zappa pour activer le sans serveur de déploiement de mon Django app pour AWS Lambda. Bien que le code ci-dessus fixe django-mandat pour moi lors des tests en local, après le déploiement de l'application pour le Lambda de l'environnement, j'ai eu un autre problème important découlant de certains de django-mandat à l'appui de programmes, principalement lié à python-jose-pycryptodome, qui django-mandat utilise au cours du processus d'authentification. Le problème s'est manifesté sous la forme d'un fichier introuvable erreur liée à la Crypto._SHA256 fichier. Cette erreur semble avoir été causé parce que pycryptodome attend différents fichiers disponibles dans la Crypto package lors de l'exécution sur Windows (que je suis en train d'élaborer sur) et Linux (le Lambda de l'environnement), respectivement. J'ai fini par résoudre ce problème en téléchargeant la version Linux de pycryptodome et la fusion de ses Crypto paquet avec la Crypto package à partir de la version Windows.

TLDR: Si vous souhaitez utiliser django-mandat avec AWS Lambda et vous développer sur une machine Windows, assurez-vous de télécharger la version Linux de pycryptodome et fusionner ses Crypto paquet avec le même à partir de la version Windows.

Remarque: Les versions de pycryptodome et python-jose (pas de python-jose-cryptodome) que j'ai utilisé pour réaliser le ci-dessus ont été 3.7.2 et 3.0.1 respectivement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X