7
votes

Inscription simple + Connexion en utilisant OAuth 2.0


Je suis un peu confus sur OpenID Oauth Stuff. (par Oauth - je veux dire Oauth 2.0 ici et plus tard)

Ma cible consiste à créer un site avec OpenID (ou OAuth) Auth, ainsi qu'avec l'héritage Email + mot de passe auth. Le site sera sur Django Framework. (python) Je comprends la différence entre Oauth et OpenID et Diff entre l'autorisation et l'authentification.
Mon objectif principal est de mettre en œuvre OpenID Login avec Google comme fournisseur d'identité.

Le flux de connexion et de registre doit ressembler à de nombreux sites. Comme je le vois:

Enregistrer Scénario:

1) L'utilisateur entre URL OpenID (clique sur le bouton Google)

2) L'utilisateur est redirigé vers Auth Fournisseur (Google) Page dit: "Site génial" Demandez votre: email, langue, pays ...

3) L'utilisateur dit oui .. se redirige Derrière les scènes "Site génial" Réessions Langue de messagerie et autres informations utilisateur Utilisation du jeton d'accès

4) Utilisateur remplit d'autres éléments nécessaires dans le profil. Et c'est ça .. hes maintenant enregistré.

Scénario de connexion:

1) L'utilisateur entre URL OpenID (clique sur le bouton Google)

1.a) Si l'utilisateur est déjà connecté au fournisseur d'authentification hmm ... il n'est pas clair pour moi .. mais d'une manière ou d'une autre Reconnectez-vous sans afficher une page de fournisseur (peut-être qu'il se ferme rapidement?)

1.b) si l'utilisateur n'est pas connecté au fournisseur Ensuite, le fournisseur affiche la page de connexion et redirige à un site génial sur le succès.

