문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.
https://kapi.kakao.com/v1/oidc/userinfo 호출시 403 오류 발생합니다.
디벨로퍼스 앱ID : 1034720 입니다.
문의 시, 사용하시는 개발환경과 디벨로퍼스 앱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을 받으시면 될것 같습니다.
지원 감사드립니다 ~