카카오 로그인 시 authorization_request_not_found 에러가 발생합니다

앱 ID 947219
지인들 기기로 로그인 API를 사용했을 때 토큰까지 잘 발급되는 것을 확인할 수 있었습니다.
그런데 특정 기기로 접근했을 때 인가 요청을 찾을 수 없다는 authorization_request_not_found 오류가 발생합니다.
이유가 무엇인지 궁금합니다.

성공할 경우 로그입니다.

2023-08-07T14:27:52.603Z INFO 1 — [nio-8080-exec-3] .m.j.f.JwtAuthenticationProcessingFilter : JwtAuthenticationProcessingFilter 호출
2023-08-07T14:27:52.603Z INFO 1 — [nio-8080-exec-3] .m.j.f.JwtAuthenticationProcessingFilter : 액세스 토큰 체크 & 인증 처리 메소드 checkAccessTokenAndAuthentication() 호출
2023-08-07T14:28:24.616Z INFO 1 — [nio-8080-exec-4] .m.j.f.JwtAuthenticationProcessingFilter : JwtAuthenticationProcessingFilter 호출
2023-08-07T14:28:24.617Z INFO 1 — [nio-8080-exec-4] .m.j.f.JwtAuthenticationProcessingFilter : 액세스 토큰 체크 & 인증 처리 메소드 checkAccessTokenAndAuthentication() 호출
2023-08-07T14:28:25.162Z INFO 1 — [nio-8080-exec-6] .m.j.f.JwtAuthenticationProcessingFilter : JwtAuthenticationProcessingFilter 호출
2023-08-07T14:28:25.162Z INFO 1 — [nio-8080-exec-6] .m.j.f.JwtAuthenticationProcessingFilter : 액세스 토큰 체크 & 인증 처리 메소드 checkAccessTokenAndAuthentication() 호출
2023-08-07T14:28:26.962Z INFO 1 — [nio-8080-exec-8] .m.j.f.JwtAuthenticationProcessingFilter : JwtAuthenticationProcessingFilter 호출
2023-08-07T14:28:26.962Z INFO 1 — [nio-8080-exec-8] .m.j.f.JwtAuthenticationProcessingFilter : 액세스 토큰 체크 & 인증 처리 메소드 checkAccessTokenAndAuthentication() 호출
2023-08-07T14:28:41.935Z INFO 1 — [nio-8080-exec-9] .m.j.f.JwtAuthenticationProcessingFilter : JwtAuthenticationProcessingFilter 호출
2023-08-07T14:28:41.936Z INFO 1 — [nio-8080-exec-9] .m.j.f.JwtAuthenticationProcessingFilter : 액세스 토큰 체크 & 인증 처리 메소드 checkAccessTokenAndAuthentication() 호출
2023-08-07T14:28:42.103Z INFO 1 — [nio-8080-exec-9] c.p.m.d.o.s.CustomOAuth2UserService : CustomOAuth2UserService.loadUser() 실행 - OAuth2 로그인 요청 진입
2023-08-07T14:28:42.215Z INFO 1 — [nio-8080-exec-9] c.p.m.d.o.h.OAuth2LoginSuccessHandler : OAuth2 Login 성공!
2023-08-07T14:28:42.216Z INFO 1 — [nio-8080-exec-9] c.p.mapdagu.jwt.service.JwtService : Access Token, Refresh Token 헤더 설정 완료

