使用Okta授权代码流+ PKCE时,是否可以使用spring的方法级别安全性?

问题描述

我正在尝试使用Okta安全性来设置SpringBoot应用程序。该应用程序是在Okta中使用OIDC单页应用程序(使用授权代码流+ PKCE)配置的,因此我们没有可用的客户机密。我希望能够像@PreAuthorize一样在我的Web服务代码中使用方法级别的安全性,但是无论我做什么,它似乎都不起作用。使用PKCE时甚至可以使用方法级别的安全性,还是仅使用HttpSecurity级别?我只是错过了SpringSecurity这个难题中的重要部分吗?任何帮助将不胜感激。

下面是我的代码

application.yml

okta:
  oauth2:
    issuer: <my-issuer>
    audience: api://default
    client-id: <my-client-id>
    scopes: <my-scopes>

SecurityConfig.java

@Enableoauth2client
@Profile("okta")
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private ClientRegistrationRepository clientRegistrationRepository;

    public OktaSecurityConfig(ClientRegistrationRepository clientRegistrationRepository){
        this.clientRegistrationRepository = clientRegistrationRepository;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors()
           .and()
             .oauth2Login()
             .authorizationEndpoint()
             .authorizationRequestResolver(
                new CustomAuthorizationRequestResolver(
                        clientRegistrationRepository,DEFAULT_AUTHORIZATION_REQUEST_BASE_URI
                )
             );
        Okta.configureResourceServer401ResponseBody(http);
    }
}

控制器

@RestController
@CrossOrigin(origins = {"http://localhost:8080","http://localhost:4200"})
@RequestMapping("/api/myController")
public class MyController {
 
   private StuffStatusDao stuffStatusDao;
  
   @PreAuthorize("hasAuthority('readonly')")
   public ResponseEntity<List<Stuff>> getStuffStatus() {
      return ResponseEntity.ok(stuffStatusDao.getLabelStatus());
   {

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)