我对使用 Sinatra 开发 RESTful JSON 数据 API 感兴趣,并且有一个 HTML5/JS 应用程序使用该数据 API。显然,数据 API 需要某种形式的身份验证,以便用户 Joe 只能通过 API 访问他自己的东西。如果我不能推出自己的身份验证,而是依靠 Google/Facebook/Twitter 作为身份提供者,那就太好了。
我已经使用 Omniauth 研究过 OAuth2,我可以很容易地将它连接到传统的 Web 应用程序,但是当谈到使用 FB/Twitter/Google 保护 JSON API 时,我的理解崩溃了,因为:
如果我想通过非 Web 机制为 3rd 方开发人员提供 API 访问,那么另一个问题是; OAuth2 重定向流业务在这里肯定行不通。
总而言之,我有一个看起来像这样的架构:
[ HTML/JS client ] --- [ JSON API ] [ FB/Twitter/Google ]
|
|
[ Developer ]
实际上,我所追求的是这里的内容,除了这仅适用于 Rails:
使用 Sinatra 执行此操作的任何指示?请举一些具体的例子。
最佳答案
好吧,你已经把自己画到了一个角落里。 OAuth 身份验证的一个前提是,用户将在 HTTP 客户端(例如 Web 浏览器)中执行操作以向 OAuth 提供者验证自己的身份。如果您想通过非 Web 机制为 3rd 方开发人员提供 API 访问,那么您不能使用那种身份验证流程。
如果要对不适合交互式基于 Web 的身份验证模式的 API 客户端进行身份验证,则需要遵循 API key 模式。您需要以某种方式生成 API key 并将它们分发给授权的 3rd 方开发人员。看看 Twitter、Facebook 和 Google 是如何做到的。
关于rest - 为单页 JS 应用程序保护 REST API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17036667/