【问题标题】:spring security role-based needed for full stack app?全栈应用程序需要基于角色的spring security?
【发布时间】:2021-10-13 16:10:36
【问题描述】:

我正在实现一个基本的登录应用程序。特点如下:

  1. 成功登录后,应该会出现一个显示名称、用户名和角色(经理/用户)的欢迎页面。
  2. 如果用户具有管理员角色,欢迎页面将包含访问受限网页的链接。
  3. 此受限网页只能由经理角色访问,其他用户角色不能访问。
  4. 实现注销功能。
  5. 如果用户 ID 或密码无效,我应该留在登录页面并显示错误消息“用户 ID 或密码无效”。
  6. 所有数据都应存储在数据库中。
  7. 应用程序应演示 MVC 模式...

我的架构:

enter image description here

我在前端使用 react js。我使用带有基于角色的授权的spring security构建后端,其中某些角色可以访问某些url。我已经使用邮递员在后端进行了测试,我尝试访问/restricted,如果我使用 mvcMatchers() 使用 ROLE-USER 而不是 ROLE-MANAGER,它会响应 401。现在令人困惑的部分是前端

我注意到我可以在前端进行所有必要的验证。我什至不需要在后端执行 mvcMatcher(),因为我只需加载 userdetails 和角色并要求 react 为我验证!见鬼,我什至不需要使用基于角色的授权。我只需要在名为“role”的用户表中添加额外的字段,并使用它来检查项目 3 并在项目 1 上显示角色。我只需要 1 个表,而不是 3。我什至可以要求响应重定向到 /login 如果用户试图在没有登录的情况下访问 /welcome,或者如果用户角色是 USER,则禁用 /unauthorised。

但我对这种方式感觉不对。我很困惑。

一个。最好的方法是什么?

b.基于角色的是否仅适用于rest-api服务,而不适用于全栈应用程序?从我看到的前端可以做所有的验证

back end repo
front end repo

【问题讨论】:

    标签: spring-security role-base-authorization


    【解决方案1】:

    一个。最好的方法是在后端获得授权,因为你的 React 前端并不是访问后端的唯一方式。如果后端没有实现授权,那么即使你在前端进行了验证,恶意用户也可以使用任何其他 HTTP 客户端在未经授权的情况下访问后端。

    b.基于角色的授权适用于您希望允许基于用户角色访问资源的所有场景,无论使用哪个堆栈。

    【讨论】:

    • 如果我使用 jwt 会怎样?这能解决问题吗?即使恶意用户使用其他 http 客户端访问后端,它仍然需要 jwt 权限。另外,如果每个请求都需要一个包含凭据的主体,那么这个人将如何绕过它?
    • jwt 用于验证或换句话说识别用户,在后端没有基于角色的授权,具有用户角色 jwt 的人可以访问打算由经理访问的资源。
    • 那我两个都需要?或者至少我需要基于角色的授权
    • 你是对的,是的。后端授权对于您的用例和前端验证是必要的,以获得更好的用户体验。
    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 2017-10-19
    • 2014-05-23
    • 2020-12-18
    • 2020-06-16
    • 2016-07-01
    • 2019-08-08
    • 2018-11-28
    相关资源
    最近更新 更多