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

Security 防止从我自己的客户端JS应用程序外部使用我的REST API,security,authentication,architecture,facebook-access-token,Security,Authentication,Architecture,Facebook Access Token,我构建了一个AngularJS应用程序,调用属于我自己后端的一些RESTAPI(使用Play!2.2) 我正在使用Facebook OAuth客户端来验证我的用户。 作为Javascript应用程序,我的Facebook应用程序令牌不能“隐藏” 因此,任何人只要阅读Javascript代码就可以获得Facebook应用程序令牌,并以“合法”的方式获取用户访问令牌,从而使用我的restapi 我怎样才能预防它呢? 最佳做法是什么 我认为,一种方法是使用服务器端Facebook的OAuth机制,而不

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

我正在使用Facebook OAuth客户端来验证我的用户。
作为Javascript应用程序,我的Facebook应用程序令牌不能“隐藏”

因此,任何人只要阅读Javascript代码就可以获得Facebook应用程序令牌,并以“合法”的方式获取用户访问令牌,从而使用我的restapi

我怎样才能预防它呢?
最佳做法是什么

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


但作为客户端的单页应用程序,我真的希望避免页面重定向,并避免使用Facebook Javascript SDK附带的“弹出”功能

使用服务器端(“代码”)OAuth流进行facebook身份验证更加安全。您仍然可以通过打开自己的弹出窗口来启动登录序列来避免重定向,这与FacebookJS所做的类似(只是它首先进入您的服务器)

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


如果您担心跨站点伪造,您可以实现类似于防伪状态令牌的功能。请参见此处的谷歌说明。

一种方法是在facebook应用程序设置(myDomain.com)中配置授权域,以使该域具有身份验证的排他性。这足够安全吗?一个有趣的帖子可能真的是一个答案:)。在给出的答案中解释。看来,即使使用Facebook Javascript SDK,我们也可以通过在应用程序设置中允许正确的令牌来源(域),并在每次使用前使用
调试工具
检查访问令牌,从而获得相当强的安全性。是的,但是如果您的应用程序不使用HTTPS,我不建议您传递用户令牌。