如何在使用 Node.JS 开发的 Rest API 中实施安全性?

How to implement Security in Rest API developed using Node.JS?

我想设计一个 SPA,它将具有前端 (React) 和后端-Rest API(Node.js、Express、Mongo 数据库)。我计划在我的应用程序中使用单点登录,用户将使用 MS-Azure AD 进行身份验证,调用将从前端转到 Azure AD,在 return 中,我将为该用户获取一个令牌,它将存储在本地。之后,我想在当前用户登录 UI 的上下文中为多个 GET、POST、PUT 操作调用 rest API。计划在不同的服务器上部署前端和后端,所以这里我有两个关于保护我的 REST 的问题 API。

  1. CORS 实施
  2. BE 上的用户身份验证

鉴于上述要求,仅实施 CORS 就足够了吗?还是我需要再次对 BE 上的用户进行身份验证?

有人可以提供一些最佳实践或经验吗?我的“架构”有什么不足吗?

CORS 不会执行任何用户身份验证。只有当您的客户端代码是从另一个域而不是您正在谈论的后端提供服务时,您才需要 CORS。如果它是托管静态客户端文件和后端 REST 端点的同一台服务器,则不需要 CORS。如果您不确定,那么完全不要考虑 CORS,看看它是否有效。

但是你需要身份验证才能知道哪个用户是哪个。

虽然 CORS 绝对是一个考虑因素,但您需要的不是身份验证 (AuthN) 或授权 (AuthZ)。 根据您的应用程序将拥有的用户数量,后端将如何扩展您可能想要查看 OAuth2.0 或坚持使用更简单的基于会话的身份验证,但您将需要一些东西。

您后端的 CORS 将限制浏览器 运行 其他域上的应用程序调用您的 Web 服务(它不会阻止来自其他工具的 API 请求)。

AuthN - Your not logged in - go get logged in and come back to me.

AuthZ - Controls what your users can and cant do. You might want to enforce this at the resource level but you absolutely need to within your business logic.

进一步阅读https://auth0.com/docs/authorization/concepts/authz-and-authn

Pramgmatic 网络安全的 Philippe 有一个免费的在线课程可以帮助您入门:https://pragmaticwebsecurity.com/courses/introduction-oauth-oidc.html它的节奏非常好,应该会给您一些基础知识。 (它可能会让您注销此用例的 OAuth,但试一试)