jhipster中通过id限制URL访问控制

Posted

技术标签:

【中文标题】jhipster中通过id限制URL访问控制【英文标题】:Restrict URL access control by id in jhipster 【发布时间】:2021-03-14 08:28:10 【问题描述】:

我有一个问题,每个用户都可以从 URL 中检索其他用户的数据。

例如,我有一个这样的rest api:

@GetMapping("/getFindByPersonId/perId")
@Timed
public List<ComboVahedAmoozeshi> getFindBySkhsIdCombo(@PathVariable Long perId)
    return comboVahedAmoozeshiRepository.getFindBySkhsIdCombo(perId);

授权后,每个用户都可以更改id并获取其他用户的数据,如下图:

是否有任何建议限制每个用户无权调用该方法?或者 Jhipster 有什么选项可以使用 UUId 来隐藏 id?

【问题讨论】:

这些是您自定义生成的实体吗?如果是,您需要自行实施对象级限制。也许方法安全性就足够了(参见docs.spring.io/spring-security/site/docs/5.3.0.RELEASE/…)或者您必须实施访问控制列表来限制对实体的访问(docs.spring.io/spring-security/site/docs/5.3.0.RELEASE/…)。由于 jhipster 不知道您的域,它只是通过用户和管理员角色生成基本访问控制,以防止未经授权访问 api。 @atomfrede 你的意思是 jhipster 考虑生成的 CRUD 吗?此示例是定制的,但定制或 jhipstere 生成之间没有区别。例如,在每个编辑页面上,您都可以更改 URL 中的 id 并获取其他数据。 没错。我想说的是,这是设计使然。您可以作为经过身份验证的用户访问每个实体。 JHipster 不知道是否必须将某个实体限制为某个用户。您必须实施进一步的措施(例如,通过 ACL 或某种后置过滤器)才能做到这一点。 但是,如何限制记录?具有 role_user 的用户 A 可以访问 entityA。具有 user_id 的 entityA 中的记录属于用户 A。具有 role_user 的用户 B 也可以访问实体 A。但是,用户 B 也可以访问用户 A 记录(通过 URL 和 API) 您可以使用 acls 或者可能已经适合您的用例的是使用 PostAuthorize 过滤器。使用该过滤器,您可以定义一个表达式(如当前用户的 userId 必须与返回对象的属性 X 匹配),如果不允许用户读取该对象,则该表达式会阻止从方法返回对象。例如,请参见此处baeldung.com/spring-security-method-security。您必须为 jhipster 启用全局方法安全性,因为默认情况下未启用它 【参考方案1】:

感谢@atomferede 的正确答案。我必须在其他实体中添加 jhi_user_id 并使用 @postfilter 注释来限制用户对数据的访问。 虽然,在 jhipster 生成器中使用此选项可能是一个好主意,以提高安全级别和更快的实施。

【讨论】:

不客气。如果您认为这很有用并且可以集成到代码生成器中,您可以从模块/蓝图开始。

以上是关于jhipster中通过id限制URL访问控制的主要内容,如果未能解决你的问题,请参考以下文章

在浏览器中通过 URL 访问时找不到端点

Cognos11中通过URL访问report的设置

如何从我的 C# 代码中通过自定义 url 方案访问传递到我的应用程序的值?

如何在 jhipster 中通过 OAuth2 成功登录时执行操作

ACL访问控列表之标准版

Spring中通过变量和import标签来控制加载哪些bean