tim.l
#53
(1) java.io.IOException: Server returned HTTP response code: 401 for URL: https://kauth.kakao.com/oauth/token
카카오측에 타이어나라 토큰 요청 로그가 없는걸 보면, Request데이터가 훼손 되었을 것 같습니다.
토큰 요청은 예제 코드 그대로 사용하셨나요?
(2) 운영서버에서 발생하는 자세한 에러 확인할 수 있을까요?
만약 인증서 문제인지 Java 버전과 ca-certificates 버전 확인이 필요합니다.
공지 : [긴급공지] 카카오 Open API 플랫폼 SSL 인증서 변경 안내 (수정됨, 재확인 필요) / [Urgent Notice] Replacing SSL certificates in Kakao Open API Platform (Revised, Need to recheck)
[ca-certificates 버전 확인 방법]
rpm -q ca-certificates
또는
yum list installed | grep ca-certificates
만약 버전이 공지한 것보다 낮고 업데이트 할 수 없다면
발급받으신 인증서가 아니라 루트 인증서를 설치하시면됩니다.
참고 : 루트 인증서 설치 방법 (JAVA API호출 환경)
안녕하세요
(1) java.io.IOException: Server returned HTTP response code: 401 for URL: https://kauth.kakao.com/oauth/token
카카오측에 타이어나라 토큰 요청 로그가 없는걸 보면, Request데이터가 훼손 되었을 것 같습니다.
토큰 요청은 예제 코드 그대로 사용하셨나요?
→
① https://kauth.kakao.com/oauth/authorize?client_id=a0641350ab6b6afac7***&redirect_uri=http://test1.tirenara.net/test.do&response_type=code
② 6OF30GTcZ8ijfCBuLLNxEGjPbsCxMGVFYl0truLU5Ei7nXeYL7CFF6Ip1Eb34grJ1j0-aQopdSkAAAF9Ji-lrg
③ {“grant_type”: “authorization_code”, “client_id”: “a0641350ab6b6afac7ba8fb30d11913f”, “redirect_uri”: “http://test1.tirenara.net/test.do”, “code”: “6OF30GTcZ8ijfCBuLLNxEGjPbsCxMGVFYl0truLU5Ei7nXeYL7CFF6Ip1Eb34grJ1j0-aQopdSkAAAF9Ji-lrg”}
request데이터가 code밖에 없지 않나요? 개발서버에서 ①번에서 인가코드를 받고 ②번의 code를 가지고 다시 ③ 토큰을 요청했습니다.
혹시 모르니 소스도 올려보겠습니다.
String restApiKey = “a0641350ab6b6afac7ba8fb30d11913f”;
String code = params.getString(“code”);
String redirectUrl = request.getScheme() + “://” + request.getServerName() + “/test.do”;
System.out.println("################################## " + code);
URL url = new URL("https://kauth.kakao.com/oauth/token");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; utf-8");
con.setRequestProperty("Accept", "application/json");
con.setDoOutput(true);
con.setRequestProperty("Authorization", restApiKey);
String jsonInputString = "{\"grant_type\": \"authorization_code\", \"client_id\": \"" + restApiKey + "\", \"redirect_uri\": \"" + redirectUrl + "\", \"code\": \"" + code + "\"}";
System.out.println(jsonInputString);
try (OutputStream os = con.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
try (BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))) {
StringBuilder response2 = new StringBuilder();
String responseLine = null;
while ((responseLine = br.readLine()) != null) {
response2.append(responseLine.trim());
}
System.out.println(response2.toString());
}
(2) 운영서버에서 발생하는 자세한 에러 확인할 수 있을까요?
자세한 에러는 아래 url에서 확인 가능합니다.
→
“https://www.tirenara.net/test.do?code=SYN4ADON0X8yXvhtOnz32i9Ha8prlbsJehdFYbrz1pgbDjXm7Xu-QRRqoBnvseNtrBZ9nQorDNQAAAF9Ji5DEA”
->자바 버전 확인
[root@autoonlineweb ~]# javac -version
javac 1.8.0_65
→ ca-certificates 버전 확인
[root@autoonlineweb ~]# rpm -q ca-certificates
ca-certificates-2015.2.6-65.0.1.el6_7.noarch
-
자바 버전이 낮은데 루트 인증서를 설치하면 될까요?
-
아니면 지금 방식에 rest api인데
ios에서 생긴 이슈가 window.open 새창 문제가 있는거라…
리다이렉트 방식으로 해봐도될까요?
(확인해보니 redirect 방식으로 개발하려고해도 token받기가 필요하네요…)
tim.l
#56
안녕하세요.
ca-certificates 버전은 문제 없는 것 같고, JRE 1.8.0_101 이상 업데이트가 어려우시다면,
https://www.digicert.com/kb/digicert-root-certificates.htm
에서 DigiCert Global Root G2 인증서를 다운받아
아래 게시물 참고 하여 JRE폴더에 설치해주시면됩니다.
https://connect2id.com/blog/importing-ca-root-cert-into-jvm-trust-store
정상 설치 확인은 프로그램에서 API 호출하는 방식과 동일하게 아래 주소를 GET방식으로 호출하시고 OK응답오면 정상 설치된 것입니다.
https://test-kapi.kakao.com/test-ca-certificates
(설치후에도 여전히 안된다면, JRE폴더가 다른곳에 있는 경우니 찾아서 추가로 설치하시면됩니다.)
tim.l
#57
토큰 받기 는 인가코드(code)와 redirect_uri, 앱키(client_id), grant_type 이 파라메터로 전달되는데 ‘x-www-form-urlencoded’ 방식으로 전달되야합니다.
예제 참고해서 파라메터 처리부 확인 부탁드려요.
tim.l
#59
음… 파라메터를 jsonInputString 현태로 보내시는 것 같아요.
String param = "grant_type=authorization_code&client_id="+REST_API_KEY+"&redirect_uri="+REDIRECT_URI+"&client_secret="+CLIENT_SECRET+"&code="+code;
이런 형태로 구성하셔서 body data에 전달 하셔야합니다.
[rest api 예제] java (spring boot) - 카카오 로그인, 카카오 친구목록 조회, 나에게 메시지 발송
String param = "grant_type=authorization_code&client_id="+REST_API_KEY+"&redirect_uri="+REDIRECT_URI+"&client_secret="+CLIENT_SECRET+"&code="+code;
String rtn = httpCallService.Call(Const.POST, TOKEN_URI, Const.EMPTY, param);
public String Call(String method, String reqURL, String header, String param) {
String result = "";
try {
String response = "";
URL url = new URL(reqURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod(method);
conn.setRequestProperty("Authorization", header);
if(param != null) {
System.out.println("param : " + param);
conn.setDoOutput(true);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
bw.write(param);
bw.flush();
}
int responseCode = conn.getResponseCode();
System.out.println("responseCode : " + responseCode);
System.out.println("reqURL : " + reqURL);
System.out.println("method : " + method);
System.out.println("Authorization : " + header);
InputStream stream = conn.getErrorStream();
if (stream != null) {
try (Scanner scanner = new Scanner(stream)) {
scanner.useDelimiter("\\Z");
response = scanner.next();
}
System.out.println("error response : " + response);
}
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
while ((line = br.readLine()) != null) {
result += line;
}
System.out.println("response body : " + result);
br.close();
} catch (IOException e) {
return e.getMessage();
}
return result;
}
client_secret은 설정안해도 된다고하는데 빼도 상관없을까요?
빠른 답변 감사합니다.
Call 메소드 보면
위에서
String rtn = httpCallService.Call(Const.POST, TOKEN_URI, Const.EMPTY, param);
위와 같이 호출하던데
header는 null로 보내도 되나요?
그리고 혹시 정상적으로 호출이된다면 rtn에 어떤 값이 출력되나요?
지금은 html소스가 나오는데…
param : grant_type=authorization_code&client_id=a0641350ab6b6afac7ba8fb30d11913f&redirect_uri=http://test1.tirenara.net/test.do&code=GAR6-mwlIyAVNx503kEGOSYNLmhjKceu6tOUiG2u73PlV8LQxkT-NmiwieCv4C1qdM-usgo9cxgAAAF9K8tpUg
responseCode : 200
reqURL : https://kauth.kakao.com/oauth/authorize
method : POST
Authorization : null
response body : <!doctype html> Kakao Account @charset “UTF-8”;.old-style div[data-role=page]{display:none}.old-style div[data-role=page].km-page-active{display:block}.old-style div[data-role=modal]{display:none}.old-style .km-email-recommend{display:none;overflow-y:auto;z-index:100;width:438px;padding:10px 0;margin:0 30px;border:1px solid #b6b6b6;max-height:180px;border-radius…이하생략
Call메소드에서 println 출력 값입니다.
tim.l
#63
reqURL을 인가요청으로 잘못 기재하신듯해요. 토큰요청 주소로 설정해보시겠어요?
https://kauth.kakao.com/oauth/token
토큰요청은 헤더값을 가지고 하는게 없습니다. Content-Type정도 세팅해주시면되는데 request 가 맞다면 생략해도됩니다.
REST API | Kakao Developers 문서
안녕하세요
reqURL과 인증서 설치 완료했습니다.
https://www.tirenara.net/test.do
운영서버 위 url에서 테스트가 가능한데 정상 작동하는지 확인 좀 부탁드립니다.
그리고 최초 접속 시 로그인 유무 확인을 하는데 맞나요?
추가로
- 퍼머링크 발급 받은 후 qr 스캔
- 위 url 접속
- 해당 토큰으로 유저 정보 호출 (카카오)
- 호출 된 정보로 홈페이지 자동 가입 (타이어나라)
위 처럼 프로세스 진행되면 QR로그인 완성되는건가요?
빠진 거 있는지 확인 부탁드립니다
tim.l
#65
네, 접속해보니 토큰 정상 발급되었네요.
토큰으로 사용자 정보조회하여 회원가입 처리 해주시면 될 것 같습니다.
최초 접속 시 로그인 유무 확인을 하는데 맞나요?
네, 맞습니다. (퍼머링크 발급 시, 카카오 톡으로 인증하므로 따로 로그인은 필요 없습니다.)
위 처럼 프로세스 진행되면 QR로그인 완성되는건가요?
네, 맞습니다.
발급받은 퍼머링크로 QR코드 만드셔서 오프라인매장에 부착하시고
오프라인매장 방문자가 핸드폰으로 QR 스캔하면 기재해주신 순서로 가입하게됩니다.
tim.l
#67
카카오싱크로 가입이 구현되면 담당자분이 확인 후, 발급해주시는 것으로 알고 있습니다.
가입까지 구현되면 댓글 주시겠어요?
cc. @anon79681667
지금 상태에서 홈페이지 가입만 시키면 된다는거죠?
다시 회신드리겠습니다.
2개의 좋아요
@tim.l
{
“id”:2001998225,
“connected_at”:“2021-11-22T01:46:24Z”,
“synched_at”:“2021-11-22T01:46:24Z”,
“properties”:{
“nickname”:“타이어나라”
},
“kakao_account”:{
“profile_nickname_needs_agreement”:false,
“profile”:{
“nickname”:“타이어나라”
},
“has_email”:true,
“email_needs_agreement”:false,
“is_email_valid”:true,
“is_email_verified”:true,
“email":"tirenarakorea@naver.com”,
“has_phone_number”:false,
“phone_number_needs_agreement”:false
}
}
질문있습니다.
이름을 유저 정보중에서 이름을 저장 할 때
properties name과 profile name이 차이가 있을까요?
tim.l
#72
properties 항목은 디벨로퍼스앱에 저장된 값으로 ‘사용자 정보 저장하기’ 기능으로 관리합니다.
사용자 정보 저장하기 REST API | Kakao Developers 문서
kakao_account (profile) 항목은 카카오 계정의 실시간 정보이므로 kakao_account >profile> nickname 을 사용하시는 것이 좋을 것 같긴 합니다.
참고 부탁드려요.
@anon79681667
안녕하세요 퍼머링크 발급 부탁드립니다.
https://www.tirenara.net/permalink.do
최초 접속 : 회원가입 후 자동 로그인
이후 접속 : 자동 로그인