J2EE

當前位置 /首頁/IT認證/J2EE/列表

J2EE的安全認證機制

Web應用程式的安全機制有二種元件:認證和授權。基於J2EE的Web容器提供三種類型的認證機制:基本認證、基於表單的認證、相互認證。由於能夠對認證使用者介面進行定製,大多數的Web應用程式都使用基於表單的認證。Web容器使用在Web應用程式的部署描述符中定義的安全形色對應用程式的Web資源的訪問進行授權。

J2EE的安全認證機制

在使用基於表單的認證機制中,應用程式的設計人員和開發人員會遇到3類問題:

基於表單的認證如何與資料庫和LDAP等其他領域的安全機制協同工作。(這是非常必要的,因為許多組織已經在資料庫和LDAP表單中實現了認證機制。)

如何在Web應用程式的部署描述符()中增加或刪除授權角色。

Web容器在Web資源層次上進行授權;應用程式則需要在單一的Web資源中執行功能層次上的授權。

儘管有許多與基於表單的認證有關的文件和例子,但都沒有能夠闡明這一問題。因此,大多數的應用程式都以自己的方式襀安全機制。

本篇文章說明了基於表單的認證如何與其他方面的安全機制,尤其是資料庫中的安全機制協作的問題。它還解釋了Web視窗如何使用安全形色執行授權以及應用程式如何擴充套件這些安全形色,保護Web資源中的功能。

  基於表單的認證

基於表單的認證能夠使開發人員定製認證的使用者介面。的login-config小節定義了認證機制的型別、登入的URI和錯誤頁面。

FORM

/

/fail_

登入表單必須包含輸入使用者姓名和口令的欄位,它們必須被分別命名為j_username和j_password,表單將這二個值傳送給j_security_check邏輯名字。

下面是一個該表單如何在HTML網頁中實現的例子:

除非所有的連線都是在SSL上實現的,該表單能夠透露使用者名稱和口令。當受保護的Web資源被訪問時,Web容器就會啟用為該資源配置的認證機制。

為了實現Web應用程式的安全,Web容器執行下面的步驟:

在受保護的Web資源被訪問時,判斷使用者是否被認證。

如果使用者沒有得到認證,則通過重定向到部署描述符中定義的註冊頁面,要求使用者提供安全信任狀。

根據為該容器配置的安全領域,確認使用者的信任狀有效。

判斷得到認證的使用者是否被授權訪問部署描述符()中定義的Web資源。

象基本的安全認證機制那樣,在Web應用程式的部署描述符中,基於表單的認證不指定安全區域。也就是說,它不明確地定義用來認證使用者的安全區域型別,這就會在它使用什麼樣的安全區域認證使用者方面引起混淆。

要對使用者進行驗證,Web視窗需要完成下面的步驟:

判斷該容器配置的安全區域。

使用該安全區域進行認證。

由於資料庫和LDAP在維護資訊方面提供了更大的靈活性,因此大多陣列織都會希望繼續使用它們維護安全認證和授權資訊。

許多Web視窗都支援不同型別的安全區域:資料庫、LDAP和定製區域。例如,在Tomcat Web容器中,將資料庫配置為其安全區域。

debug="99"

driverName="leDriver"

connectionURL="jdbc:oracle:thin:@{IPAddress}:{Port}:{Servicename}"

connectionName="{DB Username}"

connectionPassword="{Password}"

userTable="users"

userNameCol="username"

userCredCol="password"

userRoleTable="user_roles"

roleNameCol="rolename" />

