首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用registration+login 2.0的简单OAuth

使用registration+login 2.0的简单OAuth
EN

Stack Overflow用户
提问于 2011-05-03 14:11:39
回答 3查看 4.3K关注 0票数 7

我对OpenID OAuth的东西有点困惑。( OAuth -我指的是OAuth 2.0和更高版本)

我的目标是创建一个带有OpenID (或OAuth) auth以及遗留电子邮件+密码auth的站点。该网站将在django框架上。(python)我理解OAuth和OpenID之间的区别,以及授权和身份验证之间的区别。

我的主要目标是用google作为身份提供者来实现openid登录。

登录和注册流必须像许多站点一样。如我所见:

注册场景:

1)用户输入openid url (单击google按钮)

2)用户被重定向到auth提供商( google )页面:“很棒的网站”要求您:电子邮件,语言,国家.

用户同意..。获取在幕后重定向“令人讨厌的站点”,使用访问令牌重试电子邮件语言和其他用户信息。

4)用户填写配置文件中所需的其他内容。就这样..。他现在注册了。

登录场景:

1)用户输入openid url (单击google按钮)

1.a)如果用户已经登录了auth提供商嗯.我不清楚..。但是用户在不显示提供程序页面的情况下就登录了(也许它关闭得很快?)

1.b)如果用户未登录提供商,则提供者将显示登录页面,并在成功后重定向到令人敬畏的站点。

因为我必须获取一些用户数据,所以我似乎不得不使用: OAuth或混合( OpenID + OAuth扩展)协议。

对我来说不清楚的事情:

  1. 我怎样才能得到我需要的信息的范围。我找遍了却找不到..。有人在博客"https://www.googleapis.com/auth/userinfo#email“上找到电子邮件,但用户语言如何,国家.等等。在哪里被记录的?
  2. 如果我要使用OAuth -这两种操作都足够了-注册和登录,或者我将不得不获取用户数据wuth OAuth并使用OpenID登录?
  3. 在我的场景中使用OAuth 2.0可以吗?或者使用1.0会更简单,因为在注册初始帐户后,我不再需要用户数据了?(我认为1.0更复杂,因为它有三个阶段。但是2.0更复杂,因为访问令牌过期了。但是在我的场景中,过期将不是一个问题,因为注册后我不需要用户数据)
  4. 有几个lib躺在那里:当我阅读google文档时,我发现:
    • google python-client
    • openid-python-openid
    • gdata-python-client (应该是google服务的api ),不知道它是否有oauth,嗯。根据这个http://code.google.com/intl/ru/apis/gdata/docs/auth/oauth.html,它里面有oauth )
    • python客户端(http://code.google.com/p/python-oauth-client/)
    • 我想这是很多,但后来发现:http://your-move.appspot.com (源文件:https://github.com/sje397/Chess ),它似乎使用从google.appengine.api导入用户的google.app.engine库。

代码语言:javascript
复制
So which one to choose ?  
  1. 到目前为止,最简单的实现是:像这样:样本/嗡嗡/视图,但是第38-44行:在我的示例中,将获取用户电子邮件、语言和其他内容(而且我还将使用其他范围)。第29行)对于新注册的用户。或者,如果它是注册用户,只需忽略凭证并删除它。(继续网站会话)我错了吗?我在上面提到的libs上看到了这么多的实现,我怀疑我是对的。
  2. 还有另一个问题:我的后遗症将使用电子邮件作为登录。如果身份提供者是电子邮件提供商( google )。当用户尝试登录时,我可以从提供者那里获取电子邮件。并搜索从数据库中的提供者那里获取的电子邮件。这样我就能找到用户了。如果身份提供者而不是电子邮件提供商:比如facebook呢?我将如何在数据库中搜索用户?
EN

回答 3

Stack Overflow用户

发布于 2015-07-11 07:10:20

在我看来,OpenID和OAuth 2.0是两个不同的概念。

  1. OpenID作为其名称解释主要集中在管理标识上。因此,它更像是一个管理用户身份的框架或协议。
  2. OAuth 2.0旨在提供一种协议,使基于internet的应用程序能够与一些第三方授权提供者一起管理授权。我确实建议你在弄脏你的手之前先通过左OAuth 2.0规范。您还可以在本文OAuth2.0的简化解释中找到一些很好的信息

似乎你希望你自己的网站能够自己处理用户授权,这意味着在OAuth 2.0领域,你自己的网站是一个AuthorizationServer。

对你的问题:

  1. 范围由授权提供程序提供,请参阅它们的文档。
  2. OAuth只提供了授权您的Web应用程序访问资源所有者的受保护信息的框架。以google为例,授权您的应用程序访问其受保护信息的最终用户仍然是google用户,除非您的Web应用程序在自己的用户帐户数据库中自动为他/她创建用户帐户--我认为这一步就是注册的意思。OAuth没有涵盖任何有关注册的内容,因为它超出了授权的范围。
  3. 在您的场景中,您仍然拥有自己的帐户数据库,并希望用户能够使用用户名和密码进行身份验证。如果您实现了自己的OAuth并使用“资源所有者密码凭据”(Resource凭据),那么AuthorizationServer 2.0确实可以处理这个场景。
  4. 我不是python,但在评估这些库之前,我可以告诉您,您必须了解OAuth 2.0规范中定义的不同角色。其中一些libs扮演授权服务器角色,一些扮演资源服务器角色。
票数 1
EN

Stack Overflow用户

发布于 2011-05-03 14:22:10

为什么不直接使用这个库,这就完成了与开放id提供程序集成的所有艰苦工作。

您可以使用SocialAuth或具有类似功能的任何其他auth软件包之一。

票数 0
EN

Stack Overflow用户

发布于 2019-08-21 15:55:16

我建议不要使用Google或Facebook (甚至是最糟糕的Twitter)来测试OAuth/OpenID登录,因为它们的设置很混乱,范围没有明确的文档,甚至需要在本地进行测试。相反,我建议使用Github,因为它对开发人员更友好。SimpleLogin也是一个很好的选择(免责声明:我是SimpleLogin创始人),因为在默认的本地主机上,它是白名单,以促进本地开发。它的文档在https://docs.simplelogin.io上。

如果您想了解关于OAuth/OpenID的更多信息,我认为最好自己实现重定向和回调。稍后,更好的方法是使用库来处理这个问题,因为它们更严格地遵循协议。对于Django来说,关于这个主题的一篇很好的文章是https://scotch.io/tutorials/django-authentication-with-facebook-instagram-and-linkedin

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5870774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档