我构建了一个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附带的“弹出”功能的好处。
答案 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。