REST API의 로그인 Protocol을 준수하면 어떤 language, platform에서도 authorization code 및 access token을 얻을 수 있습니다.
다음은 Java 의 http관련 client들을 통해 access token을 얻는 간단한 예시입니다.
- HttpsURLConnection(HttpURLConnection) 이용한 방법.
final String AUTH_HOST = "https://kauth.kakao.com";
final String tokenRequestUrl = AUTH_HOST + "/oauth/token";
String CLIENT_ID = "[REST API Key]"; // 해당 앱의 REST API KEY 정보. 개발자 웹사이트의 대쉬보드에서 확인 가능
String REDIRECT_URI = "[Redirect uri]"; // 해당 앱의 설정된 uri. 개발자 웹사이트의 대쉬보드에서 확인 및 설정 가능
String code = "[Authorized code]"; // 로그인 과정중 얻은 authorization code 값
HttpsURLConnection conn = null;
OutputStreamWriter writer = null;
BufferedReader reader = null;
InputStreamReader isr= null;
try {
final String params = String.format("grant_type=authorization_code&client_id=%s&redirect_uri=%s&code=%s",
CLIENT_ID, REDIRECT_URI, code);
final URL url = new URL(tokenRequestUrl);
conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(params);
writer.flush();
final int responseCode = conn.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + tokenRequestUrl);
System.out.println("Post parameters : " + params);
System.out.println("Response Code : " + responseCode);
isr = new InputStreamReader(conn.getInputStream());
reader = new BufferedReader(isr);
final StringBuffer buffer = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
System.out.println(buffer.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
// clear resources
if (writer != null) {
try {
writer.close();
} catch(Exception ignore) {
}
}
if (reader != null) {
try {
reader.close();
} catch(Exception ignore) {
}
}
if (isr != null) {
try {
isr.close();
} catch(Exception ignore) {
}
}
}
- Apache HttpClient 라이브러리를 이용한 방법.
final String AUTH_HOST = "https://kauth.kakao.com";
final String tokenRequestUrl = AUTH_HOST + "/oauth/token";
String CLIENT_ID = "[REST API Key]"; // 해당 앱의 REST API KEY 정보. 개발자 웹사이트의 대쉬보드에서 확인 가능
String REDIRECT_URI = "[Redirect uri]"; // 해당 앱의 설정된 uri. 개발자 웹사이트의 대쉬보드에서 확인 및 설정 가능
String code = "[Authorize code]"; // 로그인 과정중 얻은 authorization code 값
final List<NameValuePair> postParams = new ArrayList<NameValuePair>();
postParams.add(new BasicNameValuePair("grant_type", "authorization_code"));
postParams.add(new BasicNameValuePair("client_id", CLIENT_ID));
postParams.add(new BasicNameValuePair("redirect_uri", REDIRECT_URI));
postParams.add(new BasicNameValuePair("code", code));
final HttpClient client = HttpClientBuilder.create().build();
final HttpPost post = new HttpPost(tokenRequestUrl);
// add header
//post.setHeader("", "");
BufferedReader rd = null;
InputStreamReader isr = null;
try {
post.setEntity(new UrlEncodedFormEntity(postParams));
final HttpResponse response = client.execute(post);
final int responseCode = response.getStatusLine().getStatusCode();
System.out.println("\nSending 'POST' request to URL : " + tokenRequestUrl);
System.out.println("Post parameters : " + postParams);
System.out.println("Response Code : " + responseCode);
isr = new InputStreamReader(response.getEntity().getContent());
rd = new BufferedReader(isr);
final StringBuffer buffer = new StringBuffer();
String line;
while ((line = rd.readLine()) != null) {
buffer.append(line);
}
System.out.println(buffer.toString());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// clear resources
if (rd != null) {
try {
rd.close();
} catch(Exception ignore) {
}
}
if (isr != null) {
try {
isr.close();
} catch(Exception ignore) {
}
}
}