Então, migrei um aplicativo para usar o Azure Ad para autenticação. Anteriormente, a segurança do método era testada usando @WithMockUser
. Por exemplo:
@Test
@WithMockUser
someTestMethod() {
// some test code
}
No entanto, quando tento executar o aplicativo agora, recebo o seguinte erro:
Field repo in com.azure.spring.cloud.autoconfigure.aad.AadWebSecurityConfigurerAdapter required a bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' that could not be found.
A configuração de segurança estende AadWebSecurityConfigurerAdapter como:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AadWebSecurityConfigurerAdapter {
...
}
Acho que o problema é que a configuração de segurança se estende do AadWebSecurityConfigurerAdapter. Eu tentei substituir isso em testes como:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Order(1)
public class TestSecurityConfig {
}
Sem sorte.
Gostaria de poder executar testes sem usar o cliente oauth.
Como eu conseguiria isso?
@WithMockUser
define o contexto de segurança do teste com umUsernamePasswordAuthenticationToken
que não está adaptado ao OAuth2:Authentication
a implementação provavelmente deve ser uma das seguintes:JwtAuthenticationToken
(servidor de recursos com decodificador JWT)BearerTokenAuthentication
(servidor de recursos com introspecção de token, também conhecido como "token opaco")OAuth2AuthenticationToken
(cliente comoauth2Login
)Se você quiser usar anotações, veja essas bibliotecas que escrevi . Ele fornece as anotações que você precisa e o repositório contém muitos exemplos de trabalho, todos testados em unidade e integração.
Também contribuí com
spring-security-test
algunsMockMvc
pós-processadores eWebTestClient
mutadores de solicitações para OAuth2. Mas é claro que eles exigem o uso de ouMockMvc
eWebTestClient
, como tal, estão limitados a testes@Controller
. Em contraste, as anotações podem ser usadas para testar qualquer segurança@Component
(como@Repository
ou@Service
com@PreAuthorize
e semelhantes). Além disso, na minha opinião, as anotações tornam os testes muito mais legíveis.Para obter mais detalhes, você pode consultar o capítulo README que já linkei ou este artigo da Baeldung (mas está um pouco desatualizado: as anotações melhoraram desde que o escrevi).