curl我正在开发一个 Web 应用程序,前端和各种客户端( & co.)都可以通过 REST API 访问数据。前端和后端都将位于同一域中。我想用 CORS 来保护我的前端,这对我来说是一个两难的选择。如果我设置Access-Control-Allow-Origin为*,那么所有其他客户端都将能够访问 API,但我自己的前端将更加暴露。另一方面,将其设置为我的域会强制客户端提供(虚假)Origin标头,并有效地禁止使用浏览器作为客户端(通过不同域上的前端)。
这通常是如何解决的?我是否应该使用两个不同的 API 端点,一个用于公共访问,另一个用于我的前端?我希望得到一些建议。
我想用 CORS 保护我的前端
CORS 不保护前端中的任何内容,CORS 是一种防止未经授权的网站跨站点脚本编写的方法。CORS 标头仅对浏览器的 XHR 调用有效。它不会阻止直接加载资源。
如果我将 Access-Control-Allow-Origin 设置为 *,那么所有其他客户端都将能够访问 API,但我自己的前端将更加暴露。
恕我直言,您的前端将像以前一样可以访问。CORS 标头仅对浏览器的 XHR 调用有效
另一方面,将其设置为我的域会强制客户端提供(假)Origin 标头,并有效地禁止使用浏览器作为客户端(通过不同域上的前端)。
并不真地。有几种选择:
您可以为每个 API 客户端提供允许的主机列表(根据客户端的身份验证设置原始标头有效)这是许多 API 提供商所做的事情(FB、Google、Amazon 等)
浏览器(在 XHR 调用中)发送Origin标头,您可以检查并发送或拒绝 Origin 标头中的主机名
非浏览器客户端不受 CORS 标头的限制。
我是否应该使用两个不同的 API 端点,一个用于公共访问,另一个用于我的前端?我希望得到一些建议
正如评论中所写 - 假设功能相同并且用户经过身份验证,那么恕我直言,没有必要为内部/公共使用提供单独的服务。
这些都是特定问题的答案,但是我仍然不相信你清楚想要实现什么/为什么/如何实现。
CORS 仅与浏览器和 HTML 相关。curl不在乎它。因此,如果您限制只能从您的域访问您的服务,那么其他站点将无法访问它。
为了使您的服务可供他们使用 - 这些站点可以设置 nginx 或 apache 将部分流量转发到您的服务。因此,3d 方站点将通过配置自己的 CORS 来访问自己的主机,并且其主机将与您的服务进行通信。
另一个(类似的)解决方案是设置 2 个主机名(子域?)来引导相同的服务。并将一个公开给您自己的网站(具有严格的 CORS),另一个公开给外部客户。
| 归档时间: |
|
| 查看次数: |
7836 次 |
| 最近记录: |