如何从 AngularJS 站点安全地连接到网络 api

How to securely connect to a web api from a AngularJS site

作为 Web 开发的新手,至少使用 AngularJS 框架等客户端技术,我需要解决一些问题才能开始我的最新项目。

我正在使用数据库中 reads/writes/updates 数据的 AngularJS 编写应用程序。 javascript 作为客户端,我选择编写 PHP REST API 来执行数据库查询,从而获得安全的用户名和密码以及单一数据库层。

我的问题是,鉴于我的 REST API,我将使用 javascript(客户端)中的 AJAX 来调用方法。我如何阻止其他站点也编写脚本来调用 REST API?将身份验证令牌放在 javascript 代码中不是很安全,有人可以复制它。

REST API 是解决此问题的最佳方法吗?我并不反对学习新技术或实践,所以请对更好的设计模式或实施方法有任何想法,我们将不胜感激。不幸的是,由于我在该领域的知识有限,我在 Google 搜索 中一直没有结果,因为我对我应该搜索的术语没有信心。

非常感谢。

由于您的 Angular 应用程序存在于浏览器中,因此您的 REST API 需要能够从任何随机访问者的浏览器 public 访问。因此,出于必要,您有一​​个 public API。你不能限制它;访问者要么可以看到数据,要么不能。

不过,从本质上讲,这与传统网页并没有太大区别。在服务器端生成的页面中,您输出打包为 HTML 的数据并将其传递给任何询问的人。在 REST-API/Angular 应用程序中,您将打包为 JSON 的数据提供给任何询问的人。无论哪种方式,数据都是相同的 public,尽管 REST API 比抓取 HTML 更容易 "abuse"。如果你想避免有人直接吸干你所有的数据库,那么有意识地使用一些用户行为跟踪和限制可能是有用的;这同样适用于基于 JSON 的 REST APIs,就像它对常规网页一样。

如果您还以这种方式公开 read/write APIs,您当然是敞开心扉滥用。

使 API 非 public 的唯一方法是要求密码验证。如果您站点的用户必须登录,那么您可以将 API 限制为具有有效会话的任何人。如果任何人都可以简单地在您的网站上注册一个帐户,这对资助计划没有多大帮助,但它需要更多的考虑,并且提供比完全开放的 API.

稍微多一点的可管理性。

Admin-only APIs 当然必须以这种方式保护,需要一个只有您拥有凭据的帐户。