카카오 로그인 토큰발급 401 Unauthorized: [no body] 문의드립니다

https://kauth.kakao.com/oauth/token

구글링해가며 허용IP 등록도 해보고 client_secret 설정도 열어서 값 추가했다가 플랫폼에 도메인등록도 했다가
다 해봤는데 안되네요. APP ID 는 867900 입니다.

설정문제가 아니라 호출 시, 헤더가 전송안되는 것으로 보입니다.

관련 코드 블럭 공유해주시겠어요?

1개의 좋아요
@PostMapping("/auth/kakao/accessToken")
	@ResponseBody
	public String getKakaoAccessToken(@RequestBody Map<String, String> paramMap) throws MalformedURLException, JsonProcessingException {
    	String code = paramMap.get("code");
    	String GOOGLE_TOKEN_REQUEST_URL = "https://kauth.kakao.com/oauth/token";
        RestTemplate restTemplate=new RestTemplate();
        Map<String, Object> params = new HashMap<>();
        System.out.println("code = "+code);
        params.put("code", code);
        params.put("client_id", "*********");
        //params.put("client_secret", "*********");
        params.put("redirect_uri", "https://localhost:8081/auth/kakao/redirect");
        params.put("grant_type", "authorization_code");
        ResponseEntity<String> stringResponseEntity = restTemplate.postForEntity(GOOGLE_TOKEN_REQUEST_URL, params, String.class);
        System.out.println(stringResponseEntity);
        return stringResponseEntity.getBody();
    }

현재 코드입니다.

(앱키가 공개되지 않도록 블라인드 처리 했습니다. )

가이드, 액세스 토큰 받기 REST API | Kakao Developers REST API

위 가이드와 같이 API 호출 시, Content-type: application/x-www-form-urlencoded;으로 호출해야합니다.
Body 영역에 파라메터를 쿼리스트링 형태로 전달하는 방식인데요.

아래와 같이 Content-type을 헤더에 설정하고 HttpEntity 구성하시면 될 것같습니다.

    	String REQUEST_URL = "https://kauth.kakao.com/oauth/token";
        RestTemplate restTemplate=new RestTemplate();
        
        // Set Header
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        headers.add("Accept", "application/json");        
        
        // Set parameter
        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
        params.add("grant_type", "authorization_code");
        params.add("client_id", "****");
        params.add("redirect_uri", "****");
        params.add("code", code);        
        // Set http entity
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
        
        ResponseEntity<String> stringResponseEntity = restTemplate.postForEntity(REQUEST_URL, request, String.class);
1개의 좋아요

친절한 답변 감사드립니다. 정상적으로 잘 동작합니다.
좋은 하루 되세요. :+1:

1개의 좋아요