JWT Spring - 基于用户的访问

时间:2017-12-04 13:46:34

标签: java spring spring-boot spring-security jwt

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

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

1 个答案:

答案 0 :(得分:2)

由于您的案例中的安全性取决于业务逻辑,我想在Auth提供商方面无法执行此类验证。

你可以做的是在Spring的帮助下以AOP的方式实现它非常优雅。您可以将spring method security 与自定义securiry解析器

一起使用
@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令牌传递给安全解析程序方法并实现自定义检查。在这种情况下,您可以避免更改服务的业务逻辑,只需使用自定义解析程序添加几个注释即可。

我总是在自定义方法安全性的帮助下实施user could only change its own infotenant isolation等检查