【问题标题】:How to protect reactjs resources with spring boot based authentiation?如何使用基于 Spring Boot 的身份验证保护反应 js 资源?
【发布时间】:2020-09-18 08:15:57
【问题描述】:

我目前的项目状态:

  • 我正在使用 ReactJs(前端)和 spring boot(后端)开发一个 Web 应用程序。
  • 当我部署这个应用程序时,我使用 gradle-node-plugin 将 react 代码与我的 spring boot jar 打包在一起

问题:

  • 我知道我应该为所有需要服务器身份验证的资源提供服务。 - 但是,我很难理解是否有办法将我的 react 项目的某些组件/路由放在身份验证 API 后面。
  • 例如 Google Docs,Google 不允许您在没有实际登录的情况下创建任何新文档(甚至查看文本画布)。
  • 目前只有我从数据库加载的数据受 Spring Security 保护,但我的 react 项目中有一个用 Javascript 编写的设计工具,我也想保护它。
  • 这是否可以通过 Spring Security 实现,还是我应该假设我的 react 项目下的所有内容都可以公开访问?
  • 换句话说,我如何保护基于 javascript 的仅 UI 页面,您无需进行任何后端调用来获取身份验证信息。

谢谢!

【问题讨论】:

    标签: reactjs spring-boot spring-security react-router-dom gradle-node-plugin


    【解决方案1】:

    在页面加载时调用 Authenticate API 以查看用户的会话是否通过了身份验证。我认为 Spring Security 可以做到这一点。根据响应,您可以限制路由。

    <Route
          {...rest}
          render={({ location }) =>
            authenticateApiResponse.authenticated ? (
              <Redirect
                to={{
                  pathname: "/profile",
                  state: { from: location }
                }}
              />
            ) : (
              <Redirect
                to={{
                  pathname: "/login",
                  state: { from: location }
                }}
              />
            )
          }
        />
    

    现在用户只有通过后端 API 的身份验证才能进入 profile 屏幕。

    【讨论】:

    • 是否有人可以从浏览器本身的 javascript 中删除“localStorage.getItem('isAuthenticated')”,然后能够访问像“/profile”这样的路径,这是另一个 javascript在反应应用程序而不是后端 REST api 中?
    • 是的。任何人都可以通过浏览器控制台删除它。 “localStorage.clear()”或“localStorage.removeItem()”,甚至从浏览器控制台中的应用程序窗口。
    • 那么它如何保护路径“/profile”处的javascript(它不是一个可以在spring security中轻松保护的REST调用服务器)呢?
    • 我已经更新了我的答案。您将调用后端 API 来验证用户身份,而不是在 UI 上存储任何内容。只有用户通过后端服务器的身份验证,他才能进入个人资料页面。它有一些缺失的部分,例如您如何进行 API 调用以及如何存储数据。但此解决方案可能适用于您,并且用户无法将数据操作到受限页面。
    猜你喜欢
    • 2016-07-30
    • 2021-04-17
    • 2010-11-19
    • 2019-07-10
    • 2017-08-03
    • 2018-11-30
    • 2017-11-02
    • 2018-09-11
    • 2019-11-02
    相关资源
    最近更新 更多