2014-03-24 140 views
5

我已經在家中的Wildfly服務器上部署了大約10個Spring-MVC項目。這些項目已經運行了一段時間,並一直是私人的。多個春季項目,共享認證

但是我的一些朋友請求訪問,我願意把它給他們。我正在計劃通過使用AngularJS構建Web應用程序來完成此任務。此應用程序將通過調用RESTful端點與Spring-MVC項目進行通信。但是有些人可能有權訪問一部分服務。我希望人們註冊並使用這些詳細信息登錄,或使用OpenID登錄。

這導致必須向這些項目添加驗證和授權。 Spring Security可以做到這一點。但是我不想在每個服務中實現這個邏輯。

是否有可能創建額外的服務,讓別人登錄或註冊此服務?並讓其他服務使用此服務檢查身份驗證狀態?

其中彈簧安全安全模型將是明智的使用(OAuth的1.0的OAuth 2.0,基本身份驗證等)?

是否有替代方法來實現我的要求?

回答

4

通常的解決方案是將所有服務器放在通用的身份驗證代理之後,爲用戶提供一個通用的登錄頁面。身份驗證代理通過將用戶名和密碼與在LDAP或數據庫表中註冊的值或通過OpenId進行比較來檢查用戶的身份。

如果認證成功,代理將啓動redireting用戶請求到服務器,用戶被認證。

從代理到後端服務器轉發的每個請求攜帶含有證明該重定向請求從代理來的確是應用程序憑據預認證報頭,而且它不是一個僞造的請求。

每個Spring應用程序都設置爲不提供登錄頁面,而是檢查預認證頭。這是設置Pre-Authentication的Spring文檔。

看一看這個example整合與SiteMinder身份驗證代理。

該解決方案的核心是用戶不直接請求到高端服務器,這一切都通過你的情況需要支持OpenID代理。

0

由於所有應用程序都在同一臺服務器上運行,你可以使用常規的基於服務器的Java EE安全可能與春季安全一些協調。

0

CAS認證似乎是一個有效的選擇,而且也由Spring officially支持的樣本。 CAS聲稱:「CAS支持CAS1,CAS2和SAML協議,允許簡單的單點登錄以及n層委託認證。「另一個優勢是不同的平臺CAS支持,萬一你將建立非Java春等其他應用:

  • Apache HTTP服務器
  • Drupal的
  • IIS
  • 的Java
  • PAM
  • PHP
  • Perl
  • PL/SQL
  • 紅寶石
  • .NET