簡體   English   中英

Restful API-檢查Facebook訪問令牌是否有效並被授權使用APP

[英]Restful API - Check if Facebook access token is valid and authorized to use APP

我正在構建一個寧靜的API(PHP)以為iOS和Android應用程序提供服務,我想在這兩個應用程序上實現facebook登錄。

缺陷如下:

  • 客戶端(iOS或Android)使用Facebook登錄,並將access_token發送到Restful API
  • 驗證access_token是否被授權使用該應用程序
  • 如果令牌有效,請從圖形獲取用戶數據。
  • 合並帳戶並為不同的查詢生成令牌。

為了安全起見,避免獲得不屬於我的APP的隨機令牌,我想進行一次測試調用以檢查令牌是否經過授權和有效?

我知道可能已經回答了許多類似的問題,但是沒有一個問題能給我正確的答案,而且我對Facebook圖形沒有真正的經驗。

我找到了這個解決方案:

https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=SECRET_APP_ID&grant_type=fb_exchange_token&fb_exchange_token=ACCESS_TOKEN

這以某種方式起作用..它是否給我一個錯誤,還是一個訪問令牌(字符串格式不是JSON),我不確定這是否是測試的最佳方法。

注意:我仍處於開發的早期階段,如果您對我的流程有任何建議,請告訴我,我做事的方式可能不正確?

適用於我的應用程序的代碼(下面解釋的代碼)...

$fb = new Facebook\Facebook([
'app_id' => 'XXXXXXX',
  'app_secret' => 'XXXXXXX',
  'default_graph_version' => 'v2.5',
]);

// My app pulls users' access tokens & page ID from a database here and stores in $fb_access_token & $fb_page_id variables
$fb_access_token = 'YOU OR YOUR USERS ACCESS TOKEN GOES HERE';
$fb_page_id = 'ID OF FACEBOOK PAGE OR USER'; 

$fb->setDefaultAccessToken($fb_access_token);

// CHECK IF ACCESS TOKEN SITLL WORKS
try{
$page = $fb->get('/'.$fb_page_id.'?fields=id', $fb_access_token);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
$graphError = 'Yes';
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
$sdkError = 'Yes';
}

// IF ACCESS TOKEN STILL WORKS...CONTINUE WITH SCRIPT. THIS PREVENTS ACCESS TOKEN FAILURE FROM BREAKING SCRIPT.
if(!isset($graphError) && !isset($sdkError)){
// CONTINUE WITH SCRIPT
}

說明:您正在使用有問題的訪問令牌,並試圖向Facebook API發出GET請求。 如果沒有錯誤,請僅繼續執行腳本的其余部分。

您還可以在最后添加一條ELSE語句,以將用戶重定向到一個頁面,在該頁面上,用戶可以根據自己的應用程序對帳戶/訪問令牌進行重新身份驗證。

我的應用程序使用了兩個WHILE循環來遍歷我的用戶數據庫,並根據某些列/單元格的值,將其發布到他們的Facebook頁面中...

在此解決方案之前……當循環遇到無效的訪問令牌時,它“中斷”並且未執行“未經身份驗證的用戶”之后的行的腳本,因為它發出了失敗的請求。

希望這對某人有幫助!

無論如何,“隨機”令牌將無法工作。 (Facebook發行的令牌是經過加密的,因此API可以告訴您令牌是真實的,還是僅僅是“隨機的”。至多,您需要擔心用戶可能將令牌用於其他應用程序,或者他們會使用哪種令牌。自己授予的權限比您要求的要多。)

只需使用您獲得的訪問令牌請求用戶詳細信息-如果由於有人試圖“偽造”訪問令牌而無效,則該API響應將告訴您。

該文檔有一章關於保護API請求的章節,也請檢查一下: https : //developers.facebook.com/docs/graph-api/securing-requests

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM