2012-07-19 2 views
0

내 Django 응용 프로그램의 서버 측 인증을 Facebook에 요청했습니다.Facebook에서 반환하는 URL의 액세스 토큰은 어디에 있습니까?

def authenticateViaFacebook(request):     
    ''' 
    Redirects users to a page that allows for Facebook login. 
    ''' 
    consumer = oauth2.Consumer(
     key = settings.FACEBOOK_APP_ID, 
     secret = settings.FACEBOOK_APP_SECRET) 

    # Request token URL for Facebook. 
    request_token_url = "https://www.facebook.com/dialog/oauth/" 

    # Create client. 
    client = oauth2.Client(consumer) 

    # Other arguments to Facebook. 
    otherArguments = 'client_id=' + settings.FACEBOOK_APP_ID 
    otherArguments += '&scope=email' 
    otherArguments += '&redirect_uri=' + settings.SITE_URL 
    otherArguments += 'authenticationRedirect/facebook' 
    otherArguments += '&secret=' + settings.FACEBOOK_APP_SECRET 


    # The OAuth Client request works just like httplib2 for the most part. 
    res, content = client.request(request_token_url, "GET", otherArguments) 

    # Examine the response. 
    return HttpResponse(str(res)) 

Facebook에서이 응답을 받았습니다. 내가 "액세스 토큰"라는 변수가 심지어 auth_signature_methodoauth_signature 같은 이상한 용어를 참조 볼 수 없기 때문에

{'status': '200', 'content-length': '15753', 'x-xss-protection': '0', 
'content-location': u'https://www.facebook.com/dialog/oauth/?oauth_body_hash=1YZMc0vtMcUa5nO81ZkuwoCSct4%3D&oauth_nonce=14826580&oauth_timestamp=1342669603&oauth_consumer_key=117889941688718&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_signature=t2cIAmQYs4r5IqcsoODqorFIHbs%3D', 
'x-content-type-options': 'nosniff', 'transfer-encoding': 'chunked', 
'expires': 'Sat, 01 Jan 2000 00:00:00 GMT', 'connection': 'keep-alive', 
'-content-encoding': 'gzip', 'pragma': 'no-cache', 
'cache-control': 'private, no-cache, no-store, must-revalidate', 
'date': 'Thu, 19 Jul 2012 03:46:44 GMT', 'x-frame-options': 'DENY', 
'content-type': 'text/html; charset=utf-8', 
'x-fb-debug': 'cXSDiq5jL9ZffjalabM6QKEgr50QOhPJsNlHW2MpSSQ='} 

나는 조금 혼란 스러워요, 그러나 나는 그들이 무슨 뜻인지 모르겠어요.

Facebook에서 액세스 토큰을 검색하려면 어떻게해야합니까? 또한이 액세스 토큰을 사용하여 사용자의 "이름"과 같은 기본 정보를 검색하는 방법은 무엇입니까? 액세스 토큰은 문자열 일뿐입니다. 맞습니까?

답변

1

코드에 대해 잘 모릅니다. 하지만 페이 스북 그래프 API를 사용한다면 간단 할 것입니다.

def authorize(self): 

     warnings.filterwarnings('ignore', category=DeprecationWarning) 
     savout = os.dup(1) 
     os.close(1) 
     os.open(os.devnull, os.O_RDWR) 
     try: 
      webbrowser.open(FBOAuth.FACEBOOK_GRAPH_URL+'/oauth/authorize?'+urllib.urlencode(
           {'client_id':FBOAuth.CLIENT_ID, 
           'redirect_uri':FBOAuth.REDIRECT_URI, 
           'scope':'read_stream, publish_stream'})) 
     finally: 
      os.dup2(savout, 1) 

     FBOAuth.SECRET_CODE = raw_input("Secret Code: ") 
     self.save_secret_code(FBOAuth.SECRET_CODE) 

     return FBOAuth.SECRET_CODE 

def access_token(self): 
if not FBOAuth.SECRET_CODE: 
    FBOAuth.SECRET_CODE = self.authorize() 

args = {'redirect_uri': FBOAuth.REDIRECT_URI, 
     'client_id' : FBOAuth.CLIENT_ID, 
     'client_secret':FBOAuth.CLIENT_SECRET, 
     'code':FBOAuth.SECRET_CODE,} 

access_token = urllib.urlopen(FBOAuth.FACEBOOK_GRAPH_URL + "/oauth/access_token?" + urllib.urlencode(args)).read() 
access_token = urlparse.parse_qs(access_token) 
FBOAuth.ACCESS_TOKEN = access_token['access_token'][0] 
self.save_access_token(FBOAuth.ACCESS_TOKEN) 
return FBOAuth.ACCESS_TOKEN 

그리고이 두 가지 기능을 통해 액세스 토큰을 얻을 수 있습니다. Here은 내가 사용한 튜토리얼의 링크입니다. 참조 용으로 Facebook graph api documents

0

대부분의 인증 프로세스와 마찬가지로 앱 ID를 전달하고 '코드'를 반환합니다. 두 번째 "GET"에서는 access_token을 전송합니다. HMAC에있는 결과를 해독해야합니다. SDK를 사용하여 다른 사람이 권장 한대로 이러한 기능을 관리하면 더 쉽게 사용할 수 있습니다.

"auth_signature_method"는 암호화 된 서명이 서명 된 방식을 의미합니다. Facebook에서 사용자 데이터를 쿼리하는 데 사용할 수있는 최종 액세스 기록이 아닙니다.

0

코드는 여러 가지 방법으로 잘못되었습니다. 주로 사용자가 트랜잭션에 참여하도록해야한다는 것을 잊었습니다.

다음 단계를 수행하려면 https://developers.facebook.com/docs/authentication/server-side/을 참조하십시오. 실제로는 매우 간단하며 모두 컬을 사용하여 직접 수행 할 수 있습니다.

관련 문제