JWT认证,本地数据库授权

Authentication by JWT and Authorization by local database

在我的 Spring 引导应用程序中,我的用户由第三方进行身份验证,我收到一个 Jwt,我在 Spring 安全性中使用 NimbusJwtDecoder 对其进行解析。

 @Override
 public void configure(HttpSecurity http) throws Exception {
       http.authorizeRequests()
            .mvcMatchers("/api/private").authenticated()
            .mvcMatchers("/api/organisations").authenticated()
            .mvcMatchers("/api/project").authenticated()
            .mvcMatchers("/api/user").authenticated()
            .and()
            .oauth2ResourceServer().jwt();
    }

这很好用,现在我想通过检索存储在我自己的数据库中的角色和权限来添加授权。我有来自 Jwt 的用户名,但我不知道如何插入它。任何帮助将不胜感激。

当您使用 JWT 对用户进行身份验证时,将用户名添加到 SecurityContext 的主体中。

创建一个实现 javax.servelet.Filter 接口的 AuthorisationFilter class。在此 class 使用来自 securityContextHolder 的用户名从数据库中获取用户详细信息,并将 grantedAuthorities 添加到上下文中。

在 SecurityConfig 中创建一个 FilterRegistrationBean,它将过滤器设置为 AuthorisationFilter,将 urlPatterns 设置为 ("/*") 或适当的,并将 Order 设置为 Ordered.LOWEST_PRECEDENCE