使用 GoLang 后端反应 JS Rest API 安全性

Posted

技术标签:

【中文标题】使用 GoLang 后端反应 JS Rest API 安全性【英文标题】:React JS Rest API Security With GoLang Backend 【发布时间】:2019-01-05 04:55:05 【问题描述】:

我已经用 GoLang 后端构建了一个 ReactJS 前端。 ReactJS 使用 Rest API 从/向 Golang 后端请求/发送所有数据。

我很困惑什么是保护我的 API 请求的最佳方法,这样就不会以编程方式访问我的后端服务器并进行不希望的更改。任何建议将不胜感激。

我一直在探索 JWT 令牌和 CSRF 令牌,但由于我缺乏 API 安全领域的专业知识,我没有去任何地方了解如何在我的应用程序中准确地实现它。

关于我的申请的更多细节是:

    前端和后端服务器是分开的。 前端服务器正在使用 nginx 来提供静态文件。 每次打开页面都应该生成一个新的令牌,并且有效期应该不超过 8 分钟。

鉴于我的应用程序结构,请向我建议保护我的其余 API 的最佳方法。

P.S.:此页面没有登录或任何其他机制来确定用户的真实性。

【问题讨论】:

【参考方案1】:

我建议将 JWT 用于 API 安全性,因为您的令牌到期时间足够短。

https://github.com/dgrijalva/jwt-go --> 使用此包在后端生成令牌,并根据您的需要设置到期时间和声明。您的声明也可以基于角色进行精细控制(身份验证层)。 将此令牌从登录或作为 API 网关的任何端点发送到您的前端。 在前端根据您的意愿将令牌存储在本地存储/https cookie 中。 每个需要保护的 API 调用都在标头中发送此令牌,使用上述库在后端验证此令牌。 挑战将是在忘记或重置密码/注销时使这些令牌无效。您可以通过将它们保存在 redis/db 中并使用 cron 定期刷新它们来使用黑名单令牌技术。

【讨论】:

这是有道理的库纳尔。但我对此表示怀疑:没有登录,因此一个人不必输入任何可以建立真实性的唯一凭证。在这种情况下,如果只是通过调用api生成token,那么恶意用户不能使用同一个api生成多个token,然后用这些生成的token调用无限数量的其他api吗? 通常,令牌是在一些基本的身份验证层(用户名、密码)之上生成的。必须有一些层来隔离真实用户和恶意用户,然后才能实现基于令牌的身份验证。 您的案例有点开放,您可以拥有到期时间较短的令牌并对 API 进行速率限制。这将达到你的目的。 基本上,该用例用于网络结账,用户不必登录即可继续交易。但仍然因为 API 被用于非常敏感的目的,所以必须使用令牌或密钥来确保请求的真实性。 Cors 实现是一种方式,但它们很容易被任何人欺骗。这就是为什么我在努力寻找保护这些 api 的最佳方法的原因。 API 速率限制器已在服务器端实施。但我也想通过一些 api 密钥保护来实现初始安全层。

以上是关于使用 GoLang 后端反应 JS Rest API 安全性的主要内容,如果未能解决你的问题,请参考以下文章

使用 Next.js 后端反应本机

将 JSON 请求循环到后端(REST API)

反应路由器和快递冲突

如何将值从反应本机应用程序传递到节点 js 后端

如何仅使用 Sails.js 的 REST API 作为混合 HTML5 应用程序的后端

客户端 JS(例如 AngularJS)+ Django REST 后端:部署到单个 PaaS?