실패할 경우 로그입니다.
2023-08-07T14:44:05.298Z INFO 1 — [nio-8080-exec-5] .m.j.f.JwtAuthenticationProcessingFilter : JwtAuthenticationProcessingFilter 호출
2023-08-07T14:44:05.300Z INFO 1 — [nio-8080-exec-5] .m.j.f.JwtAuthenticationProcessingFilter : 액세스 토큰 체크 & 인증 처리 메소드 checkAccessTokenAndAuthentication() 호출
2023-08-07T14:44:05.685Z INFO 1 — [nio-8080-exec-6] .m.j.f.JwtAuthenticationProcessingFilter : JwtAuthenticationProcessingFilter 호출
2023-08-07T14:44:05.686Z INFO 1 — [nio-8080-exec-6] .m.j.f.JwtAuthenticationProcessingFilter : 액세스 토큰 체크 & 인증 처리 메소드 checkAccessTokenAndAuthentication() 호출
2023-08-07T14:44:05.824Z INFO 1 — [nio-8080-exec-8] .m.j.f.JwtAuthenticationProcessingFilter : JwtAuthenticationProcessingFilter 호출
2023-08-07T14:44:05.824Z INFO 1 — [nio-8080-exec-8] .m.j.f.JwtAuthenticationProcessingFilter : 액세스 토큰 체크 & 인증 처리 메소드 checkAccessTokenAndAuthentication() 호출
2023-08-07T14:44:14.883Z INFO 1 — [nio-8080-exec-9] .m.j.f.JwtAuthenticationProcessingFilter : JwtAuthenticationProcessingFilter 호출
2023-08-07T14:44:14.883Z INFO 1 — [nio-8080-exec-9] .m.j.f.JwtAuthenticationProcessingFilter : 액세스 토큰 체크 & 인증 처리 메소드 checkAccessTokenAndAuthentication() 호출
2023-08-07T14:44:15.170Z INFO 1 — [io-8080-exec-10] .m.j.f.JwtAuthenticationProcessingFilter : JwtAuthenticationProcessingFilter 호출
2023-08-07T14:44:15.170Z INFO 1 — [io-8080-exec-10] .m.j.f.JwtAuthenticationProcessingFilter : 액세스 토큰 체크 & 인증 처리 메소드 checkAccessTokenAndAuthentication() 호출
2023-08-07T14:44:15.171Z INFO 1 — [io-8080-exec-10] c.p.m.d.o.h.OAuth2LoginFailureHandler : 소셜 로그인에 실패했습니다. 에러 메시지 : {}
org.springframework.security.oauth2.core.OAuth2AuthenticationException: [authorization_request_not_found]

쿠키를 지우고 다시 시도하면 해결되는 것을 발견했는데 쿠키 때문일 수도 있는 건가요?
실패했던 모든 기기에서 확인하지는 못했습니다.

안녕하세요.

authorization_request_not_found 오류는 서비스측 인가 및 세션 처리가 미흡하거나 그 과정중에 오류가 있어 authorizationRequest 값을 확인하지 못하는(null) 경우 발생할 수 있습니다.

카카오측에 오류 로그가 없는 것으로 보아 구현 내용에 원인이 있을것으로 보입니다.

OAuth2UserService 구현하고 계시다면 해당 구현부에서 정상 리턴하는지 확인 부탁드리며, authorizationEndpoint 정상 호출되는지 확인 부탁드립니다.

실패 시 OAuth2UserService를 구현한 CustomOAuth2UserService의 loadUser가 실행이 되지 않습니다.
(loadUser 시작 부분에 작성한 로그가 출력되지 않음)

서버가 Redirect URI로 전달받은 인가 코드로 토큰 받기를 요청하지 못해, OAuth2 로그인 요청 진입 자체가 되지 않아 카카오측에 오류 로그가 나타나지 않는 것 같습니다.

특정 상황에서만 발생하는 문제로 쿠키를 지웠을 때 해결되는 것 같기도 합니다.

위 로그에서는 JwtAuthenticationProcessingFilter에서 발생하고 있고
해당 필터는 직접 구현하신걸로 보입니다.

이 부분에서 SecurityContextHolder 의 Authentication에 관여하고 있다면 해당 로직 호출까지 과정 중 문제가 발생할 것으로 보입니다.

맞습니다. JwtAuthenticationProcessingFilter는 Refresh Token이 요청 헤더에 있는지 확인하고 없다면
액세스 토큰 체크 & 인증 처리 메소드 checkAccessTokenAndAuthentication()를 호출하도록 구현했습니다.

checkAccessTokenAndAuthentication()에서는, Access Token을 추출해 null이면 다음 필터로 넘어가고, null이 아니면 토큰이 유효한지 검증 한 후 유효하고, 해당 토큰의 회원이 존재한다면 인증 허가 메소드 saveAuthentication()을 호출해 SecurityContextHolder 의 Authentication에 관여하게 됩니다.

현재 카카오 로그인 요청에서는 요청 헤더에 Refresh Token과 Access Token이 존재하지 않아 JwtAuthenticationProcessingFilter에서 다음 필터로 넘어가는 작용만 하고 있습니다.

Refresh Token 없음 → checkAccessTokenAndAuthentication() 호출 → Access Token 없음 → filterChain.doFilter(request, response)

댓글 달아주셔서 감사합니다.

저는 세션 스토리지를 redis로 바꾸니까 해결 됐습니다!