- 相關(guān)推薦
J2EE的安全認證機制
Web應用程序的安全機制有二種組件:認證和授權;贘2EE的Web容器提供三種類(lèi)型的認證機制:基本認證、基于表單的認證、相互認證。由于能夠對認證用戶(hù)界面進(jìn)行定制,大多數的Web應用程序都使用基于表單的認證。Web容器使用在Web應用程序的部署描述符中定義的安全角色對應用程序的Web資源的訪(fǎng)問(wèn)進(jìn)行授權。
在使用基于表單的認證機制中,應用程序的設計人員和開(kāi)發(fā)人員會(huì )遇到3類(lèi)問(wèn)題:
基于表單的認證如何與數據庫和LDAP等其他領(lǐng)域的安全機制協(xié)同工作。(這是非常必要的,因為許多組織已經(jīng)在數據庫和LDAP表單中實(shí)現了認證機制。)
如何在Web應用程序的部署描述符(web.xml)中增加或刪除授權角色。
Web容器在Web資源層次上進(jìn)行授權;應用程序則需要在單一的Web資源中執行功能層次上的授權。
盡管有許多與基于表單的認證有關(guān)的文檔和例子,但都沒(méi)有能夠闡明這一問(wèn)題。因此,大多數的應用程序都以自己的方式襀安全機制。
本篇文章說(shuō)明了基于表單的認證如何與其他方面的安全機制,尤其是數據庫中的安全機制協(xié)作的問(wèn)題。它還解釋了Web窗口如何使用安全角色執行授權以及應用程序如何擴展這些安全角色,保護Web資源中的功能。
基于表單的認證
基于表單的認證能夠使開(kāi)發(fā)人員定制認證的用戶(hù)界面。web.xml的login-config小節定義了認證機制的類(lèi)型、登錄的URI和錯誤頁(yè)面。
FORM
/login.jsp
/fail_login.html
登錄表單必須包含輸入用戶(hù)姓名和口令的字段,它們必須被分別命名為j_username和j_password,表單將這二個(gè)值發(fā)送給j_security_check邏輯名字。
下面是一個(gè)該表單如何在HTML網(wǎng)頁(yè)中實(shí)現的例子:
除非所有的連接都是在SSL上實(shí)現的,該表單能夠透露用戶(hù)名和口令。當受保護的Web資源被訪(fǎng)問(wèn)時(shí),Web容器就會(huì )激活為該資源配置的認證機制。
為了實(shí)現Web應用程序的安全,Web容器執行下面的步驟:
在受保護的Web資源被訪(fǎng)問(wèn)時(shí),判斷用戶(hù)是否被認證。
如果用戶(hù)沒(méi)有得到認證,則通過(guò)重定向到部署描述符中定義的注冊頁(yè)面,要求用戶(hù)提供安全信任狀。
根據為該容器配置的安全領(lǐng)域,確認用戶(hù)的信任狀有效。
判斷得到認證的用戶(hù)是否被授權訪(fǎng)問(wèn)部署描述符(web.xml)中定義的Web資源。
象基本的安全認證機制那樣,在Web應用程序的部署描述符中,基于表單的認證不指定安全區域。也就是說(shuō),它不明確地定義用來(lái)認證用戶(hù)的安全區域類(lèi)型,這就會(huì )在它使用什么樣的安全區域認證用戶(hù)方面引起混淆。
要對用戶(hù)進(jìn)行驗證,Web窗口需要完成下面的步驟:
判斷該容器配置的安全區域。
使用該安全區域進(jìn)行認證。
由于數據庫和LDAP在維護信息方面提供了更大的靈活性,因此大多數組織都會(huì )希望繼續使用它們維護安全認證和授權信息。
許多Web窗口都支持不同類(lèi)型的安全區域:數據庫、LDAP和定制區域。例如,在Tomcat Web容器中,server.xml將數據庫配置為其安全區域。
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的標志定義了窗口用來(lái)識別一個(gè)用戶(hù)的安全區域的類(lèi)型。注意,容器對Web應用程序使用該區域,應用程序的認證機制是基于表單的。
授權
一旦用戶(hù)被識別后,容器就會(huì )得到認證用戶(hù)的安全角色,看用戶(hù)是否屬于在部署描述符中的標志中定義的安全角色之一。如果用戶(hù)不屬于任何一個(gè)安全角色,則容器會(huì )返回一個(gè)錯誤。
部署描述符(web.xml)的標志定義了被保護的Web資源和能夠訪(fǎng)問(wèn)這些資源的安全角色清單。
AdminPages
accessible by authorised users
/admin/*
GET
These are the roles who have access
manager
Web窗口在網(wǎng)頁(yè)層次上執行認證。然而,商業(yè)性應用程序可能還希望對一個(gè)網(wǎng)頁(yè)內的功能進(jìn)行認證,這會(huì )要求在應用程序中定義一些新的附加的與應用程序有關(guān)的安全角色。為了控制對功能的訪(fǎng)問(wèn),應用程序需要理解角色的權限概念。Web容器標準沒(méi)有解決權限的問(wèn)題。
由于授權角色是動(dòng)態(tài)的,開(kāi)發(fā)人員常常會(huì )感到迷惑,即這些安全角色是否需要添加到部署描述符中。為了使應用程序充分利用安全支持,Web容器只需要在部署描述符中定義的一個(gè)角色。因此,應用程序可以定義一個(gè)高層次的角色,然后將所有的用戶(hù)都指派給該角色。這將使該角色中的所有用戶(hù)都擁有能夠訪(fǎng)問(wèn)Web資源的權限。
另外,應用程序還可以定義額外的角色,執行對一種Web資源中較低層次的功能的授權。由于應用程序已經(jīng)配置有一個(gè)包含應用程序中所有用戶(hù)的高層次安全角色,這些低層次的安全角色也就不需要在部署描述符中進(jìn)行定義。這使得Web應用程序能夠利用容器的授權支持,實(shí)現與指定應用程序有關(guān)的授權。
我們可以在部署描述符中為所有用戶(hù)定義一個(gè)高層次的管理員角色,保護管理類(lèi)Web資源,這使得管理員角色中的所有用戶(hù)都能夠訪(fǎng)問(wèn)管理網(wǎng)頁(yè)。為了控制管理網(wǎng)頁(yè)中的其他功能,我們可以在應用程序中創(chuàng )建 sysadmin或appadmin等新的角色。
應用程序可以對這些安全角色進(jìn)行擴展,使它們擁有一定的權限。然后,應用程序可以使用這些權限來(lái)控制對其功能的訪(fǎng)問(wèn)。
盡管與特定應用程序相關(guān)的安全角色不是定義在部署描述符中的,這些角色仍然可以在isUserInRole方法中使用,判斷用戶(hù)是否在這些安全角色中。
優(yōu)點(diǎn)
Web應用程序無(wú)需實(shí)現認證機制,簡(jiǎn)化Web應用程序的配置。
Web應用程序能夠使用getRemoteUser、IsUserInRole和getUserPrincipal方法實(shí)現有規劃的安全。
Web應用程序能夠將認證信息傳播給EJB容器。
在Tomcat中配置數據庫安全區域
1. 創(chuàng )建用戶(hù)表。
該數據庫表需要有username和password二個(gè)字段。
create table users (username varchar(20) not null, password(20) not null)
2. 創(chuàng )建角色表
該表維護著(zhù)應用程序中角色的清單,它僅僅有rolename一個(gè)字段。
create table roles (rolename varchar(20) not null)
3. 創(chuàng )建用戶(hù)-角色關(guān)聯(lián)表
該表維護著(zhù)一個(gè)用戶(hù)和各個(gè)角色之間的關(guān)聯(lián),一個(gè)用戶(hù)可以屬于一個(gè)或多個(gè)角色。
create table user_roles (username varchar(20) not null, rolename varchar(20) not null)
4. 在表中插入數據
insert into users values('user1', 'password')
insert into role values('manager')
insert into user_roles values('user1', 'manager')
5. 通過(guò)將下面的信息拷貝到{tomcat}\conf\文件夾的server.xml文件中,配置Tomcat。(本例使用了薄客戶(hù)端驅動(dòng)程序,Tomcat使用內存區域作為缺省的安全區域,我們使用基于數據庫的安全區域)
debug="99"
driverName="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@{IP address}:{Port}:{Servicename}"
connectionName="{DB Username}"
connectionPassword="{Password}"
userTable="users"
userNameCol="username"
userCredCol="password"
userRoleTable="user_roles"
roleNameCol="rolename"
/>
用環(huán)境變量替換下面的值:
{IP Address} ━━數據庫服務(wù)器的IP地址
{Port} ━━端口號
{Servicename} ━━服務(wù)名字
{DB Username} ━━數據庫登錄
{Password} ━━數據庫登錄的口令
6. 將Oracle的薄客戶(hù)機驅動(dòng)程序JAR文件或數據庫的JDBC驅動(dòng)程序拷貝到{tomcat_home}/server/lib目錄中。
7. 用下面的安全約束配置Web應用程序的部署描述符
Protected Area
/*
DELETE
GET
POST
PUT
manager
NONE
FORM
Example Form-Based Authentication Area
/jsp/login.jsp
/jsp/error.jsp
需要注意的是,中的值應當是用戶(hù)-角色關(guān)聯(lián)表中中角色之一。
在Tomcat中配置例子文件
使用上面介紹的命令配置Tomcat。
打包你的工程,并將它拷貝到Tomcat的webapps目錄。
啟動(dòng)Tomcat服務(wù)器
打開(kāi)一個(gè)瀏覽器,輸入下面的地址:http://localhost:8080/useProjectName/index.jsp
輸入用戶(hù)名和口令。
在WebLogic中配置數據庫安全區域
配置Web應用程序的部署描述符,這一過(guò)程與在Tomcat中配置非常相似。Tomcat和WebLogic的配置描述符之間的一個(gè)差別是,WebLogic配置描述符要求下面的小節,而Tomcat不需要下面的小節:
Manager security role
manager
結論
通過(guò)本篇文章,讀者應該會(huì )對基于表單的認證、以及它如何與數據庫安全區域配合進(jìn)行認證有個(gè)比較深刻的認識。Web應用程序能夠利用基于表單的認證機制,保護它的資源,同時(shí)允許使用以前的安全認證機制。
【J2EE的安全認證機制】相關(guān)文章:
2016年J2EE認證試題(附答案)08-16
2016年J2EE認證測試題及答案09-27
JAVA認證基礎知識:基于反射機制的服務(wù)代理調用09-20
2016年JAVA認證基礎知識:基于反射機制的服務(wù)代理調用08-21
什么是J2EE07-05
j2ee介紹07-22
J2EE的概念08-23
ccna安全認證考試指南07-12
思科認證網(wǎng)絡(luò )工程師CCNA安全認證考試大綱08-22
Adobe認證技術(shù)認證內容08-21