如何保护仅从前端使用的 API(Ajax 调用)

Posted

技术标签:

【中文标题】如何保护仅从前端使用的 API(Ajax 调用)【英文标题】:How to secure an API used only from front-end (Ajax call) 【发布时间】:2015-11-04 21:26:07 【问题描述】:

好吧,我创建了一个 API 来为我们的网站管理一些附件上传并存储到 Amazon S3 存储桶中

场景:一旦访问者/用户在表单中并希望将其与附件一起提交,一旦选择了文件,然后按钮单击 Ajax 请求就会触发微服务 API,以便它可以将文件存储到 S3 中然后进行一些处理返回直接链接或标识符。

问题是:我们如何才能使用例如短期令牌或类似的东西来验证用户而不会被劫持、滥用令牌..

javascript 中,所有内容对访问者都是可见的,我们尽量不在后端集成任何繁重的进程

【问题讨论】:

【参考方案1】:

如果我的问题直截了当,您有一个 Web 界面,其中文件上传到 S3 存储桶,您需要确保在某个后端 API(例如 REST)中,所有文件上传命令都将具有身份验证和授权。

答案在很大程度上取决于您的架构,但一般来说,所有 Javascript 调用都只是 HTTP 调用。因此,您需要 HTTP 身份验证/授权。一般来说,基于 HTTP 的 REST 最直接的方法是基本身份验证,其中客户端在每个请求中发送一个凭据。起初这可能听起来很奇怪,但它是相当标准的,因为 HTTP 应该是无状态的。

因此,至少对于我刚刚描述的场景,简短的回答是要求用户提供 Javascript 将保留在客户端的凭据,然后发送 REST 接口可以理解的基本身份验证。然后服务器端进程会获取这些信息,并决定是否可以将某个文件写入某个 S3 存储桶中。

【讨论】:

以上是关于如何保护仅从前端使用的 API(Ajax 调用)的主要内容,如果未能解决你的问题,请参考以下文章

如何保护同一服务器上前端使用的 Rest API 端点?

我的 web api 仅从 ajax 客户端给出 net:: ERR_CONNECTION_RESET 错误

如何在前端的 Javascript Ajax API 调用中隐藏我的 JWT 令牌?

如何保护站点和内部 API?

在烧瓶中保护 REST api

使用 RESTful 服务保护跨域的 API 调用