我一直在尝试弄清楚digg.com和其他类似网站是如何通过oauth处理身份验证的。通过oauth创建帐户非常简单,用户单击twitter/facebook连接按钮,然后digg向我们发送一个秘密,如果一切正常,这个秘密将被返回并存储为访问令牌。
但是,身份验证是如何工作的呢?例如,当我通过twitter点击登录按钮时,一个随机的秘密被发送到twitter。twitter是返回先前的访问令牌,还是digg获取twitter用户id,例如,将其与数据库中的存储值进行比较,然后使用那里存储的访问令牌?
例如: 1.用户通过twitter点击登录。2.发送一个秘密,twitter做一些处理并返回诸如用户名/id/等的信息……3.基于这些返回值之一,轮询数据库并加载用户行,验证成功。
我说得太离谱了吗?有没有人能开导一下我?
发布于 2011-03-14 11:02:07
以下内容基于hueniverse提供的Workflow:
用户通过Twitter点击登录。
Digg从Twitter请求一个请求令牌(不是特定于用户的,Digg可以用来获得用户的批准,以访问用户的信息)。
Digg收到请求令牌,并使用RequestToekn将用户重定向到推特OAuth用户授权URL,并要求推特在批准后将用户重定向回来。
OAuth要求服务提供商(Twitter)首先对用户进行身份验证,然后要求他们授予消费者(Digg)访问权限。
用户输入用户名和密码(如果用户尚未登录)。
Twitter通知用户谁在请求访问权限(Digg)以及被授予的访问权限类型。(我不熟悉Digg,所以以Stack Exchange为例,它只要求访问用户名。)
用户批准。
Twitter将请求令牌标记为用户授权。用户的浏览器被重定向回Digg。
Digg使用授权请求令牌并将其交换为访问令牌(用于访问受保护的资源)。在Stack Exchange的情况下,用户名,尽管这听起来有点奇怪)。
Digg是通过Twitter登录的。
这是我的一张非官方照片:

上面是基于OAuth 1.0的官方指南,但根据Introducing OAuth 2.0
OAuth 2.0是一个全新的协议,不能向后兼容以前的版本。但是,它保留了以前版本建立的整体架构和方法,并且相同的介绍(来自OAuth 1.0的官方指南)仍然非常适用。
发布于 2011-03-14 16:53:41
如果你想实现这样的身份验证,你可以看看example ZF application,它展示了一种使用twitter、facebook、google等实现身份验证的方法。
https://stackoverflow.com/questions/5294010
复制相似问题