9

我正在爲一組REST風格的Web應用程序的用戶使用內部認證系統。我們的意圖是,用戶應該能夠通過Web表單登錄一次,並且可以適當地訪問我們域中的所有這些RESTful應用程序,這些應用程序可能分佈在許多服務器上的私有云中。 (我明白已經有一個單一的認證會話不符合純粹的REST風格的方法,但這是一個可用性要求。)如何使用OpenID或OAuth進行內部第一方認證?

應用程序本身將用各種編程語言編寫,所以語言中立的方法是需要。據我所知,我們可能會使用OpenID或OAuth或類似的框架來處理身份驗證,但我的理解是,這些服務旨在用於第三方服務,而不是用於在我們的內部系統上共享數據的第一方服務。在這種情況下,我們可能會將所有其他應用程序視爲第三方(或依賴方)的中央提供商服務。

問題:

  1. 是否適合認證中的第一方服務的OpenID/OAuth的?
  2. 如果是這樣,建議如何爲此用例設置身份驗證?
  3. 用戶是否必須授予他們想要使用的每個第一方服務器的個人權限,就像他們需要向任何第三方服務器授予個人權限一樣?我認爲這會違反訪問所有第一方服務的單點登錄要求。
  4. 有支持這個第一方用例的站點的好例子嗎?
  5. 對於這個第一方用例,什麼是一個好的替代框架?

回答

7

您不需要OAuth進行SSO服務。

如您所知,OAuth的主要用途/優勢是授予對第三方應用程序的訪問權限,以受控方式訪問/使用您的資源。

您不需要擁有OAuth所需的認證/授權服務器,爲什麼不在所有API中使用單一登錄服務。 OAuth訪問令牌與您需要的完全不同。

據我所知,您可以擁有的東西就像OAuth一樣,您的服務器將令牌分發給應用程序。 (我假設它是一個完全內部的系統,所以令牌不能被濫用)。

所以基本上我建議的是:

  1. 當應用程序試圖訪問它重定向到一個網絡的形式第一API。
  2. 用戶輸入憑證並帶到數據庫進行驗證。讓服務爲用戶/應用程序生成令牌
  3. 下一個API訪問請求將使用該令牌進行 - 令牌可以唯一標識應用程序
  4. 根據您需要的安全級別,您可以簽署一些文本使用HMAC並將其作爲令牌發送,或者其完全內部僅爲應用/用戶生成唯一標識符並將其發送給其他API在收到令牌後,每個服務首先使用令牌調用主服務器,並在內部獲取相應的客戶/用戶ID並執行所需的功能。

簡而言之,將登錄+令牌生成+令牌驗證分爲不同的模塊。所有API都應該使用此模塊進行登錄/令牌驗證。

我在這裏提出的工作方式與OAuth類似,但是因爲您希望在私有云中使用它,所以所有安全方面都已被剝離。

+0

感謝您的確認。很高興知道我沒有在OAuth或其他第三方框架中遺漏明顯的東西。 – Richard 2013-05-13 14:24:38

1

Oauth支持多種不同類型的流程。您可以使用Oauth 2.0中的客戶端crendentials流程來避免要求用戶授予每個應用程序的權限(這適用於您控制服務器和應用程序的情況,或者您想要預先授權某些應用程序的情況)。這篇文章很好地解釋了一切:http://tatiyants.com/using-oauth-to-protect-internal-rest-api/

相關問題