로컬에서는 제대로 로그인 되지만 개발 서버에서는 401에러가 발생합니다

문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.


개발환경 centos kotlin spring
디벨로퍼스 앱 id: 1018798
로컬에서는 제대로 로그인이 되지만 서버에서는 제대로 로그인이 안됩니다 401에러가 나오면서요
요청헤더는
GET /login/oauth2/code/kakao?code=jtXKizp5CC2QvJTwb0yLsegmovQPenb3cfg8-60HsX22J0ijDf8ZnR_Iqa8KPXPrAAABjXL-r66SBpCp5rpDbg&state=ZY0lp8ipok9Q1ijeENso9AUd3j2zzd_V3mhj6nddvVM%3D HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Cookie: JSESSIONID=AD5D6625B0F7A6462FBF62F09052FB76
Host: everywaffle-server.duckdns.org
Referer: http://everywaffle-server.duckdns.org/
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36

다음과 같고 응답헤더는
HTTP/1.1 401
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 0
Date: Sun, 04 Feb 2024 07:21:50 GMT
Keep-Alive: timeout=60
Connection: keep-alive

다음과 같습니다

응답으로 받은 에러 Body Json 메시지 기재 부탁드려요.

응답에서 응답 데이터를 로드할 수 없다고 no resource with given identifier found라고 뜹니다

리다이렉트 URI 에서 처리 하는 부분 관련 코드 블럭 기재 부탁드려요.

class OAuth2AuthenticationSuccessHandler(
private val tokenProvider: JwtTokenProvider,
private val objectMapper: ObjectMapper,
private val userRepository: UserRepository,
) : SimpleUrlAuthenticationSuccessHandler() {

@Throws(IOException::class)
override fun onAuthenticationSuccess(
    request: HttpServletRequest,
    response: HttpServletResponse,
    authentication: Authentication
) {
    val oAuth2User = authentication.principal as OAuth2User
    val username = oAuth2User.name // OAuth2 인증으로부터 사용자 식별 정보 추출
    val userEntity = userRepository.findByUserName("kakao-$username") ?: throw RuntimeException("User not found")
    val authResponse = OAuth2AuthenticationResponse(
        userName = userEntity?.userName ?: "",
        passWord = userEntity?.password ?: ""
    )
    response.addHeader("Authorization", "Bearer " + tokenProvider.createToken(authResponse.userName))
    response.contentType = "application/json;charset=UTF-8"
    response.writer.write(objectMapper.writeValueAsString(authResponse))
}

}
success handler 부분이고 최종적으로 생성된 유저 네임과 패스워드를 안드로이드에 전달해주기 위해 json으로 파싱해서 넘겨주는 부분입니다

@Service
class CustomOAuth2UserService(
private val userRepository: UserRepository,
private val userSignUpService: UserSignUpService,
private val userSignInService: UserSignInService,
) : DefaultOAuth2UserService() {
private val logger: Logger = LoggerFactory.getLogger(CustomOAuth2UserService::class.java)
override fun loadUser(userRequest: OAuth2UserRequest): OAuth2User {
// OAuth2UserRequest를 통해 카카오에서 사용자 정보를 로드
val oAuth2User = super.loadUser(userRequest)
logger.info(“{}”, oAuth2User.attributes)

    // 카카오에서 제공하는 사용자 정보를 추출
    val attributes = oAuth2User.attributes
    val kakaoId = ("" + attributes["id"]) as? String ?: ""
    if (kakaoId.isNotEmpty()) {
        val userName = "kakao-$kakaoId"
        val existingUser = userRepository.findByUserName(userName)
        if (existingUser == null) {
            // 사용자가 존재하지 않으면 회원가입
            userSignUpService.signUp(userName = userName, password = "0000", email = "")
            val newUser = userRepository.findByUserName(userName)
            if (newUser != null) {
                val userResponse = userSignInService.localSignIn(newUser.userName, newUser.password)
            } else {
                throw UserNotFoundException()
            }
        } else {
            // 이미 존재하는 사용자라면 필요한 경우 로그인 처리
            val userResponse = userSignInService.localSignIn(existingUser.userName, existingUser.password)
        }
    }
    return oAuth2User
}

}
서비스 로직입니다

@Bean
@Throws(Exception::class)
fun filterChain(http: HttpSecurity): SecurityFilterChain {
http
.httpBasic { it → it.disable() }
.csrf { it → it.disable() }
.sessionManagement { it → it.sessionCreationPolicy(SessionCreationPolicy.STATELESS) }
.authorizeHttpRequests { it →
it
.requestMatchers(“/“).permitAll()
.requestMatchers(”/welcome").permitAll()
.requestMatchers(“/api/signup”).permitAll()
.requestMatchers(“/api/signin”).permitAll()
.requestMatchers(“/test-page”).permitAll()
.requestMatchers("/swagger-ui/
”).permitAll()
.requestMatchers(“/v3/api-docs/**”).permitAll()
.anyRequest().authenticated()
}
.addFilterBefore(JwtAuthenticationFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter::class.java)
// 소셜 로그인
.oauth2Login {
it.userInfoEndpoint {
it.userService(customOAuth2UserService)
}
.successHandler(OAuth2AuthenticationSuccessHandler(jwtTokenProvider, ObjectMapper(), userRepository))
}
return http.build()
}
시큐리티 설정 부분입니다
로컬에서는 제대로 가입도 되고 json도 넘어오는데 서버에서는 401에러가 나옵니다

카카오측 로그는 모두 정상응답하였고
2월 4일 아래 외에는 에러가 없습니다.

{"code":-401,"msg":"ip mismatched! callerIp=122.46.243.229. check out registered ips."}

서버 IP가 어떻게 되나요?

서버 Ip는 52.79.129.231입니다

Feb 5, 2024 @ 19:58:48.607 everywaffle /v2/user/me 200 52.79.129.231

카카오 로그인 이후 사용자 정보조회까지 정상 처리된 이력이 있고 오류로그는 없습니다.

http://everywaffle-server.duckdns.org/api/signup/kakao
여기로 getmapping을 보내면 카카오 로그인 하고 정상적으로 됐을때 생성된 userid와 password를 반환해야하는데 현재는 401에러가 뜨는 상황입니다

다시 시도하셔서 운영 서버 로그 전문 다시 기재 해주시겠어요?

(시도한 시간도 기재해주세요.)