保护单页JS应用程序的REST API?

时间:2013-06-11 04:47:08

标签: rest authentication oauth sinatra oauth-2.0

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

我使用Omniauth查看了OAuth2,我可以轻松地将其连接到传统的网络应用程序,但在谈到使用FB / Twitter / Google保护JSON API时,我的理解因为:

  • API不应该是为OAuth2流做重定向的事情吗,是吗?
  • 当来自身份提供商的回调数据通过时,它可能会点击HTML / JS应用程序,对吗?

如果我想通过非Web机制提供第三方开发人员API访问,那将是一个问题。 OAuth2重定向流业务肯定不会在这里工作。

所有人都说,我的架构看起来像这样:

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

实际上,我所追求的是这里的内容,除了这只适用于Rails:

有关Sinatra的任何指示吗?请使用一些具体的例子。

1 个答案:

答案 0 :(得分:0)

嗯,你有点把自己画成一个角落。 OAuth身份验证的一个前提是,有一个用户将在HTTP客户端(例如Web浏览器)中执行操作,以向OAuth提供程序验证自己的身份。如果您想通过非Web机制提供第三方开发人员API访问,那么您就无法使用这种身份验证流程。

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