2011-05-30 31 views
0

我試圖讓Facebook C#SDK與offline_access和控制檯應用程序一起工作。控制檯應用程序和擴展權限offline_access工作流程

從我明白,我必須:

  1. 詢問權威性的offline_access - 這很容易。
  2. 獲得由FB返回「代碼」,當用戶授權offline_access
  3. 使用ExchangeCodeForAccessToken每次

我無法弄清楚如何抓住在代碼中得到有效的訪問令牌( 2)雖然?

感謝

回答

0

獲取「代碼」和換取令牌代碼是你,如果你在一個服務器端的工作流程做認證通常做。在你的情況下,它可能會有點鯡魚。有更簡單的方法直接獲取訪問令牌。

這將有助於有更多的內容(包括代碼)展示你是如何得到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異常,並且有一種方法可以讓用戶注意重新提示權限並獲取新的訪問令牌。

0

在用戶授予您「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"]; 

您需要堅持在數據庫中的令牌在控制檯應用程序中使用。

相關問題