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

时间:2020-08-26 22:05:09

标签: spring-boot spring-security okta pkce

我正在尝试使用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());
   {

}

0 个答案:

没有答案