30

我已经成功使用 Facebook Graph API(使用 oauth 2.0 进行身份验证)有一段时间了。我现在需要编写自己的 API,允许开发人员以类似的方式连接到它。我已经查看了各种库,但我想要一些更精简的东西,所以我决定自己动手。查看我必须在 facebook 上验证用户的代码,它看起来相对简单,但如果我偏离轨道,请纠正我。

首先,我需要提供消费者需要重定向到的安全页面。例如https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEY&redirect_url=CALLBACK_URL。用户将验证应用程序,然后我将使用查询字符串中的 oauth_token 重定向回回调 url 中提供的 url。我想我可以在这里为 oauth_token 生成一个随机的唯一字符串,并将它存储在这个特定消费者的用户中(编辑:请参阅下面的答案,这对于每个消费者应用程序而不是用户来说应该是唯一的)。

这是第一步。我现在需要提供第二个安全页面,消费者将触发 Web 请求。例如https://api.mydomain.com/oauth/access_token?client_id=CONSUMER_KEY&client_secret=CONSUMER_SECRET&oauth_token=OAUTH_TOKEN_RETURNED_ABOVE。这将允许消费者将上面返回的 oauth_token 交换为访问令牌。我将再次简单地生成一个随机的唯一字符串并将其存储在该特定消费者的用户中。

现在我的 API 将接受 access_token 用于尝试获取特定于使用它的用户的信息的方法。

我想知道我是否理解正确。如果是这样的话,OAuth 2.0 规范似乎极其微不足道。另外,为什么我们必须用 access_token 交换 oauth_token?我有自己的想法,但如果有人能帮助澄清这一点,我将不胜感激。

我非常感谢您的反馈,因为我不希望在完全错误的情况下继续浪费时间来实现这一点。

谢谢

4

1 回答 1

49

实际上,协议流程图对于像 OAuth 2 这样的规范可视化非常有帮助,但是那里只有一些部分工作。由于我刚刚实现了一个仅限客户端的 OAuth 2 库,因此我可以验证您是否走在正确的轨道上。但这里有一个问题:

oauth_token 属于您的客户端应用程序(即桌面 facebook 阅读器),它验证您的应用程序(就像一个 ID)。你提交这个来取回一个 access_token,它是特定于你的应用程序和登录用户的,它允许你访问与用户相关的受限资源。

这是一个基本的桌面应用程序身份验证过程(取自:http: //developers.gigya.com/020_Developer_Guide/85_REST/OAuth2

REST OAuth 2.0

实际上是一个带有时间线的流程图(从上到下,取自:http ://www.ibm.com/developerworks/web/library/wa-oauthsupport/?ca=drs- )

协议流

最后完整的程序是:(取自http://h2anetwork.org/ProjectDocs/DPI/DPI_Framework.html

OAuth 协议流程

于 2011-05-13T16:56:58.690 回答