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.