Tomcat的的`標誌定義了視窗用來識別一個使用者的安全區域的型別。注意,容器對Web應用程式使用該區域,應用程式的認證機制是基於表單的。

  授權

一旦使用者被識別後,容器就會得到認證使用者的安全形色,看使用者是否屬於在部署描述符中的標誌中定義的安全形色之一。如果使用者不屬於任何一個安全形色,則容器會返回一個錯誤。

部署描述符()的標誌定義了被保護的Web資源和能夠訪問這些資源的安全形色清單。

AdminPages

accessible by authorised users

/admin/*

GET

These are the roles who have access

manager

Web視窗在網頁層次上執行認證。然而,商業性應用程式可能還希望對一個網頁內的功能進行認證,這會要求在應用程式中定義一些新的附加的與應用程式有關的安全形色。為了控制對功能的訪問,應用程式需要理解角色的許可權概念。Web容器標準沒有解決許可權的問題。

由於授權角色是動態的,開發人員常常會感到迷惑,即這些安全形色是否需要新增到部署描述符中。為了使應用程式充分利用安全支援,Web容器只需要在部署描述符中定義的一個角色。因此,應用程式可以定義一個高層次的角色,然後將所有的使用者都指派給該角色。這將使該角色中的所有使用者都擁有能夠訪問Web資源的許可權。

另外,應用程式還可以定義額外的角色,執行對一種Web資源中較低層次的功能的授權。由於應用程式已經配置有一個包含應用程式中所有使用者的高層次安全形色,這些低層次的安全形色也就不需要在部署描述符中進行定義。這使得Web應用程式能夠利用容器的授權支援,實現與指定應用程式有關的授權。

我們可以在部署描述符中為所有使用者定義一個高層次的管理員角色,保護管理類Web資源,這使得管理員角色中的所有使用者都能夠訪問管理網頁。為了控制管理網頁中的其他功能,我們可以在應用程式中建立 sysadmin或appadmin等新的角色。

應用程式可以對這些安全形色進行擴充套件,使它們擁有一定的許可權。然後,應用程式可以使用這些許可權來控制對其功能的訪問。

儘管與特定應用程式相關的安全形色不是定義在部署描述符中的,這些角色仍然可以在isUserInRole方法中使用,判斷使用者是否在這些安全形色中。

  優點

Web應用程式無需實現認證機制,簡化Web應用程式的配置。

Web應用程式能夠使用getRemoteUser、IsUserInRole和getUserPrincipal方法實現有規劃的安全。

Web應用程式能夠將認證資訊傳播給EJB容器。

在Tomcat中配置資料庫安全區域

1. 建立使用者表。

該資料庫表需要有username和password二個欄位。

create table users (username varchar(20) not null, password(20) not null)

2. 建立角色表

該表維護著應用程式中角色的清單,它僅僅有rolename一個欄位。

create table roles (rolename varchar(20) not null)

3. 建立使用者-角色關聯表

該表維護著一個使用者和各個角色之間的關聯,一個使用者可以屬於一個或多個角色。

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. 通過將下面的資訊拷貝到{tomcat}conf資料夾的檔案中,配置Tomcat。(本例使用了薄客戶端驅動程式,Tomcat使用記憶體區域作為預設的安全區域,我們使用基於資料庫的安全區域)

debug="99"

driverName="leDriver"

connectionURL="jdbc:oracle:thin:@{IP address}:{Port}:{Servicename}"

connectionName="{DB Username}"

connectionPassword="{Password}"

userTable="users"

userNameCol="username"

userCredCol="password"

userRoleTable="user_roles"

roleNameCol="rolename"

/>

用環境變數替換下面的值:

{IP Address} ━━資料庫伺服器的IP地址

{Port} ━━埠號

{Servicename} ━━服務名字

{DB Username} ━━資料庫登入

{Password} ━━資料庫登入的口令

6. 將Oracle的薄客戶機驅動程式JAR檔案或資料庫的JDBC驅動程式拷貝到{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

需要注意的是,中的值應當是使用者-角色關聯表中中角色之一。

在Tomcat中配置例子檔案

使用上面介紹的命令配置Tomcat。

打包你的工程,並將它拷貝到Tomcat的webapps目錄。

啟動Tomcat伺服器

開啟一個瀏覽器,輸入下面的地址:http://localhost:8080/useProjectName/

輸入使用者名稱和口令。

在WebLogic中配置資料庫安全區域

配置Web應用程式的部署描述符,這一過程與在Tomcat中配置非常相似。Tomcat和WebLogic的配置描述符之間的一個差別是,WebLogic配置描述符要求下面的小節,而Tomcat不需要下面的小節:

Manager security role

manager

  結論

通過本篇文章,讀者應該會對基於表單的認證、以及它如何與資料庫安全區域配合進行認證有個比較深刻的認識。Web應用程式能夠利用基於表單的認證機制,保護它的資源,同時允許使用以前的安全認證機制。

TAG標籤:J2EE 機制 #