Parce que je dois avoir des données utilisateur Il me semble que je dois utiliser: Oauth ou hybride (openid + oauth d'exerciceions) Protocole.

Les choses qui ne me sont pas claires:

  1. Comment puis-je obtenir des champs pour info dont j'ai besoin .. J'ai cherché mais je ne peux pas trouver .. Trouvé sur un blog de quelqu'un "https://www.googleapis.com/auth/userinfo#email" pour email Mais que diriez-vous de la langue des utilisateurs, du pays .. etc. Où il est documenté?
  2. Si je vais utiliser OAuth - ça suffira-t-il faire les deux - l'enregistrement et la connexion ou je devrai chercher des données utilisateur wuth oauth et connectez-vous avec OpenID?
  3. Est-il correct d'utiliser OAuth 2.0 dans mon scénario? ou il sera plus simple d'utiliser 1.0 parce que je n'ai pas besoin Les données utilisateur plus après l'enregistrement initial du compte? (Je pense que 1.0 est plus complexe car il a 3 phases .. mais 2.0 est plus complexe car l'accès jeton expire .. mais L'expiration ne sera pas un problème dans mon scénario car je n'ai pas besoin de données utilisateur après inscription)
  4. Il y a peu de libs allongés là-bas: En lisant Google API Docs, j'ai trouvé:
    • Google-Api-Python-Client-Client
    • OpenID-Python-OpenID
    • gdata-python-client (supposé être API à Google Services ne sais pas si elle a Oauth dedans hm .. Selon ce http://code.google.com/intl/ru/apis/gdata/docs/auth/oauthuth.html il y a oauth dedans )
    • python-oauth-client (http://code.google.com/p/python-oauth-client/)
    • Je pense que c'est beaucoup, mais ensuite trouvé: http://your-move.appot.com (fichiers source: https://github.com/sje397/chess) qui semble utiliser google.app.engine lib de google.appengine.api importer des utilisateurs Alors lequel choisir?
    • Jusqu'à présent, je suis venu que la mise en œuvre la plus simple serait: Comme ça: http://code.google.com/p/google-api-python-Client/source/browse/samples/oauth2/django_sample/buzz/views.py Mais les lignes 38-44: dans mon cas chercheraient la langue par courriel de l'utilisateur et d'autres choses (et aussi j'utiliserai d'autres étendues. Ligne 29) Pour un nouvel utilisateur enregistré. ou s'il est inscrit, l'utilisateur n'est que d'ignorer les informations d'identification et de la supprimer. (Continuez avec la session de site) Ai-je tort ? J'ai vu tant de mettre en œuvre sur les libs mentionnés ci-dessus que je doute que je suis juste.
    • Et aussi une autre question: Mon authentification Heakback Hegacy utilisera un courrier électronique comme login. Si un fournisseur d'identité est un fournisseur de messagerie (Google) .. Lorsque l'utilisateur essaie de vous connecter, je peux récupérer un courrier électronique de fournisseur .. et rechercher Email récupéré de fournisseur dans la base de données. Vous pouvez donc trouver l'utilisateur. Et si le fournisseur d'identité n'est pas un fournisseur de messagerie: comme facebook? Comment je vais rechercher l'utilisateur dans la base de données?

0 commentaires

3 Réponses :


0
votes

Pourquoi pas simplement utiliser la bibliothèque, qui fait tout le travail acharné d'intégration des fournisseurs d'identification ouverte.

Vous pouvez utiliser socialauth ou l'un des autres packages d'authentification avec des fonctionnalités similaires.


0 commentaires

1
votes

À mon avis, OpenID et OAuth 2.0 sont deux concepts différents.

  1. OpenID car son nom a expliqué principalement axé sur la gestion de l'identité. Donc, c'est plus comme un cadre ou un protocole de gérer l'identité de l'utilisateur.

  2. OAuth 2.0 a été conçu pour fournir un protocole pouvant effectuer des applications sur Internet à gérer l'autorisation avec certains fournisseurs d'autorisation de tiers. Je vous suggère de passer à travers le SPEC IEFT OAUTH 2.0 avant d'obtenir votre Main sale. Vous pouvez aussi trouver de bonnes informations dans cet article Une explication simplifiée de OAUTH22 .0

    Semble que vous souhaitez que votre propre site Web puisse gérer l'autorisation de l'utilisateur par lui-même, cela signifie dans la zone OAuth 2.0 Votre propre site Web est un autorisateur.

    à vous question:

    1. La portée est fournie par le fournisseur d'autorisation, veuillez vous reporter à leur documentation.

    2. OAuth fournit uniquement le cadre d'autorisation de votre application Web pour accéder aux informations protégées du propriétaire de la ressource. Pour l'exemple de Google, l'utilisateur final autorisant votre application à accéder à ses informations protégées reste un utilisateur Google que si votre application Web crée automatiquement un compte d'utilisateur pour lui dans votre propre base de données de compte d'utilisateur - je pense que cette étape est ce qui Vous voulez dire inscription. OAuth ne couvre rien sur l'enregistrement car il est hors de portée de l'autorisation.

    3. Dans votre scénario Vous avez toujours votre propre base de données de compte et que vous souhaitez s'authentifier avec le nom d'utilisateur et le mot de passe. OAuth 2.0 peut vraiment gérer ce scénario si vous implémentez votre propre autorisateur et utilisez le flux d'authentification «du mot de passe du propriétaire de la ressource».

    4. Je ne suis pas gars python, mais je peux vous dire avant d'évaluer ces libs que vous devez comprendre différents rôles définis dans la spécification OAuth 2.0. Certains du rôle de serveur d'autorisation de lecture de LIBS jouent un rôle de serveur de ressources de jeu.


0 commentaires

0
votes

Je recommanderais pas à l'aide de Google ou de Facebook (ou même pire Twitter) pour tester la connexion OAuth / OpenID car leur confusion est confuse, la portée n'est pas clairement documentée et nécessite SSL même sur le test local. . Au lieu de cela, je vous suggérerais Github car il est plus favorable aux développeurs. Simplelogin est également une bonne option (Disclaimer: Je suis Simplelogin fondateur) en tant que blanchiseurs par défaut localhost pour faciliter le développement local. Son doc est sur https://docs.simplelogin.io .

Si vous voulez en savoir plus sur OAuth / OpenID, je pense qu'il est préférable de mettre en œuvre la redirection et le rappel vous-même. Plus tard, il est préférable d'utiliser la bibliothèque pour gérer cela, car ils suivent de plus près le protocole. Un très bon article sur ce sujet pour Django est HTTPS: // scotch.io/tatudials/django-authentication-with-facebook-instagram-and-linkedin .


0 commentaires