<< Facebook 로그인 기능 구현(FB Connect) | Home | Xstream의 PermGen Space - OutOfMemory 현상 해결 방안 >>

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을 가지고 개인 정보 등을 가져올 수 있음)
 - 샘플 소스
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

[관련 포스트]

[참조 사이트]


Avatar: 은숙

Re: Facebook OAuth를 통한 인증 처리

안녕하세요~페이스북 연동을 개발하려고 하는데

많은 도움이 되었습니다~

질문이 있는데요..액세스 토큰까지는 얻었지만

이 토큰을 통해 사용자 id 정보를 어떻게 얻을수있는지 궁금하구..

또 혹시 글쓰기까지 구현하셨나요?

 

Avatar: 미물

Re: Facebook OAuth를 통한 인증 처리

http://restfb.com/ 라이브러리를 사용하셔서 access_token으로 ㅠ객의 정보를 가져올 수있구요. 라이브러리 사용안하시면 api를 통해 가져올 수 있고 글발행도 api를 통해 할수 있고 restfb를 통해 할수 있어요.

Re: Facebook OAuth를 통한 인증 처리

dialog 팝업에서 allow , don't allow 라고 나오는데 저는 allow, leave app 버튼이 나타납니다. don't allow라는 버튼이 나오게하려면 어떻게 해야할까요?
Avatar: 미물

Re: Facebook OAuth를 통한 인증 처리

cancel_url 널이면 그렇게 나옵니다. 실패 URL을 넣어 주세요.

Re: Facebook OAuth를 통한 인증 처리

안녕하세요.

access_token 을 구할때 redirect_uri 을 넣어서  url 을 호출하였는데

해당 redirect_uri 으로  돌아오지 않고 html 형식으로 access_token= ㅇㅇㅇ

나오는데요.. java 에서 HttpClient함수를 사용해 해당 url 을 호출했는데도 불구하고

400 에러가 나오고 있는 상황인데.. 자바에서 access_token 을 얻으려면

어떤 함수를 이용해  값을 얻을수있을까요?

Avatar: 미물

Re: Facebook OAuth를 통한 인증 처리

access_token은 GET방식으로 조회하셔야 합니다. redirect되는건 아닙니다.

Re: Facebook OAuth를 통한 인증 처리

안녕하세요! 안드로이드에서 페이스북 연동하고 있는데요 제 친구들의 친구들 목록을 구하고 싶은데, 그럼 제 친구들의  access token을 알아내야 하는 것 아닌가요?...........어떻게 알아낼 수가 있을까요...

Avatar: 김태준

Re: Facebook OAuth를 통한 인증 처리

 C++ 로 개발된 프로그램에서 Facebook 인증을 이용하려는데요.

C++ 내에서 띄운 웹 컨트롤을 통해 Facebook 로긴 페이지를 띄우고

로그인을 한후에 이 로그인한후 결과(access_token 맞나요?) 를 얻어오는 작업을 하려는데

REST 라이브러리 이용해서 가능할까요?

 

 

 

 


Add a comment Send a TrackBack