防止从我自己的客户端JS应用程序外部使用我的REST API

时间:2014-04-02 12:14:56

标签: security authentication architecture facebook-access-token

我构建了一个AngularJS应用程序,调用一些REST API属于我自己的后端(使用Play!2.2)。

我正在使用Facebook OAuth客户端来验证我的用户身份 作为 Javascript App ,我的 Facebook App令牌无法“隐藏”。

因此,任何通过阅读Javascript代码获取Facebook App Token的人都可以“合法”方式获取用户访问令牌,因此使用我的REST API。

我怎么能阻止它呢? 什么是最佳做法?

我认为,有一种方法是使用服务器端Facebook的OAuth机制,而不是Facebook Javascript SDK。 在这种情况下,Facebook应用程序机密将存储在我的服务器上,并且无法从外部访问。

但是作为客户端的单页应用程序,我真的想避免页面重定向以及Facebook Javascript SDK附带的“弹出”功能的好处。

1 个答案:

答案 0 :(得分:1)

你可以做几件事。

使用服务器端("代码")facebook auth的OAuth流程更加安全。您仍然可以通过打开自己的弹出窗口来启动登录序列来避免重定向,类似于Facebook JS所做的(只有它首先进入您的服务器)。

在您的应用程序上启用HTTPS通常是一种很好的做法......

如果您担心跨站点伪造,您可以实施类似防伪状态令牌的操作。请参阅此http://blog.codinghorror.com/preventing-csrf-and-xsrf-attacks/以及此处的Google帐户说明https://developers.google.com/accounts/docs/OAuth2Login#createxsrftoken