Spring Security 403 запрещенная ошибка продолжает происходить даже при отключении csrf - PullRequest
0 голосов
/ 20 июня 2020

Я следил за учебником из https://programmingtechie.com/2019/11/08/build-a-full-stack-reddit-clone-with-spring-boot-and-angular-part-3/.

И по какой-то причине /auth/api/login REST-API продолжает выдавать запрещенную ошибку 403 (доступ запрещен), даже когда я отключен csrf.

    @Override
    public void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.cors().and()
                .csrf().disable()
                .authorizeRequests()
                .antMatchers("/api/auth/**")
                .permitAll()
                .anyRequest()
                .authenticated();

        httpSecurity.addFilterBefore(jwtAuthenticationFilter,
                UsernamePasswordAuthenticationFilter.class);
    }

Это на SecurityConfig расширении класса WebSecurityConfigurerAdapter.

Ниже AuthController.

@RestController
@RequestMapping("/api/auth")
@AllArgsConstructor
public class AuthController {

    private final AuthService authService;
    private final RefreshTokenService refreshTokenService;

    @PostMapping("/signup")
    public ResponseEntity<String> signup (@RequestBody RegisterRequest registerRequest) {
        authService.signup(registerRequest);
        return new ResponseEntity<>("User Registration Successful", HttpStatus.OK);
    }

    @PostMapping("/login")
    public AuthenticationResponse login(@RequestBody LoginRequest loginRequest) {
        return authService.login(loginRequest);
    }

    @GetMapping("accountVerification/{token}")
    public ResponseEntity<String> verifyAccount(@PathVariable String token) {
        authService.verifyAccount(token);
        return new ResponseEntity<>("Account Activated Successfully", OK);
    }

Когда я пытаюсь запрашивая http://localhost:8080/api/auth/signup, он работает нормально, но http://localhost:8080/api/auth/login продолжает возвращать запрещенную ошибку 403.

Для ясности, ниже приведен класс JwtAuthenticationFilter.

    @Override
    protected void doFilterInternal(HttpServletRequest request,
                                    HttpServletResponse response,
                                    FilterChain filterChain) throws ServletException, IOException {
        String jwt = getJwtFromRequest(request);

        if (StringUtils.hasText(jwt) && jwtProvider.validateToken(jwt)){
            String username = jwtProvider.getUsernameFromJwt(jwt);

            UserDetails userDetails = userDetailsService.loadUserByUsername(username);
            UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails,
                    null, userDetails.getAuthorities());

            authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));

            SecurityContextHolder.getContext().setAuthentication(authentication);
        }

        filterChain.doFilter(request, response);
    }

    private String getJwtFromRequest(HttpServletRequest request){
        String bearerToken = request.getHeader("Authorization");

        if(StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")){
            return bearerToken.substring(7);
        }

        return bearerToken;
    }

Может кто-нибудь указать ошибки или мне нужно выполнить дополнительную настройку?

1 Ответ

0 голосов
/ 05 июля 2020

Исправление: удаление cors () из конфигурации HttpSecurity.

Я столкнулся с той же проблемой, следуя этому руководству. Откровенно говоря, даже я новичок в новых пружинных ботинках. Пробовал разные методы, чтобы решить эту проблему, и этот мне понравился. Я не уверен, почему это решает проблему. Нужно покопаться в этом. Но я надеюсь, что это поможет вам продвинуться вперед в этом уроке.

...