2016-05-29 241 views
3

所以我需要創建一個REST API來爲IOS應用程序提供功能。我們允許用戶只用一個普通帳戶註冊或與Facebook/Google登錄註冊。從Google/Facebook帳戶重新驗證用戶

我已經在OAuth的閱讀了最近,我想我明白我怎麼會在我的情況下使用OAuth(當使用的Facebook /谷歌登錄用戶)在我的應用程序註冊一個帳號的過程:

  1. 我註冊我的IOS應用程序與各種社會服務提供商(如FB /谷歌)。我最終得到了我安全地存儲在後端的客戶端ID /客戶端密鑰。
  2. 現在用戶點擊應用上的社交登錄按鈕,然後將用戶重定向到社交網站登錄並授予我的應用使用其社交帳戶的權限。
  3. 社交oauth提供程序將使用授權碼將用戶重定向回我的服務器。
  4. 一旦我的服務器擁有授權碼,我將使用該客戶端ID和祕密(或任何其他需要的特定憑證)從社交oauth提供者檢索訪問令牌。
  5. 現在我有用戶的訪問令牌,並可以使用他們的社交資源一段時間(耶)。
  6. 一旦我擁有了他們的社交訪問令牌,我就會在向我的REST API發出請求時應用程序發出一個生成的訪問令牌(應用程序將只從現在開始與我的REST API進行通信)。

我的問題:

  • 是上面的方法一個好的做法呢?
  • 比方說,用戶從應用程序註銷(而不是從他們的社交帳戶!)。我仍然有他們的社交訪問令牌,但我摧毀了我發給他們的使用我的REST api的另一個令牌。現在用戶回來登錄到我的應用程序使用社交登錄(例如Fb /谷歌)。我將如何重新驗證這些用戶?我知道我不需要用戶再次提供權限,但是我怎麼知道他們是Fb/Google的合法用戶,並且在我的服務器端也有一個帳戶?當成功登錄後,Fb/Google會嚮應用程序提供什麼信息,以便我可以發送回我的服務器,並說:「這個用戶是Fb/Google的合法社交用戶。」在上述註冊程序中,社交oauth提供者將提供授權代碼。在這種情況下我會得到什麼(後續登錄)?

基本上,我需要找到一種方法來重新發出一個訪問令牌到我的REST API在應用程序的FB /谷歌用戶的成功重新記錄。

回答

2

要回答你的問題,

  1. 是上面的方法一個好的做法呢?

是的,這確實是一個很好的做法,你爲什麼要問?您不會將客戶端ID /密碼存儲在移動端,而您只是將其重定向到Oauth身份驗證的社交提供商站點,並且在服務器到服務器之間發生通信,這也被認爲是安全的。

關於第三方提供商的訪問令牌,除非您希望稍後訪問社交提供商的任何資源,您不必存儲任何訪問令牌,即一旦通過身份驗證,就可以放心地丟棄其訪問令牌並生成自己的

對於第二個問題,

您不必擔心,即一旦用戶退出,你只需要撤銷的accessToken由你發出的。

關於Oauth進程,您只需重定向到社交提供者的oauth Flow(而不用擔心用戶是否已登錄),社交提供者會照顧它,您將獲得授權代碼最後,你只需要像第一次一樣處理它。

希望這回答你的問題!

+0

因此,如果我在退出應用程序時撤消其訪問令牌,則需要在他們登錄時再次重複整個oauth進程以檢索新的訪問令牌?如果是這種情況(這很好),是否會提示用戶重新授權我的應用使用他們的社交帳戶? –

+0

好吧,oauth進程一般是,應用程序重定向到社交提供商,提供程序檢查用戶是否登錄,如果不提示登錄,然後檢查您請求的範圍是否已經由用戶授權,如果不提示授權(但我看到有時他們提示已經授權的東西,可能是由於安全原因),然後返回授權代碼或返回錯誤,所以你所要做的就是處理這兩個返回值,中間過程將由社交提供商 –

+0

處理,所以我會當用戶再次嘗試登錄時(即使他們已經授權我的應用程序)仍然會收到另一個授權碼? –