1

我有一個使用OAuth2進行身份驗證的API。這工作正常,我可以使用'密碼'授予類型讓用戶使用他們的用戶名和密碼存儲在我的應用程序獲得訪問令牌。使用Facebook登錄與我的OAuth2 API

現在事情變得有點棘手。我想有一個iOS應用程序可以與此API交談。沒有問題,用戶可以提供我的用戶名和密碼,我可以爲他們提供訪問令牌。

但我希望能夠使用Facebook登錄,以允許用戶註冊並登錄到我的API。

我的問題是:

  1. 至於我可以告訴大家,iOS的SDK爲Facebook將提供給我一個訪問令牌和用戶的配置文件ID。我如何處理這些信息?應該如何存儲這些信息以及常規的「用戶名和密碼」用戶?
  2. 什麼是iOS應用程序和我的服務器之間的登錄流程,從用戶在他們的iOS設備上登錄到Facebook並獲取訪問令牌給我的API?

語言無特定的答案將是偉大的!

感謝

回答

2

沒有什麼在OAuth2流程,以支持賬戶協會的,所以你就必須這樣建立自己。

您必須登錄FB,從它們獲取令牌,調用userinfo端點,然後將用戶信息存儲在數據庫中,以便FB中的特定用戶與您帳戶數據庫中的用戶相對應。

解決這一問題最優雅的方式是創建一個橋樑您的用戶帳戶數據庫和FB,讓您的應用程序只有一個服務交互的中介服務:

Your app -> Identity Service -+-> Your user account 
           | 
           +-> FB 

這是一個大量的工作,但(我知道,因爲這實質上就是我們建造的,而且不是微不足道的)。

無論如何,您的API可能必須繼續使用您的令牌。

這裏的the article we wrote on account linking可能會激勵你實現類似的東西。但是,正如我所說,這是自定義的,不是協議的一部分。

+0

好吧,這是有道理的。我應該使用哪種OAuth授權類型來針對Facebook用戶的API進行身份驗證? –

+0

我認爲FB只支持authZ代碼流和隱式。如果服務器是處理authN的服務器,則可以使用authZ代碼(因爲您可以安全地將祕密存儲在後端中)。如果這一切都是由客戶驅動的,那麼用隱式流程可能會更好。 –

3

什麼:

  1. 獲取FB-AT和FB-ID的客戶端(與SSO應用程序或通過重定向Web視圖)
  2. 請求YOURAPI-AT從YOURAPI-AuthenticationServer與FB-ID和FB-AT
  3. YOURAPI-AuthenticationServer檢查FB-ID和FB-AT的有效性對FB-AuthenticationServer
  4. 如果正常,YOURAPI-AuthenticationServer返回YOURAPI-AT(和任選的YOURAPI-RefreshToken)

現在你可以使用YOURAPI-AT來訪問你的API :)並且可以選擇YOURAPI-RT來刷新AT,所以你不需要一直去FB。

+1

聽起來不錯,但它會是一個自定義授權類型。我想這很好,因爲OAuth2從來不是爲了解決這個問題,我仍然可以讓其他授權類型(隱式等)可供第三方開發人員代表其他用戶訪問我的API。 –