1
resposta

Autenticação para acessar o swagger

Boa tarde blz ??

Pegando o exemplo da última aula quando acessamos http://localhost:8085/bytebank-api/v1 o acesso à essa documentação é feito sem nenhuma proteção, ou seja, estou expondo a API publicamente ! Há alguma forma de que seja solicitada algum tipo de autenticação para acessar de forma segura o swager ?

Por exemplo quando o cara colocar no navegador http://localhost:8085/bytebank-api/v1/ abrir algum tipo de prompt pedindo usuário e senha ?

Valeu

1 resposta

Fala Jorge, tudo bem?

Se o seu swagger for acessado dentro de alguma aplicação, você pode configurar uma feature de segurança restringindo a URL e requisitando um usuário e senha, com o spring-security, um exemplo:

@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
    .antMatchers("/swagger-resources/*", "*.html", "/api/v1/swagger.json")
        .hasRole("SWAGGER")
    .anyRequest()
        .authenticated()
            .and()
                .httpBasic()
            .and()
                .csrf().disable();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("admin").password("admin").authorities("SWAGGER");
    }
}

Uma outra alternativa é fazer utilizando o próprio web server onde está hospedada a página. Por exemplo, no nginx você poderia adicionar uma autenticação HTTP básica para a página (a qualquer momento que alguém acessar a sua url ou subdomínio de documentos, receberá uma caixa de diálogo de usuário / senha antes de poder acessar o swagger-ui): https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/

Abraço!