我一直在构建Symfony2(用于后端)和AngularJS用于前端的电子商务项目。目前Symfony部分仅用作API,其具有三个不同的用户级别(来宾,客户&admin)。可以在系统内进行(如添加/移除数据)不同的动作被固定:Symfony2 REST风格的API + AngularJS
1)Symfony2的与用户角色/访问控制
2)防火墙JMS安全额外(@PreAuthorize表达式)
对于安全的部件,一切都按预期工作,我对工作方式非常满意。
问题:
有其是公共的(像检索产品信息,类别等)的API的一部分。我在Angular中用Ajax调用我的API来检索这些数据,该API返回JSON格式的数据。一个例子是:
/API /产品/ GET-所有/页= 1 &数= 10 &排序[ID] = ASC
的问题是,任何人都可以看在浏览器中请求并复制路径并访问所有数据(如所有产品),并可以下载所有信息的JSON。虽然这些数据是“公开的”,但我不想给别人这样一个“偷”我的数据的简单方法。
理念&可能的解决方案:
1)我一直在寻找在JWT(JSON网络令牌)的标准,试图确保市民来电到我的API和我产生了这样的方式实现它用于网站上的“真实”用户的令牌,并且这种限制直接访问公共API链接。
您认为如何?这会是一个可能的解决方案吗?
2)我也在阅读关于StackOverflow的其他一些问题,我可以从请求中检查HTTP_X_REQUESTED_WITH标头,但我们都知道这可能很容易被攻击者欺骗。 3)最后,我读了类似的方法来解决方案1)在这里:http://engineering.talis.com/articles/elegant-api-auth-angular-js/,但我不完全确定这符合我的目的。
其他注意事项:
- 我不想让这个防弹的,但我也不想给人们点击2个按钮,让我的所有数据的选项。我知道最终所有的信息都可以被“偷走”(例如,通过使用网络刮板),但是“保护”系统使得人们不得不做出一点努力是我的想法。
- 我真的不能再模型我的API在这个阶段太多,但任何想法,将不胜感激
感谢您抽出宝贵的时间来阅读我的问题,我期待着任何反馈。
Azure的API管理你不能真正保障公众的数据,因为你_want_公众能够看到这些数据。你可以尝试让所有数据变得更加困难,但这就是全部。只要接受公共数据是公开的,并且将您的权力投资于更好,更有生产力的东西。 – smat88dd