Facebook OAuth를 통한 인증 처리 - Mimul's Developer World
Facebook OAuth를 통한 인증 처리 - Mimul's Developer World:
Facebook OAuth를 통한 인증 처리
이번에는 Open Graph의 OAuth를 통해 Facebook의 이용자 인증 처리 하는 로직을 테스트한 내용을 공유합니다.
1. 개요
- Facebook은 FB Connect라는 API 와 Open Graph의 OAuth를 통해 Facebook의 이용자 인증 처리를 대행할 수 있다.
- FB Connect 보다 OAuth를 통해 Facebook의 이용자 인증 처리가 도 안정적이라는 설(?)이 있다. 믿거나 말거나 ^^
2. 관련 표준 설명(OAuth 1.0a 와는 다른 OAuth 2.0을 적용함 - 트위터와는 또 다름)
- 참조 사이트 : http://developers.facebook.com/docs/authentication/
- 사전 작업(Facebook 어플 등록을 통해 키 발급)
-> 등록 사이트 : http://www.facebook.com/developers/createapp.php
-> 확인 정보 : application id, api_key, application secret
- code값 요청(apps에대한 검증 코드 값)
-> 요청 정보 : https://graph.facebook.com/oauth/authorize? client_id="등록한 application id"&redirect_uri="code 값을 받을 callback url"&scope=publish_stream,offline_access,user_about_me,read_friendlists
-> 응답 정보 : code 값이 넘어옴.
-> redirect_uri 는 app 등록할 때에 입력했던 url과 domain이 같아야함. 안그러면 error남
-> scope는 허가 받을 사용자의 정보 종류
- code 값을 통한 session key 요청
-> 요청 정보 : https://graph.facebook.com/oauth/access_token? client_id=""&redirect_uri=""&client_secret="등록한 application secret"&code="code 값 요청을 통해 return 받은 값"
-> 응답 정보 : access_token값이 넘어옴.
-> 이 access_token값을 가지고 facebook 고객 정보, Stream 정보 등 scope 을 가져올 수 있음
3. 관련 샘플 소스
- 참조 오픈 소스 : RestFB - http://restfb.com/(access_token을 가지고 개인 정보 등을 가져올 수 있음)
- 샘플 소스
4. 데모 사이트
- http://mimul.com/rpx/oauth
[관련 포스트]
[참조 사이트]
1. 개요
- Facebook은 FB Connect라는 API 와 Open Graph의 OAuth를 통해 Facebook의 이용자 인증 처리를 대행할 수 있다.
- FB Connect 보다 OAuth를 통해 Facebook의 이용자 인증 처리가 도 안정적이라는 설(?)이 있다. 믿거나 말거나 ^^
2. 관련 표준 설명(OAuth 1.0a 와는 다른 OAuth 2.0을 적용함 - 트위터와는 또 다름)
- 참조 사이트 : http://developers.facebook.com/docs/authentication/
- 사전 작업(Facebook 어플 등록을 통해 키 발급)
-> 등록 사이트 : http://www.facebook.com/developers/createapp.php
-> 확인 정보 : application id, api_key, application secret
- code값 요청(apps에대한 검증 코드 값)
-> 요청 정보 : https://graph.facebook.com/oauth/authorize? client_id="등록한 application id"&redirect_uri="code 값을 받을 callback url"&scope=publish_stream,offline_access,user_about_me,read_friendlists
-> 응답 정보 : code 값이 넘어옴.
-> redirect_uri 는 app 등록할 때에 입력했던 url과 domain이 같아야함. 안그러면 error남
-> scope는 허가 받을 사용자의 정보 종류
- code 값을 통한 session key 요청
-> 요청 정보 : https://graph.facebook.com/oauth/access_token? client_id=""&redirect_uri=""&client_secret="등록한 application secret"&code="code 값 요청을 통해 return 받은 값"
-> 응답 정보 : access_token값이 넘어옴.
-> 이 access_token값을 가지고 facebook 고객 정보, Stream 정보 등 scope 을 가져올 수 있음
3. 관련 샘플 소스
- 참조 오픈 소스 : RestFB - http://restfb.com/(access_token을 가지고 개인 정보 등을 가져올 수 있음)
- 샘플 소스
public void service(RequestContext rc) throws IOException {
code = StringUtils.defaultIfEmpty(request.getParameter("code"), "");
if (StringUtils.isEmpty(code)) {
loginURL = getLoginRedirectURL();
response.sendRedirect(loginURL);
return;
} else {
authURL = getAuthURL(code);
connector = SimpleHttpConnector.getDefault();
r = connector.doGET(authURL, (Map<?,?>)null);
if (r != null && r.getStatus() == 200) {
accessToken = readUrl(r.getInputStream()).split("&")[0]
.replaceFirst("access_token=", "");
log.warn("access_token=" + accessToken);
}
}
public static String getLoginRedirectURL() {
String login = null;
try {
login = "https://graph.facebook.com/oauth/authorize?
client_id=" +
client_id + "&display=page&redirect_uri=" +
URLEncoder.encode(redirect_uri, "utf-8") + "&scope=" +
ArrayUtil.delimitObjectsToString(",", perms);
} catch (Exception e) {
e.printStackTrace();
log.error(e);
}
return login;
}
public static String getAuthURL(String authCode) {
String auth = null;
try {
auth = "https://graph.facebook.com/oauth/access_token?
client_id=" +
client_id + "&redirect_uri=" + URLEncoder.encode(redirect_uri, "utf-8") +
"&client_secret=" +
secret + "&code=" + authCode;
} catch (Exception e) {
e.printStackTrace();
log.error(e);
}
return auth;
}
protected String readUrl(InputStream is) throws IOException
{
StringBuffer response = null;
BufferedReader in = null;
String inputLine = null;
try {
if (is == null)
return "";
response = new StringBuffer(300);
in = new BufferedReader(new InputStreamReader(is));
while ((inputLine = in.readLine()) != null)
response.append(inputLine);
log.error("readUrl:" + response.toString());
} catch (Exception e) {
e.printStackTrace();
log.error(e);
} finally {
if (in != null)
in.close();
}
return response.toString();
}4. 데모 사이트
- http://mimul.com/rpx/oauth
[관련 포스트]
[참조 사이트]
댓글