我应该在哪里验证用户是不是有权访问资源? [关闭]

Posted

技术标签:

【中文标题】我应该在哪里验证用户是不是有权访问资源? [关闭]【英文标题】:Where should I validate if user has access to resource? [closed]我应该在哪里验证用户是否有权访问资源? [关闭] 【发布时间】:2019-06-28 20:13:32 【问题描述】:

我正在使用 Java spring 构建一个 Rest API,以保护我已实现基于 JWT 的身份验证的端点。

我设置了一个过滤器,在其中验证令牌并恢复用户和角色。到目前为止,这很好用,但是我不知道应该在哪里根据用户和角色实施授权。

例如: 如果 x 是管理员,他/她可以访问任何端点 如果 y 是 id 为 1 的用户,她/他只能访问她/他的资源;例如/user/1/books。

我倾向于在验证 JWT 的同一过滤器中执行此授权,但是,我必须解析 url 以查找它是否进入正确的端点。另一种可能性是直接在控制器中实现,但我不喜欢这种方法,因为我觉得这会使控制器业务逻辑不堪重负。

感谢和问候

【问题讨论】:

你搜索过什么吗?也许developer.com/security/article.php/3467801/… 是的,我做到了。正如我提到的,我正在考虑在过滤器中实现。不利的一面是,就我而言,我将不得不解析 url。 Spring 为这个特定目的构建了一个完整的基础架构。使用@PreAuthorize 【参考方案1】:

由于您标记了“spring-security”,我假设您正在使用它;-)。

您可以使用大量 spring 内置检查来执行您的首选检查。您可以在服务注释中使用 @PreAuthorize @PostAuthorize 和 EL 检查。 我认为 spring 会将它用作额外的过滤器链,但我并不确切知道它。如果检查没有成功处理,spring 会返回一个 4xx 状态码。

@PreAuthorize("@someBean.someCheck(authentication)")
public void yourServiceMethod(...)

(认证对象是spring映射的)

public boolean someCheck(Authentication auth)

另见:

https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/el-access.html https://www.baeldung.com/spring-security-method-security https://www.baeldung.com/spring-security-expressions-basic

【讨论】:

以上是关于我应该在哪里验证用户是不是有权访问资源? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

子组件是不是应该有权访问商店?

使用带有令牌而不是 Cookie 的 Django 会话框架?

Oauth2:资源服务器应该如何知道访问令牌是不是有效?

谷歌验证数字在哪里点

如何验证网络文件夹访问

如何验证某个域是不是可以从浏览器访问?