2014-01-18 94 views
0

我正在使用BackboneJS構建一個消息傳遞應用程序,該應用程序使用REST接口自然存在。基於用戶限制REST API結果

我遇到的問題是,我不知道如何限制用戶可以拉什麼數據從API回來。例如,對/消息的調用目前將爲所有用戶返回消息。我希望該資源只返回屬於當前用戶的消息。

網上搜索似乎表明的OAuth2是解決這一問題的最佳途徑,但所有的教程談論被重定向到另一個地方,以確認訪問和檢索訪問令牌。

鑑於我的用戶將已經登錄到消息應用程序,並且REST API實際上是同一應用程序的一部分,我不喜歡讓用戶確認我的應用程序可以訪問我自己的API 。

有沒有更好的方法?

+0

這是節點項目嗎? –

+0

你真的應該在你的服務器端進行管理。服務器應該能夠管理會話,並查看誰應該能夠看到什麼。 –

+0

@JonathanMiles不,它是常規的,PHP在客戶端運行在Apache上的Backbone – michael

回答

1

的oauth2可能是你最好的選擇 - 你肯定不希望推出自己的安全。然而,你想到的oAuth2的味道可能不是你想要的。

的oauth2有四個不同的口味,被稱爲授權授予類型:

  1. 授權代碼:這是你思考的類型。它通常被稱爲三腳oAuth,因爲在令牌授予過程中有三個角色(應用程序,資源所有者和用戶)。該應用程序詢問用戶資源所有者是否可以提供對資源的特定訪問類型。這是一個相當複雜的過程,它允許驗證用戶憑據而不允許應用程序訪問它們。這不是必要的,因爲你既是應用程序又是資源所有者。

  2. 客戶端證書:這是授權與服務器的客戶端應用程序的方法。它根本不使用用戶憑證。如果您完全信任您的客戶端應用程序(所有客戶端應用程序),並且不會將其他用戶的數據暴露給使用該應用程序的用戶,或者您僅通過API提供非用戶數據(例如,地圖數據或目錄數據),您可能可以使用這種相當簡單的oAuth2類型。但是,如果您希望保護用戶數據的警惕性(並且不允許應用程序在用戶未提供憑據的情況下訪問數據),則可能不會使用此數據。

  3. 資源所有者密碼憑證:用戶名和用戶密碼通過HTTPS傳送到後臺服務器,其認證以及通過提供一個訪問令牌授權訪問。訪問令牌隨後可以在每次調用時傳遞,並且在訪問後端之前它仍然有效,直到經過可配置的時間段。這意味着攔截令牌的人只能在有限的時間內(通常是幾分鐘)成功使用該令牌。攔截器不會知道用戶的用戶名和密碼。此外,您可以爲應用程序提供刷新令牌,刷新令牌可用於在新過期之後獲取新的訪問令牌(直到刷新令牌過期 - 通常過期日期會更長)。由於證書不是經常通過線路傳遞(並且只能通過加密傳遞),所以這通常是保護用戶證書並且不要求用戶經常傳遞(良好的用戶體驗)的最佳解決方案。實現比授權代碼授予類型簡單得多。

  4. 隱:這是最安全的方法 - 無憑證被驗證服務器端的。這通常用於無法安全存儲憑據的客戶端腳本語言。如果您擔心安全問題,請儘量避免使用此類安全措施。

因此,檢出OAuth 2.0,並查找資源所有者密碼憑據授權類型。

+0

好吧,我想我明白了不同之處。我需要做的是直接使用客戶端用戶名和密碼從API請求訪問令牌。 API使用壽命較短的訪問令牌和壽命較長的刷新令牌進行響應。訪問令牌用於識別用戶的請求,刷新令牌用於在訪問令牌到期時重新生成訪問令牌? 你說不要推出自己的?即使我遵循oAuth2協議編寫自己的類是不是一件壞事? – michael

+0

聽起來像你已經想通了。當我說不要推出自己的,我的意思是不設計自己的身份驗證協議。實現oAuth2你自己很好。祝你好運! –