Zakázání basic auth pro některé endpointy ve Spring OAuth2

To, že Spring OAuth2 řadu endpointů generuje, jsem se zmínil v jednom z předchozích příspěvků. Na jednu stranu je to výhoda, protože většinu věcí máte hotovou, na stranu druhou to může v některých případech být problém. Například můžete chtít, aby endpoint PUT /oauth/token neměl authentikaci. Normálně byste napsali něco následujícího:

override fun configure(http: HttpSecurity) {
    http
            .authorizeRequests()
            .antMatchers(HttpMethod.PUT, "/oauth/token").permitAll()
            .anyRequest().denyAll()
            .and().csrf().disable()
            .formLogin().disable()
}

To ale v tomto případě nestačí, protože request zachytí AuthorizationServerSecurityConfiguration. Ta má nastavený @Order na 0. Řešením je, ve třídě která dědí od WebSecurityConfigurerAdapter nastavit @Order na -1 (@Order(-1)) a přetížit metodu configure následujícím způsobem.

override fun configure(http: HttpSecurity) {
    http
            .requestMatchers()
            .antMatchers(HttpMethod.PUT, "/oauth/token")
            .and().authorizeRequests().anyRequest().permitAll()
            .and().csrf().disable()
            .formLogin().disable()
}

Nezapomeňte na csfr().disable(), jinak budete dostávat 403.

Napsat komentář