簡體   English   中英

使用oAuth進行移動應用程序的RESTful Web服務

[英]RESTful web service using oAuth for mobile application

我正在構建一個由兩個主要部分組成的應用程序:

  1. 帶有rest API的Web應用程序。
  2. 移動應用程序(android,iPhone)。

Web應用程序有一個數據庫,用於存儲有關用戶的數據(如帖子,事件和類似內容)。
Mobile應用程序使用Web應用程序的REST api來訪問該數據,但為此,我需要某種身份驗證(用戶必須對自身進行身份驗證才能訪問/修改其數據)。

我知道這可以通過移動應用程序在Web api的每個請求中提供用戶名和密碼的方式輕松完成,並且Web應用程序在提供請求之前針對數據庫驗證該用戶名和密碼。
但是,我想使用oAuth(因此用戶可以使用Google,Facebook等登錄),這就是事情變得復雜的地方,我不確定這樣做的最佳方法是什么。

我的第一個想法是 :移動應用程序將oAuth提供程序(例如Facebook)憑據(用戶名和密碼)發送到Web應用程序,然后Web應用程序對oAuth提供程序進行身份驗證。 我很快意識到這是不行的,因為這意味着用戶必須信任您的網站不要濫用給定的憑據,所以這不是它的方式。 不好

我的第二個想法是 :移動應用程序使用Web應用程序api告訴Web應用程序它要對oAuth提供者P進行身份驗證.Web應用程序重定向到用戶輸入其憑據的提供者P. 然后,提供者P重定向回用戶登錄的Web應用程序,並將有關成功登錄的JSON發送到移動應用程序。 如果不是用戶必須手動輸入其憑據的部分,這將是很好的。 我實現了這個解決方案,問題是,在移動應用程序訪問Web應用程序后,api JSON不會立即返回,但首先重定向完成,這會讓一切都搞砸。 我正在考慮在移動應用程序中使用webView,但我不知道如何在發送JSON時從webView返回。 我不確定我是否應該進一步追求這個想法,或者這是錯誤的做法? 如果一些問題得到解決可能會很好

我的第三個想法 :移動應用程序直接針對oAuth提供商P進行身份驗證。如果成功,則移動應用程序向包含用戶信息的Web應用程序(例如userId或用戶密碼)發送請求,以便Web應用程序知道它是哪個用戶。 但是,這意味着Web應用程序必須信任給定用戶真正經過身份驗證的移動應用程序。 這意味着Web應用程序需要確保從移動應用程序訪問api。 我可以通過在移動應用程序中硬編碼特殊密碼(秘密)來做到這一點,該密碼隨每個請求一起發送,以證明請求是由移動應用程序發送的。
這種方法的不好的一面是我必須針對(移動OS,oAuth提供商)的每個組合針對oAuth提供商實施移動應用認證。 我也不確定它有多安全。 你認為這是一個很好的方法,我可以改進/改變什么? 我有一種感覺,我錯過了一些東西。 這可能很好,但需要做很多工作

請告訴我什么是最好的想法,如果有任何方法可以改善它們,謝謝

經過一些進一步的研究並與我的一些同事交談后,我認為最好的選擇是第二個想法 我決定使用WebView處理重定向(它存在於iPhone和Android上)。 WebView我將以這樣的方式配置,當用戶被重定向回到返回JSON的Web應用程序上的特定URL時,它會自動退出。
我認為這是最好的主意,因為這樣我只需要在移動應用程序上實現/配置WebView,而所有oAuth邏輯都在Web應用程序上完成,這意味着移動應用程序(Android,iPhone)之間的代碼重復次數更少,而且更多可擴展(我必須修改一個Web應用程序,而不是2或3個移動應用程序)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM