카카오 로그인 - open id 사용자 정보가져오기시 403 오류 문의드립니다

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


https://kapi.kakao.com/v1/oidc/userinfo 호출시 403 오류 발생합니다.
디벨로퍼스 앱ID : 1034720 입니다.

안녕하세요.

Authorization 헤더 값이 확인되지 않습니다.
구현하신 코드 확인 부탁드립니다.

REST API | Kakao Developers REST API - OIDC: 사용자 정보 가져오기

urlConn.setRequestProperty(“Authorization”, "Bearer " + tokenInfo.get(“access_token”).toString());

이런식 으로 구현되어 있고, 실행로그에도
Bearer ycd ~~~ (생략)
위처럼 나오고 있습니다.
혹시 다르게 처리해야 할까요 ?

구현하신 코드 부탁드립니다.

파일을 드릴수 없어, 발췌하여 드립니다.

==> 호출 옵션 설정 부분

reqArgument = new HashMap<String, Object>();
reqArgument.put("targetUrl", kakaoUrls.get("kakao_openIdInfo_request").toString());
reqArgument.put("reqMethod","GET");
reqArgument.put("reqArgs",null);
reqArgument.put("reqProps",new String[]{"Authorization"});
reqArgument.put("Authorization","Bearer " + tokenInfo.get("access_token").toString());
reqArgument.put("resMethod","JSON");

==> HttpURLConnection 호출부분

		try{

			if(requestArgument == null || requestArgument.isEmpty()) {
				throw new Exception("필수 요청항목 누락 : requestArgument is Null or Empty !");
			}else{
				for(String argName:mandatoryArgs){
					if(!requestArgument.containsKey(argName)){
						throw new Exception("필수 요청항목 누락 : " + argName);
					}
				}
			}

			trgUrl	= new URL(requestArgument.get("targetUrl").toString());
			System.out.println(">>>>>.getDataFromURLConnection targetUrl : " + requestArgument.get("targetUrl").toString());
			urlConn	= (HttpURLConnection) trgUrl.openConnection();
			urlConn.setConnectTimeout(connectionTimeout);
			System.out.println(">>>>>.getDataFromURLConnection connectionTimeout : " + connectionTimeout);
			urlConn.setReadTimeout(readTimeout);
			System.out.println(">>>>>.getDataFromURLConnection readTimeout : " + readTimeout);
			urlConn.setRequestMethod(requestArgument.get("reqMethod").toString().toUpperCase());
			System.out.println(">>>>>.getDataFromURLConnection reqMethod : " + requestArgument.get("reqMethod").toString().toUpperCase());
			urlConn.setDoOutput(true);
			System.out.println(">>>>>.getDataFromURLConnection setDoOutput : true");

			if(requestArgument.containsKey("reqProps")){
				for(String propName : (String[]) requestArgument.get("reqProps")){
					urlConn.setRequestProperty(propName, requestArgument.get(propName).toString());
					System.out.println(">>>>>.getDataFromURLConnection reqProps : " + propName + " : " + requestArgument.get(propName).toString());
				}
			}

			if(requestArgument.get("reqArgs") != null){
				for(String argName : (String[]) requestArgument.get("reqArgs")){
					if(reqStr.length() == 0){
						reqStr = argName + "=" + requestArgument.get(argName).toString();
					}else{
						reqStr += "&" + argName + "=" + requestArgument.get(argName).toString();
					}
				}
			}

			System.out.println(">>>>>.getDataFromURLConnection reqStr : " + reqStr);

			wrtBuff = new BufferedWriter(new OutputStreamWriter(urlConn.getOutputStream()));
			wrtBuff.write(reqStr);
			wrtBuff.flush();

			rspCode = urlConn.getResponseCode();
			System.out.println(">>>>>.getDataFromURLConnection rspCode : " + rspCode);

======> 실행 로그

>>>>>.getDataFromURLConnection targetUrl : https://kapi.kakao.com/v1/oidc/userinfo
>>>>>.getDataFromURLConnection connectionTimeout : 5000
>>>>>.getDataFromURLConnection readTimeout : 5000
>>>>>.getDataFromURLConnection reqMethod : GET
>>>>>.getDataFromURLConnection setDoOutput : true
>>>>>.getDataFromURLConnection reqProps : Authorization : Bearer ycd ~~~~~ (생략)
>>>>>.getDataFromURLConnection reqStr : 
>>>>>.getDataFromURLConnection rspCode : 403

해당 코드를 제거하여 GET으로 요청할 수 있도록 부탁드립니다.

====> 실행 로그

.getDataFromURLConnection targetUrl : https://kapi.kakao.com/v1/oidc/userinfo
.getDataFromURLConnection connectionTimeout : 5000
.getDataFromURLConnection readTimeout : 5000
.getDataFromURLConnection reqMethod : GET
.getDataFromURLConnection reqProps : Authorization : Bearer _BOe ~~~~~ (생략)
.getDataFromURLConnection reqStr :

====> doOutput 코드 수정시 오류 메세지 입니다.
java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true)

oidc 사용자 정보는 body로 전달할 내용이 없는데요
해당 코드 제거하시고 바로 responseCode호출하신 뒤 input stream을 받으시면 될것 같습니다.

지원 감사드립니다 ~