2012-01-27 206 views
0

類似this closed question,但我會讓我的更精確,所以希望就會有一個答案:)Facebook的服務器端身份驗證與經典ASP

我加入Facebook登錄按鈕,一個網站,一切都在經典ASP,我是Facebook SDK/API的新手,https://developers.facebook.com/docs/authentication在PHP中提供了它的所有代碼示例。我需要通過一些COM函數將一些FB用戶信息傳遞給服務器的數據庫,所以我將使用服務器端身份驗證。到現在爲止還挺好。服務器端身份驗證不給我直接訪問令牌雖然它給了我一個代碼,我大多瞭解如何將其轉換成訪問令牌中的PHP示例,

$token_url = "https://graph.facebook.com/oauth/access_token?" 
    . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) 
    . "&client_secret=" . $app_secret . "&code=" . $code; 
$response = @file_get_contents($token_url); 
$params = null; 
parse_str($response, $params); 
$graph_url = "https://graph.facebook.com/me?access_token=" 
    . $params['access_token']; 
$user = json_decode(file_get_contents($graph_url)); 

我真的不知道ASP/VBScript的方式來做任何上述。 PHP有比ASP那麼多的內置功能,如urlencodefile_get_contents,一個parse_str這是足夠聰明,像對待查詢參數的字符串,我甚至不知道如果我想需要一個像json_decode或沒有什麼!

對於的file_get_contents我想嘗試像

fbApiCode = Request.QueryString("code") 
    if len(fbApiCode) > 0 then 
     set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP") 
     appAuth = "https://graph.facebook.com/oauth/access_token?client_id=" & _ 
      Application("fbAppId") & "&redirect_uri=" & Application("fbRedirectUri") & "&client_secret=" _ 
      Application("fbAppSecret") & "&code=" & fbApiCode 
     xmlHttp.open("GET", appAuth, false) ' or post? 
     accessResponse = xmlHttp.responseText 

這甚至接近正確的做法還是我跑下來一個兔子洞?如果我不能用VBScript將代碼翻譯成訪問令牌,那麼我將不得不使用JavaScript與FB.getLoginStatus()來獲取FB用戶的信息(姓名,電子郵件等),然後用AJAX將其發送到我的服務器,我知道是不是非常安全,所以我想避免訴諸這一點。

+0

什麼類型的web應用程序的這是什麼?頁面標籤應用程序?畫布應用程序?一個獨立的網站? – DMCS 2012-01-28 00:01:16

+3

「人們仍然使用經典的ASP?」是。 – Dee 2012-01-28 20:29:50

+0

獨立網站,其自己的註冊/登錄,我需要與Facebook登錄集成。允許新老用戶使用Facebook登錄是我們計劃使用的唯一Facebook API功能。 (是的,這是很多遺留代碼;直到現在,一些控制reg/login的代碼自2004年以後不需要任何更改!) – 2012-01-30 14:04:03

回答

1

我知道這是一個古老的線程,但這種解決方案可以幫助別人。

您需要申請使用該代碼的令牌,然後請求與令牌的用戶信息。

<script language="javascript" runat="server"> 
"use strict"; 
function getJSON(strOrObject){ 
    if (typeof strOrObject == "string") { 
     return eval("(" + strOrObject + ")"); 
    } 
    return strOrObject; 
} 
</script> 
<% 
fbClientToken = [[CLIENTTOKEN]] 
fbAppID = [[APPID]] 
fbAppSecret = [[APPSECRET]] 

fbAuthURL = "https://www.facebook.com/dialog/oauth" 
fbTokenURL = "https://graph.facebook.com/v2.3/oauth/access_token" 
fbOAuthCallback = [[CALLBACKURL]] 
fbScope = "public_profile,email" 
if request("go")="login" then 
    Randomize 
    nonce = Rnd 
    response.redirect fbAuthURL & "?response_type=code&client_id=" & fbAppID & "&redirect_uri=" & Server.URLEncode(fbOAuthCallback) & "&scope=" & fbScope & "&state=" & nonce 
else 
    if request("code") <> "" then  
     information = "client_id=" & fbAppID & "&redirect_uri=" & Server.URLEncode(fbOAuthCallback) & "&client_secret=" & fbAppSecret & "&code=" & request("code") 
     Set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP") 
     xmlhttp.Open "GET", fbTokenURL & "?" & information, false 
     xmlhttp.setRequestHeader "Content-Type","application/x-www-form-urlencoded" 
     xmlhttp.send   
     respText = xmlhttp.ResponseText  
     if InStr(respText,"access_token") then 
      dim respJSON : set respJSON = getJSON(respText) 
      getURL = "https://graph.facebook.com/me?access_token=" & respJSON.access_token 
      xmlhttp.Open "GET", getURL, false 
      xmlhttp.setRequestHeader "Content-Type","application/x-www-form-urlencoded" 
      xmlhttp.send 
      respToken = xmlhttp.ResponseText 
      %><h1>Token Inspection Response</h1><% 
      if InStr(respToken,"{") and InStr(respToken,"}") then 
       dim userJSON : set userJSON = getJSON(respToken) 
       response.write "<br/>ID: " & userJSON.id 
       response.write "<br/>email: " & userJSON.email 
       response.write "<br/>first_name: " & userJSON.first_name 
       response.write "<br/>last_name: " & userJSON.last_name 
       response.write "<br/>name: " & userJSON.name 
       response.write "<br/>gender: " & userJSON.gender 
       response.write "<br/>locale: " & userJSON.locale 
       response.write "<br/>verified: " & userJSON.verified 
       response.write "<br/>link: " & userJSON.link 
       response.write "<br/>timezone: " & userJSON.timezone 
      else 
       %><h1>Invalid Inspection Response</h1><%=respToken%><% 
      end if   
     else 
      %><h1>Invalid Response</h1><%=respText%><% 
     end if 
    end if 
end if 
%> 
相關問題