스프링 카카오 JWT 로그인 수행시 인증 정보를 입력했음에도 불구하고 Invalid_Request가 발생하는 문제

스프링 카카오 JWT 로그인 시 아래와 같이 나오는 상황입니다.


스크린샷 2024-10-31 오전 12.09.50

application.yml은 다음과 같습니다.

  security:
    oauth2:
      client:
        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

        registration:
          kakao:
            client-id: REST API키                
            client-name: Kakao
            client-authentication-method: client_secret_post
            client-secret: Secret키     
            redirect-uri: http://localhost:8080/login/oauth2/code/kakao   # 카카오 테스트 앱 리다이렉트 URI
            authorization-grant-type: authorization_code
            scope:
              - profile_nickname
              - account_email
              - name
              - gender
              - birthday
              - birthyear

앱 ID는 1150401입니다. 도통 무엇이 문제인지 잘 모르겠습니다. 성공 시 핸들러와 실패 시 핸들러를 추가했을때, 핸드폰으로 오는 인증 톡을 확인하고 눌러도 Invalid_Request라고 뜹니다.

안녕하세요.

관련 로그 기재 부탁드려요.

현재는 이렇게 뜹니다.

위에 올려드린 Login with OAuth 2.0 부분에서 카카오 링크를 클릭하면 로그인이 되긴 합니다.

스프링에서 제공하는 OAuth2 Client 로그인 주소가 아니라 카카오 인가코드요청 주소를 웹페이지에서 바로 호출하셨나요?

아직 프론트엔드 코드가 없어 테스트 차원에서 해보는 중이었습니다.

카카오 REST API KEY 그리고 SECRET값이 포함된 주소 그 자체를 URL 에서 직접 호출했습니다.

https://kauth.kakao.com/oauth/authorize?response_type=code&client_id=${REST_API_KEY}&redirect_uri=${REDIRECT_URI}

네, 스프링 OAuth2 Client 는 카카오 인가코드요청에서 리다이렉트 URI로 바로 접근하면 해당 에러 발생합니다. 스프링을 거쳐서 호출해야합니다.

아래 내용참고해주세요.

http://localhost:8080/oauth2/authorization/kakao 를 호출하면 스프링을 거쳐 카카오에 인가코드 요청하고 리다이렉트 URI로 돌아와 액세스 토큰 발급 및 사용자 정보조회가지 OAuth2 Client에서 처리합니다.

Spring에서 카카오 로그인 사용하기 - Spring Security 5, OAuth 2 - deprecated 대응 2023년 6월 27일

Spring Security OAuth2 Client로 자동 구성하는 경우와 직접 RestTemplate()로 각각의 요청을 보내서 처리하는 방식 두 가지 중 어느 것이 좋다고 말할 순 없겠지만 보안적인 측면을 따진다면 전자가 더 좋은 것이 맞나요?

스프링 시큐리티에서 구현한 인가요청 state 난수처리, 자체 인증, client secret 등 모두 구현하신다면 차이가 없습니다.