2012-03-29 57 views
13

我目前正在開發一個在JBoss AS 7上運行的項目,該項目需要各種來源的身份驗證。我試圖理解提供認證的各種組件。瞭解Java應用服務器中的身份驗證

我有一些假設/猜測如何這一切都適合在一起,但我需要確保我的理解是正確的。所以下面是我所瞭解的JBoss AS7的認證過程。


你有一個安全域,定義用戶如何進行身份驗證。這個領域然後暴露給您的應用程序,以確保其中的一部分或全部。在AS7中,在<子系統中配置xmlns =「urn:jboss:domain:security:1.0」>元素。

該領域可以配置爲使用登錄模塊(如數據庫,LDAP,本地文件或其他)對各種來源的用戶進行身份驗證。可以定義多個登錄模塊,並且可以指定登錄模塊的某些組合必須「成功」才能進行身份驗證。

實際的用戶名和密碼通過在web.xml文件(對於servlet)中定義的機制傳遞,在<登錄配置>元素中定義。


假設上述處理是正確的(並且可能沒有):

  • 是否像JAAS的規範下這整個認證過程掉落,或是JAAS的只是一個小的或可選部分這個程序?
  • 所有類型的<認證方法>的(即BASIC,DIGEST和FORM)可以與各種登錄模塊一起工作嗎? This page似乎不建議,但我還沒有看到任何明確的文檔匹配<登錄模塊>選項<登錄配置>選項。
  • 從登錄-config來登錄模塊的用戶名和密碼的流動似乎直線前進足夠的,但像OpenID的OAuth的或在有中間步驟(如重定向到外部登錄頁)系統會發生什麼?
  • Seam 3 Security,Apache ShiroSpring Security這樣的項目如何適合這張照片?
+0

要跟蹤Yves的回答,您可以在這裏找到更多關於Apache Shiro的信息:http://shiro.apache.org如果遇到任何問題,請隨時發佈到列表。 – Chunsaker 2012-05-10 00:45:32

回答

11

JavaEE安全性規範爲容器實現者留下了很多空間,所以我將專注於JBoss實現來回答。

JBoss的安全實施

的JBoss依靠JAAS認證來實現JavaEE的安全性。這樣就可以從穩定的API中獲益,並且可以使用existing LoginModule implementations。登錄模塊用於驗證主題,但也可以將角色添加到Subject。 JAAS提供了授權機制,權限檢查和JBoss在內部使用它。

JAAS LoginModule不僅支持基於密碼的認證,還支持基於令牌的認證。

基於令牌的認證

的什麼可以在JBoss的感謝JAAS做一個很好的例子是HTTP Negotiation support for Kerberos SPNEGO:額外auth-method名爲SPNEGO實現得益於Tomcat的身份驗證和令牌驗證使用JavaSE standard Kerberos LoginModule

順便說一下,LoginModule API不是必需的,它對於某些協議甚至可能太複雜。例如,支持OpenID with PicketLink的實現只使用Servlet API。

第三方安全庫

這些庫通常提供的安全層來運行的JavaEE或純Java方面的應用,即使不採取從的JavaEE規範認證或基於角色的授權收益。

Spring Security爲應用程序開發人員提供了除JavaEE安全性之外的其他抽象,以實現身份驗證和授權,主要歸功於涉及Web應用程序時的ServletFilter。有大量的選擇可用於保護他的應用程序:可以混合多個選項,如:JAAS使用,JavaEE容器安全性使用或Spring Security特定實現(OpenID和OAuth的情況)。 JavaEE沒有依賴關係,因此在JavaSE上運行時幾乎可以用於任何情況。大多數架構師都選擇在Spring Security上構建應用程序安全性,以便將來可以自由切換特定的實現。

Apache Shiro與Spring Security非常相似,但它更年輕,可能更容易設置。

Seam安全性不依賴於JavaEE安全性或JBoss,而僅依賴於Servlet和JSF API。這顯然是基於JSF/Seam的Web應用程序最簡單的選擇。在幕後,它使用PicketLink實現。

作爲結論,使用第三方庫或替代JavaEE安全性的問題取決於架構選擇:應用程序複雜性,供應商獨立性和可移植性,對錯誤修復或改進實現的控制。在您的具體情況下,擁有多個驗證來源需要靈活的解決方案,如支持authentication provider chaining(或Shiro)的Spring Security。