java - JWT Spring - 基于用户的访问

标签 java spring spring-boot spring-security jwt

我正在 Spring boot 应用程序中实现基于 JWT 的身份验证。我有一个 Accounts 表,其中包含用户的银行帐户信息。现在,用户使用该表中的帐号和 PIN 码登录。问题是登录后,用户可以使用 JWT 分配的 token 访问任何内容。他甚至可以更改别人的帐户信息。如何限制仅对其创建 token 的用户进行访问?

每个用户都应该只能访问与该用户关联的信息,因此创建角色不是一个选项。 JWT 是否提供任何此类功能,或者我是否必须手动检查 token ?我可以解析 token 并从中检索帐号,并将其与 Controller 方法中传递的帐号进行比较,但这似乎不是一个简洁的解决方案,因为这需要更改每个 Controller 方法。

最佳答案

由于您的情况的安全性取决于业务逻辑,我想没有办法在身份验证提供者端执行此类验证。

你能做的就是借助 Spring 以 AOP 方式非常优雅地实现它。你可以使用 Spring method security 使用自定义安全解析器

@PreAuthorize("@securityResolver.isOwner(#userId)")
void changeAccount(UUID userId, Request body);

@Component("securityResolver")
public class CustomSecurityResolver {

     public boolean isOwner(final String userId) {
      //TODO business check here
     }

}

您甚至可以将 JWT token 传递给安全解析器方法并实现自定义检查。在这种情况下,您可以避免更改服务的业务逻辑,而只需使用自定义解析器添加几个注释。

我总是在自定义方法安全性的帮助下实现诸如用户只能更改自己的信息租户隔离之类的检查

关于java - JWT Spring - 基于用户的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47634827/

相关文章:

java - Android EditText - 如何检测某些内容是否由 SoftKey 编写?

java - 具有 Java 互操作性的 ANTLR DSL

Spring Boot 安全性 + JWT

spring-boot - 如何安装curl来进行spring boot jib docker镜像的健康检查?

java - 如何组合两个异步 Web 客户端调用,假设一个调用遇到一些异常

java - 如何获取主类构造函数中的上下文?

java - Spring Boot 在作为传统 war 部署时尝试运行嵌入式 Tomcat

java - 如何在camel蓝图中引用 "disable"bean?

支持传播的 Spring 事务

java - Lombok SuperBuilder继承