Olá estou desenvolvendo uma aplicação tanto no front quanto no back-end. Implementei a parte de segurança da api, colocando validação por bearer token. O token é gerado normalmente tanto via postman quando pela aplicação front em angular. Quando o o bearer token é passado para o back-end no postman, usando a aba de authorization, funciona normal, porém quando o token é passado pelo header na requisição da aplicação angular(browser) o token não aparece no header do filtro no back-end(java spring boot). Fiz uma modificação e passei via parâmetro na requisição do angular e dessa forma deu certo. du gostaria de saber se posso manter dessa forma, ou o correto é passar via header e caso seja(isso em termos de segurança), como posso resolver esse problema. Segue abaixo as classes de segurança e validação da api. Desde já agradeço se alguém puder ajudar.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
FilterToken filter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().authorizeRequests()
.antMatchers( "/login/**").permitAll()
.antMatchers("/usuario/insert").permitAll()
.anyRequest().authenticated()
.and().addFilterBefore(filter, UsernamePasswordAuthenticationFilter.class);
}
@Bean
public AuthenticationManager authenticationManager(
AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
Na classe do filtro fiz uma alteração para pegar o token para pegar tanto se vier do header quanto dos parâmetros
@Component
public class FilterToken extends OncePerRequestFilter {
@Autowired
ITokenService tokenService;
@Autowired
IUsuarioDao dao;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
String token;
String authorizationHeader = request.getHeader("Authorization") == null ?
request.getParameter("Authorization") : request.getHeader("Authorization");
if(authorizationHeader != null){
token = authorizationHeader.replace("Bearer ","");
String subject = tokenService.getSubject(token);
Usuario usuario = dao.findByEmail(subject);
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(usuario,
null, usuario.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
filterChain.doFilter(request,response);
}
}