1

我一直在试图弄清楚 digg.com 和其他类似网站如何通过 oauth 处理身份验证。通过 oauth 创建帐户非常简单,用户单击 twitter/facebook 连接按钮,然后 digg 向我们发送一个秘密,如果一切正常,这个秘密将被返回并作为访问令牌存储。

但是,身份验证如何以这种方式工作?例如,当我通过 twitter 按钮单击登录时,一个随机秘密被发送到 twitter。twitter 是返回先前的访问令牌还是 digg 获取 twitter 用户 ID,例如,将其与数据库中的存储值进行比较,然后从那里使用存储的访问令牌?

例如: 1. 用户通过twitter点击登录。2. 发送一个秘密,twitter 进行一些处理并返回诸如用户名/id/等信息... 3. 基于这些返回值之一,轮询数据库并加载用户行,认证成功。

我在这方面做得不够吗?有人可以启发我吗?

4

2 回答 2

1

以下是基于hueniverse提供的Workflow

用户通过 Twitter 点击登录。

Digg 从 Twitter 请求一个请求令牌(不是特定于用户的,Digg 可以使用它来获得用户的用户批准访问用户的信息)。

Digg 收到请求令牌并使用 RequestToekn 将用户重定向到 Twitter OAuth 用户授权 URL,并在获得批准后要求 Twitter 将用户重定向回来。

OAuth 要求服务提供商 (Twitter) 首先对用户进行身份验证,然后要求他们向消费者 (Digg) 授予访问权限。

用户输入用户名和密码(如果用户尚未登录)。

Twitter 通知用户谁在请求访问 (Digg) 以及被授予的访问类型。(我对 Digg 不熟悉,以 Stack Exchange 为例,它只要求访问用户名。)

用户批准。

Twitter 将请求令牌标记为用户授权。用户的浏览器被重定向回 Digg。

Digg 使用授权的请求令牌并将其交换为访问令牌(用于访问受保护的资源。在堆栈交换的情况下,用户名,虽然听起来有点奇怪)。

Digg 通过 Twitter 登录。

这是我的非官方图片: 在此处输入图像描述


以上基于 OAuth 1.0 的官方指南,但根据Introducing OAuth 2.0

OAuth 2.0 是一个全新的协议,不向后兼容以前的版本。但是,它保留了之前版本建立的整体架构和方法,同样的介绍(来自 OAuth 1.0 的官方指南)仍然非常适用。

于 2011-03-14T03:02:06.953 回答
0

如果您想实现这样的身份验证,您可以查看示例 ZF 应用程序,该应用程序显示了为此目的使用 twitter、facebook、google 等的一种方式。

于 2011-03-14T08:53:40.670 回答