如何用有效的jwt解决WebSecurityConfigureAdapter上的403错误?

trnvg8h3  于 2021-07-12  发布在  Java
关注(0)|答案(0)|浏览(263)

我看了几乎所有关于这个主题的博客和帖子,但没有找到解决办法。我有一个 WebSecurityConfigurerAdapter 看起来是这样的:

@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

  String issuerUri = "issuer url";

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
        .cors()
            .and()
        .csrf().disable()
        .authorizeRequests(authorizeRequests ->
            authorizeRequests
                .antMatchers(HttpMethod.GET, "/test").hasRole("Task.Write")
                .anyRequest().authenticated()
        )
        .oauth2ResourceServer(oauth2ResourceServer ->
            oauth2ResourceServer
                .jwt(jwt ->
                    jwt.decoder(JwtDecoders.fromIssuerLocation(issuerUri))
                )
        );
  }

我有一个控制器,看起来像这样:

@GetMapping(value="/test")
public ApplicationResponse test(@AuthenticationPrincipal Jwt jwt) {
    // Map<String, Object> x = jwt.getClaims();
    return new ApplicationResponse("ok", "ok");
}

然而,当我用一个有效的jwt用postman击中这个端点时,我得到了一个403错误。我试过给这个角色加上前缀 ROLE_ 以及 Role_ 尝试了很多其他的事情,但总是403。
奇怪的是如果我 permitAll() 而不是验证并让jwt通过。我可以查看控制器中的jwt对象。我看到角色就在那里。为什么会这样 WebSecurityConfigurerAdapter 当jwt有效并且角色在那里时总是抛出403?
我注意到角色位于jwt中的声明中。也许我需要从这里得到它?我看不到如何从configure方法中的声明中获取角色:

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题