KOE303에러 관련

안녕하세요,

Spring Boot에서 java로 카카오 소셜 로그인을 구현하였고, 앱 ID는 "ID 1000446"입니다.

KOE303에러가 토큰 발급 시와 운영체제 액세스 토큰 발급 요청 시 Redirect Url이 달라 발생하는 에러라고 알고 있습니다. 그래서 저희 코드상이나 카카오 디벨로퍼의 모든 정보를 배포된 ip주소와 포트 번호로 바꿔주었는데도 같은 에러가 발생하여 문의드립니다.

이전에 질문드렸던 답변으로는 운영체제 토큰 발급시 저희 localhost:8080으로 리다이렉트 되어있다고 하셨는데, 운영체제 자체에서 토큰을 발급받는 로직은 존재하지 않습니다.

아래 사진과 같이 배포된 ip주소와 포트번호로 url이 구성되어 있습니다.

답변 주시면 감사하겠습니다!

안녕하세요.

이전에 질문드렸던 답변으로는 운영체제 토큰 발급시 저희 localhost:8080으로 리다이렉트 되어있다고 하셨는데, 운영체제 자체에서 토큰을 발급받는 로직은 존재하지 않습니다.

운영체제 토큰 발급이 어떤것인가요?
에러 페이지를 보니 Spring Security를 사용하실 것 같은데 해당 모듈안에서 설정에 따라 카카오에 액세스 토큰 발급요청합니다.

개발하신 시스템에서 인가코드요청 직후, Java/17-ea에서 /oauth/token 액세스토큰 발급요청하고
아래와 같이 Redirect URI 다르게 요청하고 있으니 개발하신 시스템 분석을 해보시면 좋을 것같습니다.

인가코드: http://3.34.236.224:3000/oauth/kakao/login
접근토큰: http://localhost:8080/oauth/kakao/login

현재 ec2 서버에 배포를 진행한 상태이며, http://3.34.236.224:3000/kakao/login 로 접근하며 카카오 로그인을 시도합니다.

리다이렉팅 → 크롬창에서 http://3.34.236.224:3000/oauth/kakao/login?code=(실제인가코드가 여기에 써있습니다.)로 주소가 바뀌고 크롬창에서는 다음과 같이 500에러가 발생합니다.

ec2 서버 내에서의 에러는 다음과 같습니다.

2023-12-06 04:36:20.390 ERROR 1 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "{"error":"invalid_grant","error_description":"Redirect URI mismatch.","error_code":"KOE303"}"] with root cause

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "{"error":"invalid_grant","error_description":"Redirect URI mismatch.","error_code":"KOE303"}"

ec2 서버 내에서 액세스 토큰 발급요청 하셨고
인가코드요청시와 다른 리다이렉트 URI 설정하셔서 카카오측으로부터 KOE303 에러 받은 상황 맞습니다.

리다이렉팅 → 크롬창에서 http://3.34.236.224:3000/oauth/kakao/login?code=(실제인가코드가 여기에 써있습니다.)로 이동하고 그안에서 액세스 토큰 발급요청하는 것입니다.

현재 사용중인 application.yml의 일부입니다.

  security:
    oauth2:
      client:
        registration:
          kakao:
            client-id: [실제 restapikey값이 들어있습니다.]
            client-secret: [카카오 디벨로퍼에서 발급받은 client secret 값 사용중입니다.]
            client-name: Kakao
            redirect-uri: http://3.34.236.224:3000/oauth/kakao/login
            scope: profile_nickname, profile_image, account_email
            authorization-grant-type: authorization_code
            client-authentication-method: POST
        provider:
          kakao:
            authorization_uri: https://kauth.kakao.com/oauth/authorize # 인가 코드 요청
            token_uri: https://kauth.kakao.com/oauth/token # 사용토큰
            user-info-uri: https://kapi.kakao.com/v2/user/me
            user_name_attribute: id

또한, 현재 사용중인 OauthController 코드의 일부입니다.

...
@RestController
@RequiredArgsConstructor
public class OauthController {

    private final KakaoLoginService kakaoLoginService;

    //클라이언트가 해당 엔드포인트에 접근하면, kakaoLoginUri로 리디렉션하여 사용자를 카카오 로그인 페이지로 보냅니다.
    @GetMapping("/kakao/login")
    public void redirectToKakaoLogin(HttpServletResponse response) throws IOException {
        response.sendRedirect("https://kauth.kakao.com/oauth/authorize?client_id=[실제 restapikey값을 그대로 넣어주었습니다.]&redirect_uri=http://3.34.236.224:3000/oauth/kakao/login&response_type=code");
    }

    //카카오 소셜 로그인 구현
    @GetMapping("/oauth/kakao/login")
    public void kakaoLogin(@RequestParam("code") String authCode, HttpServletResponse response)
            throws IOException {

        LoginResultDto loginResult = kakaoLoginService.handleKakaoLogin(authCode);
        boolean isNewUser = loginResult.isNewUser();

        Cookie authorization = new Cookie("Authorization", loginResult.getToken());
        authorization.setSecure(true);
        authorization.setHttpOnly(true);
        authorization.setPath("/");
        authorization.setMaxAge(3600);
        response.addCookie(authorization);

        //String redirectUrl = isNewUser? myPageUrl : mainPageUrl;
        String redirectUrl = "/api/v1/parking/read/detail/1";
        response.sendRedirect(redirectUrl);
    }
}

혹시 이 부분에 문제가 있을까요?

코드상 문제 없어보입니다.

3.34.236.224 에서 Dec 6, 2023 @ 15:51:42.778 호출하신 내용상 리다이렉트 URI가 localhost로 들어왔으므로

배포가 잘못된것 아닐까 싶습니다.

Dec 6, 2023 @ 15:51:42.778	/oauth/token	400	3.34.236.224	http://localhost:8080/oauth/kakao/login

감사합니다~ 해결했습니다!!

1개의 좋아요

답변주셔서 감사합니다~~!!

1개의 좋아요

배포 관련 문제로 수정하여 해결했습니다 감사합니다!

1개의 좋아요

안녕하세요,

이번엔 도메인 구입 후에 전에 에러 해결했던 그대로 설정을 하였는데, 또 다시 KOE303 에러가 납니다.

혹시 어느 부분에서 URL가 다른지 확인해주시면 감사하겠습니다!!

안녕하세요.

아래와 같이 처리되고 있습니다. 지난번 처럼 배포확인 해주시면 좋을 것같아요.

인가코드: https://www.turu-parking.com/oauth/kakao/login
접근토큰: http://3.34.236.224:3000/oauth/kakao/login

배포 설정 수정 완료했습니다. 감사합니다!

1개의 좋아요