web-dev-qa-db-fra.com

AWS Cognito as Django back-end d'authentification pour site Web

Ma lecture de Cognito est qu'il peut être utilisé à la place d'une base de données locale Django admin pour authentifier les utilisateurs d'un site Web. Cependant, je ne trouve pas d'exemples de soupe à noix d'une base " Hello, World "avec un écran de connexion qui passe par Cognito. J'apprécierais beaucoup que quelqu'un puisse publier un article qui montre, étape par étape, comment créer un Hello World Django = application et un pool d'utilisateurs Cognito, puis comment remplacer l'authentification par défaut dans Django par un appel à AWS Cognito.

En particulier, j'ai besoin de savoir comment recueillir les informations du site d'administration de Cognito qui sont nécessaires pour configurer un appel à Cognito API pour authentifier un utilisateur.

Il y a deux cas à considérer: la connexion utilisateur de l'application à l'application et la connexion administrateur à Django URL d'administration du site. Je suppose que je voudrais utiliser Cognito pour les deux cas, sinon je laisse un trou potentiel où l'URL d'administration utilise une technologie de connexion plus faible.

Les réponses actuelles sur les forums AWS et StackExchange disent soit:

(1) C'est une perte de temps d'utiliser Cognito pour authentifier un site Web, c'est uniquement pour accéder aux ressources AWS

(2) Ce n'est pas une perte de temps. Je suis sur le point d'abandonner. Je suis allé jusqu'à créer un exemple de pool d'utilisateurs et de groupes d'utilisateurs de Cognito et de parcourir le Web pour trouver des exemples appropriés de ce cas d'utilisation. (Aucun trouvé, sinon je n'écrirais pas.)

(3) https://github.com/capless/warrant , https://github.com/metametricsinc/Django-warrant sont deux solutions possibles sur les forums aws .

29
Lars Ericson

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

Je veux juste partager ce que j'ai fait pour que cette chose fonctionne:

  • Garantie Django . Super emballage d'emballage aws cognito.
  • Assurez-vous de comprendre la structure actuelle de votre modèle utilisateur. Si vous utilisez un modèle utilisateur personnalisé, n'oubliez pas de le mapper à l'aide de COGNITO_ATTR_MAPPING réglage.
  • Modifiez votre authentification pour prendre en charge la connectivité tierce. Lorsque vous obtenez du client un jeton Cognito, convertissez-le en votre propre jeton à l'aide de oAuth/JWT/Session.

  • Repensez votre processus de connexion/enregistrement. Voulez-vous une inscription différente? Le package de garantie Django le prend en charge ...

À la fin de la journée, c'est une [~ # ~] excellente [~ # ~] solution d'authentification rapide.

23
Gal Silberman

Pour ajouter à la réponse acceptée, il y a une étape supplémentaire simple mais très importante que j'ai trouvé nécessaire de prendre pour utiliser Django-warrant avec Django 2.0:

Le conditionnel dans backend.py dans le package racine doit être changé de:

    if Django_VERSION[1] > 10

à:

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

Utilisation de Django-warrant avec Zappa et AWS Lambda:

Le projet sur lequel je travaille utilise également Zappa pour permettre le déploiement sans serveur de mon Django sur AWS Lambda. Bien que le code ci-dessus ait corrigé Django-warrant pour moi lors des tests en local, après avoir déployé l'application sur l'environnement Lambda, j'ai eu un autre problème important provenant de certains des packages de support de Django-warrant - principalement liés à python-jose-pycryptodome, que Django-warrant utilise pendant le processus d'authentification. Le problème s'est révélé sous la forme d'une erreur FileNotFound liée dans le fichier Crypto._SHA256. Cette erreur semble être due au fait que pycryptodome s'attend à ce que différents fichiers soient disponibles dans le package Crypto au moment de l'exécution sur Windows (sur lequel je suis en train de développer) et Linux (l'environnement Lambda) respectivement. J'ai fini par résoudre ce problème en téléchargeant la version Linux de pycryptodome et en fusionnant son package Crypto avec le package Crypto à partir de la version Windows.

TLDR: Si vous souhaitez utiliser la garantie Django avec AWS Lambda et que vous développez sur une machine Windows, assurez-vous de télécharger la version Linux de pycryptodome et de fusionner son package Crypto avec le même à partir de la version Windows.

Remarque: Les versions de pycryptodome et python-jose (pas python-jose-cryptodome) que j'ai fini par utiliser pour atteindre ce qui précède étaient respectivement 3.7.2 et 3.0.1.

2
Isaac Doidge