J2EE的安全認證機制
實現Web應用程序的安全機制是Web應用程序的設計人員和編程人員必須面對的任務。在J2EE中,Web容器支持應用程序內置的安全機制。
Web應用程序的安全機制有二種組件:認證和授權。基于J2EE的Web容器提供三種類型的認證機制:基本認證、基于表單的認證、相互認證。由于能夠對認證用戶界面進行定制,大多數的Web應用程序都使用基于表單的認證。Web容器使用在Web應用程序的部署描述符中定義的安全角色對應用程序的Web資源的訪問進行授權。
在使用基于表單的認證機制中,應用程序的設計人員和開發人員會遇到3類問題:
·基于表單的認證如何與數據庫和LDAP等其他領域的安全機制協同工作。(這是非常必要的,因為許多組織已經在數據庫和LDAP表單中實現了認證機制。)
·如何在Web應用程序的部署描述符(web.xml)中增加或刪除軍政府的授權角色。
·Web容器在Web資源層次上進行授權;應用程序則需要在單一的Web資源中執行功能層次上的授權。
盡管有許多與基于表單的認證有關的文檔和例子,但都沒有能夠闡明這一問題。因此,大多數的應用程序都以自己的方式襀安全機制。
本篇文章說明了基于表單的認證如何與其他方面的安全機制,尤其是數據庫中的安全機制協作的問題。它還解釋了Web窗口如何使用安全角色執行授權以及應用程序如何擴展這些安全角色,保護Web資源中的功能。
基于表單的認證
基于表單的認證能夠使開發人員定制認證的用戶界面。web.xml的login-config小節定義了認證機制的類型、登錄的URI和錯誤頁面。
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/fail_login.html</form-error-page>
</form-login-config>
</login-config>
登錄表單必須包含輸入用戶姓名和口令的字段,它們必須被分別命名為j_username和j_password,表單將這二個值發送給j_security_check邏輯名字。
下面是一個該表單如何在HTML網頁中實現的例子:
除非所有的連接都是在SSL上實現的,該表單能夠透露用戶名和口令。當受保護的Web資源被訪問時,Web容器就會激活為該資源配置的認證機制。
為了實現Web應用程序的安全,Web容器執行下面的步驟:
1、在受保護的Web資源被訪問時,判斷用戶是否被認證。
2、如果用戶沒有得到認證,則通過重定向到部署描述符中定義的注冊頁面,要求用戶提供安全信任狀。
3、根據為該容器配置的安全領域,確認用戶的信任狀有效。
4、判斷得到認證的用戶是否被授權訪問部署描述符(web.xml)中定義的Web資源。
象基本的安全認證機制那樣,在Web應用程序的部署描述符中,基于表單的認證不指定安全區域。也就是說,它不明確地定義用來認證用戶的安全區域類型,這就會在它使用什么樣的安全區域認證用戶方面引起混淆。
要對用戶進行驗證,Web窗口需要完成下面的步驟:
1、判斷該容器配置的安全區域。
2、使用該安全區域進行認證。
由于數據庫和LDAP在維護信息方面提供了更大的靈活性,因此大多數組織都會希望繼續使用它們維護安全認證和授權信息。
許多Web窗口都支持不同類型的安全區域:數據庫、LDAP和定制區域。例如,在Tomcat Web容器中,server.xml將數據庫配置為其安全區域。
Tomcat的server.xml的<Realm>標志定義了窗口用來識別一個用戶的安全區域的類型。注意,容器對Web應用程序使用該區域,應用程序的認證機制是基于表單的。
Web應用程序的安全機制有二種組件:認證和授權。基于J2EE的Web容器提供三種類型的認證機制:基本認證、基于表單的認證、相互認證。由于能夠對認證用戶界面進行定制,大多數的Web應用程序都使用基于表單的認證。Web容器使用在Web應用程序的部署描述符中定義的安全角色對應用程序的Web資源的訪問進行授權。
在使用基于表單的認證機制中,應用程序的設計人員和開發人員會遇到3類問題:
·基于表單的認證如何與數據庫和LDAP等其他領域的安全機制協同工作。(這是非常必要的,因為許多組織已經在數據庫和LDAP表單中實現了認證機制。)
·如何在Web應用程序的部署描述符(web.xml)中增加或刪除軍政府的授權角色。
·Web容器在Web資源層次上進行授權;應用程序則需要在單一的Web資源中執行功能層次上的授權。
盡管有許多與基于表單的認證有關的文檔和例子,但都沒有能夠闡明這一問題。因此,大多數的應用程序都以自己的方式襀安全機制。
本篇文章說明了基于表單的認證如何與其他方面的安全機制,尤其是數據庫中的安全機制協作的問題。它還解釋了Web窗口如何使用安全角色執行授權以及應用程序如何擴展這些安全角色,保護Web資源中的功能。
基于表單的認證
基于表單的認證能夠使開發人員定制認證的用戶界面。web.xml的login-config小節定義了認證機制的類型、登錄的URI和錯誤頁面。
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/fail_login.html</form-error-page>
</form-login-config>
</login-config>
登錄表單必須包含輸入用戶姓名和口令的字段,它們必須被分別命名為j_username和j_password,表單將這二個值發送給j_security_check邏輯名字。
下面是一個該表單如何在HTML網頁中實現的例子:
| <form method="POST" action="j_security_check"> <input type="text" name="j_username"> <input type="password" name="j_password"> </form> |
除非所有的連接都是在SSL上實現的,該表單能夠透露用戶名和口令。當受保護的Web資源被訪問時,Web容器就會激活為該資源配置的認證機制。
為了實現Web應用程序的安全,Web容器執行下面的步驟:
1、在受保護的Web資源被訪問時,判斷用戶是否被認證。
2、如果用戶沒有得到認證,則通過重定向到部署描述符中定義的注冊頁面,要求用戶提供安全信任狀。
3、根據為該容器配置的安全領域,確認用戶的信任狀有效。
4、判斷得到認證的用戶是否被授權訪問部署描述符(web.xml)中定義的Web資源。
象基本的安全認證機制那樣,在Web應用程序的部署描述符中,基于表單的認證不指定安全區域。也就是說,它不明確地定義用來認證用戶的安全區域類型,這就會在它使用什么樣的安全區域認證用戶方面引起混淆。
要對用戶進行驗證,Web窗口需要完成下面的步驟:
1、判斷該容器配置的安全區域。
2、使用該安全區域進行認證。
由于數據庫和LDAP在維護信息方面提供了更大的靈活性,因此大多數組織都會希望繼續使用它們維護安全認證和授權信息。
許多Web窗口都支持不同類型的安全區域:數據庫、LDAP和定制區域。例如,在Tomcat Web容器中,server.xml將數據庫配置為其安全區域。
| <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" driverName="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@{IPAddress}:{Port}:{Servicename}" connectionName="{DB Username}" connectionPassword="{Password}" userTable="users" userNameCol="username" userCredCol="password" userRoleTable="user_roles" roleNameCol="rolename" /> |
Tomcat的server.xml的<Realm>標志定義了窗口用來識別一個用戶的安全區域的類型。注意,容器對Web應用程序使用該區域,應用程序的認證機制是基于表單的。