我試圖讓Facebook C#SDK與offline_access和控制檯應用程序一起工作。控制檯應用程序和擴展權限offline_access工作流程
從我明白,我必須:
- 詢問權威性的offline_access - 這很容易。
- 獲得由FB返回「代碼」,當用戶授權offline_access
- 使用ExchangeCodeForAccessToken每次
我無法弄清楚如何抓住在代碼中得到有效的訪問令牌( 2)雖然?
感謝
我試圖讓Facebook C#SDK與offline_access和控制檯應用程序一起工作。控制檯應用程序和擴展權限offline_access工作流程
從我明白,我必須:
我無法弄清楚如何抓住在代碼中得到有效的訪問令牌( 2)雖然?
感謝
獲取「代碼」和換取令牌代碼是你,如果你在一個服務器端的工作流程做認證通常做。在你的情況下,它可能會有點鯡魚。有更簡單的方法直接獲取訪問令牌。
這將有助於有更多的內容(包括代碼)展示你是如何得到offline_access(JavaScript的,服務器端OAuth,...?)
當你通過的JavaScript SDK,讓offline_access這在我意見提供最佳的用戶體驗,您將獲得訪問令牌早在從Facebook迴應:
FB.login(function (response) {
if (response.session) {
if (response.perms) {
var accesstoken = response.session.access_token;
// do something with the token...save it, use it, etc.
} else {
// re-prompt for permissions
}
}
}, { perms: 'offline_access' });
一旦你擁有了它在JavaScript,你可以將它填滿到一個隱藏的表單字段,把它放在一個ajax帖子你的服務器,或其他。
請注意,根據我的經驗,實際上您並不需要保存的用戶訪問令牌來爲所有api方法執行脫機API調用。在某些情況下,您可以使用應用程序訪問令牌,如果您擁有offline_access和其他必需的權限,則Facebook會讓它飛行。他們在上週發佈了一篇開發人員博客文章,聲明您需要一個令牌來處理以前不需要的api調用,因此可能會發生變化。
另外請注意,這些標記可能會變壞。例如,如果用戶更改其Facebook帳戶密碼,則會使所有訪問令牌失效。因此,最好測試它們,捕獲OAuth異常,並且有一種方法可以讓用戶注意重新提示權限並獲取新的訪問令牌。
在用戶授予您「offline_access」權限後,Facebook將用「code」查詢字符串參數將用戶重定向到您的應用程序URL。你需要抓住這個「code」查詢字符串參數。
然後,使用此「代碼」值創建另一個WebRequest以獲取訪問令牌。使用下面的網址發出請求:
https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&client_secret={2}&code={3}
提供WebResponse可以分析如下:
NameValueCollection qs = HttpUtility.ParseQueryString(response);
token = qs["access_token"];
您需要堅持在數據庫中的令牌在控制檯應用程序中使用。