4

我有兴趣使用 Sinatra 开发一个 RESTful JSON 数据 API,并让一个 HTML5/JS 应用程序使用该数据 API。显然,数据 API 需要某种形式的身份验证,以便用户 Joe 只能通过 API 访问他自己的资料。如果我不能推出自己的身份验证,而是依靠 Google/Facebook/Twitter 作为身份提供者,那就太好了。

我已经使用 Omniauth 研究了 OAuth2,我可以很容易地将其连接到传统的 Web 应用程序中,但是当谈到使用 FB/Twitter/Google 保护 JSON API 时,我的理解崩溃了,因为:

  • API 不应该真的是为 OAuth2 流进行重定向的东西,不是吗?
  • 当来自身份提供者的回调数据通过时,它可能会命中 HTML/JS 应用程序,对吗?

如果我想通过非 Web 机制为 3rd 方开发人员提供 API 访问权限,那就更进一步了;OAuth2 重定向流业务在这里肯定行不通。

总而言之,我的架构如下所示:

[ HTML/JS client ] --- [ JSON API  ]       [ FB/Twitter/Google ]
                            |
                            |
                       [ Developer ]

实际上,我所追求的是这里的东西,除了这仅适用于 Rails:

使用 Sinatra 执行此操作的任何指示?请使用一些具体的例子。

4

1 回答 1

0

好吧,你有点把自己画到了一个角落里。OAuth 身份验证的一个前提是,有一个用户将在 HTTP 客户端(例如 Web 浏览器)中执行一项操作,以向 OAuth 提供者进行身份验证。如果您想通过非 Web 机制为 3rd 方开发人员提供 API 访问,那么您不能使用这种身份验证流程。

如果要对不适合基于 Web 的交互式身份验证模式的 API 客户端进行身份验证,则需要遵循 API 密钥模式。您需要以某种方式生成 API 密钥并将其分发给授权的第 3 方开发人员。看看 Twitter、Facebook 和 Google 是如何做到的。

于 2013-06-16T02:54:06.160 回答