我正在设计一个用 Angular 制作的 UI 应用程序。
我还在 Java 上开发了后端。
我的应用程序访问第三方 REST 服务以获取一些天气数据。
该服务是付费的,我有访问它的 key 。
我正在尝试将该数据集成到我的 Angular 应用程序中。
我一直在阅读并且不推荐在客户端存储或管理 key (还没有看到足够安全的方法来避免任何人从客户端获取该 key )。
所以我的问题是,是否必须使用后端服务来实现对天气数据的访问?
有更好的方法吗?比如在我的应用程序上创建一个只能作为代理工作的 REST 服务、添加 key 、访问其他第三方 REST 服务并返回相同的原始数据?
直接在 UI 上实现它对我来说是理想的选择,但我担心如何处理安全问题。
好吧,我只是强调你不应该把你的 key 放在客户端,特别是你注意“服务是付费的”。这样做会将您的 key 暴露在互联网上,爬虫肯定会找到它,并且如果其他人开始使用它可能会造成伤害,特别是当您支付配额时。
关于您的代理,您希望在后端为您的页面设置数据,而不是使用来自客户端的调用来获取它。但是,如果这是一项涉及实时更新或 AJAX 的功能,您最好先通过 CORS 进行保护。
然而,CORS 还不够,因为您的代理仍然可以被非网络浏览器或行为不当的浏览器的客户端访问。为了解决这个问题,您希望发行像随处可见的 (XSRF/CSRF) token 一样的 token 。
按钮行,你的问题的关键要素是:
- 不要将键放在您的 UI 层
- 如果此服务是开放的,则构建代理服务将无法保护他们
- 不知道您的 key 不会阻止任何人使用它们,如果您的使用也不安全的话;例如,访问您的服务以获取数据,或使用您的页面的一部分组成网页 - 由您的服务器提供服务