2011-11-28 71 views
0

我打算使用$facebook->getAccessToken(),但查看代碼時,如果它無法從getUserAccessToken()返回結果,它似乎會爲用戶提供應用程序訪問令牌(通過getApplicationAccessToken())。如果我是對的,那意味着在某些情況下,將來自getAccessToken()的訪問令牌傳遞給用戶可能會返回API密鑰。如何安全地向用戶提供帶有PHP SDK的access_token?

如何安全地獲取訪問令牌?

回答

0

您可以使用getUser()確保您在返回訪問令牌之前擁有當前用戶會話。 編輯:正如評論中所提到的,似乎這不適用於Facebook的PHP客戶端功能。用戶的Cookie可以包含他們的用戶ID,但也可以包含無效的(過期的)code。 PHP客戶端將嘗試將code交換爲用戶訪問令牌並失敗。所以getUser()將返回一個用戶ID,而getAccessToken()將返回一個應用訪問令牌。 getUser()不是檢查有效用戶訪問令牌的有效方法。

如果您想要特別小心:Facebook應用令牌的所有形式爲<app id>|<some hash, possibly your secret>。您可以確保您返回的訪問令牌不具有以下格式:

$token = $fb->getAccessToken(); 
$tokenParts = explode('|', $token, 2); 
if ($tokenParts[0] != <your_app_id>) { 
    return $token; 
} else { 
    return null; 
} 
+0

我發現即使會話信息無效,getUser有時也會返回我的用戶ID。 –

+0

我最近也注意到了這一點。我不確定您是否發現相同:JS客戶端可以將signed_request放入包含有效用戶標識但包含無效「代碼」(在此流程中交換用戶訪問令牌所需的東西)的cookie中, 。看起來就像FB客戶端處理這個問題一樣。 – bismark

+0

我想我會考慮這個錯誤。我不小心將客戶機密泄漏給任何有過期會話的人。幸運的是,我可以重置它(我做到了),但現在有這個getuser問題。 *嘆*至少我的應用程序的工作正常,如果會議很好。 –

相關問題