Java EE 連接器安全

Java™ 2 Platform Enterprise Edition (Java EE) 連接器架構定義標準架構,用來將 J2EE 連接至異質企業資訊系統 (EIS)。 EIS 範例包括企業資源規劃 (ERP)、大型電腦交易處理 (TP) 和資料庫系統。

連接器架構使 EIS 供應商能夠提供其 EIS 的標準資源配接器。 資源配接器是 Java 應用程式用來連接 EIS 的系統層次軟體驅動程式。 資源配接器插在應用程式伺服器中,負責在 EIS、應用程式伺服器和企業應用程式之間提供網路功能。 在 EIS 中存取資訊通常需要存取控制來防止未獲授權的存取。 J2EE 應用程式必須在 EIS 中進行鑑別才能開啟連線。

J2EE 2 連接器安全架構的設計是為了延伸 J2EE 型應用程式的端對端安全模型,以便包括與 EIS 環境的整合。 應用程式伺服器和 EIS 會協同作業,來確保資源主體可以正確地鑑別。該主體建立基礎 EIS 連線。 連接器架構會將下列機制識別為常態支援的鑑別機制,不過,也可以定義其他機制:
  • BasicPassword:EIS 專用的基礎使用者密碼型鑑別機制
  • [AIX Solaris HP-UX Linux Windows][IBM i]Kerbv5: Kerberos 第 5 版型鑑別機制

應用程式會在部署描述子的 resource-ref 元素中,定義使用應用程式管理的登入,或使用儲存器管理的登入。 每一個資源參照元素說明單一 Connection Factory 參照連結。 resource-ref 元素中的 res-auth 元素,其值為 ApplicationContainer,它指出 Enterprise Bean 程式碼是否能夠執行登入,或應用程式伺服器是否能夠利用主體對映配置來登入資源管理程式。 resource-ref 元素通常是在組合應用程式時,利用組合工具來定義。 在部署時,也可以定義或重新定義 resource-ref

應用程式管理的登入

如果要存取 EIS 系統,應用程式會從「Java 命名和目錄介面 (JNDI)」名稱空間尋找 Connection Factory ,並對該 Connection Factory 物件呼叫 getConnection 方法。 getConnection 方法可能需要使用者 ID 和密碼引數。 J2EE 應用程式可以將使用者 ID 和密碼傳入 getConnection 方法,後者再接著將資訊傳遞至資源配接器。 不過,在應用程式碼中指定使用者 ID 和密碼可能會影響到安全性。

使用者 ID 和密碼 (如果已編碼在 Java 原始碼中) 可供組織中的開發人員和測試人員使用。 此外,如果使用者將 Java 類別解編,則使用者可以看到使用者 ID 和密碼。

在變更使用者 ID 和密碼之前,需要先變更程式碼。 另外,應用程式碼可從持續性儲存庫或外部服務中擷取使用者 ID 和密碼集合。 這種方式需要 IT 管理者使用應用程式專用機制來配置及管理使用者 ID 和密碼。

為了存取這個鑑別資料,應用程式伺服器支援在資源上指定元件管理的鑑別別名。 這項鑑別資料是資源的所有參照的共同資料。 按一下 資源 > 資源配接器 > J2C Connection Factory > configuration_name。 選取「使用元件管理的鑑別別名」。

如果 res-auth=Application,就會依下列次序,從下列元素取得鑑別資料:
  1. 傳遞給 getConnection 方法的使用者 ID 及密碼
  2. 在 Connection Factory 或資料來源中的元件管理的鑑別別名
  3. 資料來源中的自訂內容使用者名稱及密碼

使用者名稱和密碼內容最初可以定義在資源配接器保存檔 (RAR) 中。

[AIX Solaris HP-UX Linux Windows]這些內容也可以定義在管理主控台中,或從自訂內容中利用 wsadmin Scripting 來定義。

[IBM i]請勿使用自訂內容,因為會讓使用者連接到資源。

儲存器管理的登入

目標企業資訊系統 (EIS) 的使用者 ID 和密碼,可以由應用程式伺服器提供。 產品提供了儲存器管理的登入功能。 應用程式伺服器會找出目標 EIS 的適當鑑別資料,以讓用戶端能夠建立連線。 當應用程式配置成使用儲存器管理的登入時,應用程式碼就不需要在 getConnection 呼叫中提供使用者 ID 和密碼,所有指向某資源的參照也不需要使用相同的鑑別資料。 使用「Java 鑑別和授權服務 (JAAS)」外掛鑑別機制來使用預先配置的 JAAS 登入配置,以及使用 LoginModule 來將執行中執行緒上的用戶端安全身分和認證對映至預先配置的使用者 ID 和密碼。

產品支援預設的多對一認證對映 LoginModule 模組,它會將執行中之執行緒上的任何用戶端身分對映至指定目標 EIS 的預先配置的使用者 ID 和密碼。 預設對映模組是特殊用途 JAAS LoginModule 模組,它會傳回已配置 Java 2 連接器 (J2C) 鑑別資料項目指定的 PasswordCredential 認證。 預設的對映 LoginModule 模組會執行表格查閱,但不會執行實際的鑑別。 使用者 ID 和密碼連同別名一起儲存在 J2C 鑑別資料清單中。

J2C 鑑別資料清單位於來自「Java 鑑別」和 授權服務 > J2C 鑑別資料的「廣域安全」畫面上。 預設的主體和認證對映函數是由 DefaultPrincipalMapping 應用程式 JAAS 登入配置來定義。

利用管理主控台來修改的 J2C 鑑別資料,當儲存到儲存庫中,且執行「測試連線」時,便開始生效。 另外,利用 wsadmin Scripting 來修改的 J2C 鑑別資料,也是在針對給定的應用程式伺服器程序來啟動或重新啟動任何應用程式時,便開始生效。 呼叫 SecurityAdmin MBean 方法 updateAuthDataCfg,會使所修改的 J2C 鑑別資料生效。 請將 HashMap 參數設為 null,使 Securityadmin MBean 能夠利用儲存庫中最新的值來重新整理 J2C 鑑別資料。

請勿修改 DefaultPrincipalMapping 登入配置,因為產品加強了這個經常使用的預設對映配置的效能。 產品不支援修改 DefaultPrincipalMapping 配置、變更預設的 LoginModule 模組,或在配置中堆疊自訂的 LoginModule 模組。

對於大部分系統而言,含有多對一對映的預設方法已經夠用。 不過,產品仍支援自訂主體和認證對映配置。 您可以用唯一名稱建立新的 JAAS 登入配置,將自訂對映模組新增到應用程式登入 JAAS 配置中。 例如,自訂對映模組可提供一對一對映或 Kerberos 功能。

另外,授信連線也提供一對一的對映,且支援傳送用戶端身分。 此外,透過使用 DB2® 信任環境定義物件,信任連線還可以利用連線儲存區來減少以不同身分關閉及重新開啟連線的效能損失。 使用信任連線也會透過不需要將所有專用權指派給單一使用者,來加強 DB2 資料庫的安全。 連線是由 DB2 伺服器信任其認證來開啟連線的使用者所建立,然後也會信任相同的使用者來主張從應用程式存取 DB2 伺服器之其他使用者的身分。 已建立的新對映配置稱為 TrustedConnectionMapping,用來實作授信連線。

您也可以使用 WebSphere® Application Server 管理主控台,將資源管理程式 Connection Factory 參照連結至其中一個已配置的資源 Factory。 如果應用程式部署描述子內的 res-auth 元素值是 Container,您必須指定對映配置。 如果要指定對映配置,請使用 應用程式 > 應用程式類型 > Websphere 企業應用程式 > application_name 畫面上「參照」之下的資源參照鏈結。 請參閱「將資源參照對映至參照」主題,以取得其他指示。

J2C 對映模組和對映內容

對映模組是特殊的 JAAS 登入模組,用來提供主體和憑證對映功能。 您可以使用管理主控台來定義及配置自訂對映模組。

您也可以利用每一個 JAAS 登入配置中的登入選項,來定義及傳遞環境定義資料至對映模組。 在產品中,您還可以利用每個 Connection Factory 參照連結上的對映內容來定義環境定義資料。

使用相同 JAAS 登入配置和對映模組的所有資源,都可以共用定義給每個 JAAS 登入配置的登入選項。 為每一個 Connection Factory 參照連結定義的對映內容,由該資源參照專用。

請想想一個使用外部對映服務的使用實務。

例如,您可以使用 Tivoli ® Access Manager 廣域登入 (GSO) 服務。 使用 Tivoli Access Manager GSO 來尋找兩個後端伺服器的鑑別資料。

您有兩部 EIS 伺服器: DB2 和 MQ。 不過, DB2 的鑑別資料不同於 MQ的鑑別資料。 在對映 JAAS 登入配置中使用登入選項,來指定建立與 Tivoli Access Manager GSO 服務的連線所需的參數。 使用 Connection Factory 參照連結中的對映內容,來指定哪些 EIS 伺服器需要使用者 ID 和密碼。

如需開發對映模組的詳細資訊,請參閱「J2C 主體對映模組」主題。

附註:
  • 在 Connection Factory 的對映配置已移至資源管理程式 Connection Factory 參照。 資源管理程式 Connection Factory 參照可以使用利用 WebSphere Application Server 第 5 版 JAAS 回呼類型來開發的對映登入模組,但對映登入模組無法利用自訂對映內容特性。
  • Connection Factory 參照連結可支援對映內容,並且會透過新的 WSMappingPropertiesCallback 回呼類型,將那些內容傳遞給對映登入模組。 此外,WSMappingPropertiesCallback 回呼以及 新的 WSManagedConnectionFactoryCallback 回呼,是定義在 com.ibm.wsspi 套件中。 請將新的對映登入模組和新的回呼類型搭配使用。

以入埠 SecurityContext 進行安全訊息遞送

EIS 資源配接器可以利用安全流入環境定義,將安全資訊提供給應用程式伺服器。 安全流入環境定義機制使工作管理員能夠以所建立的身分,來執行 Work 實例的動作。 這些動作包括將訊息遞送至 Java EE 訊息端點,這些訊息端點以應用程式伺服器安全網域中所配置的身分作為訊息驅動 Bean (MDB) 來處理。

注意: 只有 JCA 1.6-compliant 資源配接器才支援安全流入環境定義。 目前,這個產品未提供支援安全流入環境定義的內建資源配接器。 如果使用入埠 SecurityContext 來保護訊息遞送安全,則需要支援 Java EE 傳訊和安全流入環境定義的資源配接器。

送往訊息端點的安全訊息遞送,需要在廣域安全配置中啟用廣域安全。 另外,在提供訊息端點 MDB 的應用程式所在的應用程式伺服器上,也必須啟用應用程式安全。 如需廣域安全的相關資訊,請參閱 廣域安全設定主題。

應用程式部署描述子的安全原則,必須配置應用程式網域範圍(也就是應用程式網域範圍內的安全網域使用者登錄)內之使用者身分的相關角色。 這個安全配置會啟用 EJB 安全,以及授權應用程式網域範圍內的特定使用者身分存取 MDB 方法。 如需安全概觀的相關資訊,請參閱 安全主題。

安全訊息遞送也需要資源配接器定義 WorkContextProvider 和 SecurityContext 這兩個介面的實作。 如果要遞送安全訊息,資源配接器會先提交一個工作實例來提供 SecurityContext 實作,工作管理員就利用它來建立這個工作實例的執行主題。

在建立執行主題時, SecurityContext 可以提供 Java Authentication Service Provider Interface for Containers (JASPIC) 回呼的實作,供工作管理員用來判斷呼叫端和群組身分 (CallerPrincipal回呼, GroupPrincipal回呼) ,以及鑑別呼叫端身分和密碼 (PasswordValidation回呼)。 如果呼叫端身分是在應用程式網域範圍中,工作管理員會建構一個 WSSubject 實例來主張這個身分,這個實例含有呼叫端主體、任何群組主體,以及所有專用認證。

另外,SecurityContext 也可以提供另一個登入或鑑別模組所建立的 WSSubject 實例來作為執行主題。 呼叫端主體必須是在應用程式網域範圍或授信網域範圍內,工作管理員才會接受這個 WSSubject 實例。 如需網域範圍的相關資訊,請參閱 配置多個安全網域的入埠授信網域範圍主題。

每當無法建立 WSSubject 實例時,工作管理員都會拒絕 Work 實例。 否則,它會在所主張或接受的 WSSubject 實例之下,在受管理的執行緒上,分派這個實例。 如果 SecurityContext 未提供呼叫端身分,Work 實例就會在含有未經鑑別之呼叫端主體的 WSSubject 實例之下進行分派。

當分派時,Work 實例可能會嘗試將訊息遞送給安全應用程式的 MDB。 所有訊息都是在為了 Work 實例而建立的 WSSubject 實例之下分送。 每當 WSSubject 實例的呼叫端主體是關聯於應用程式部署描述子中所宣告的角色時,EJB 安全合作程式都會提供對於 MDB onMessage 方法的存取權。 否則,合作程式會拒絕存取,訊息會無法遞送。 在遞送期間,MDB 可以利用 isCallerInRole 和 getCallerPrincipal 這兩個 EJB 環境定義方法來進行其他存取決策,MDB 可能會存取呼叫端主體具有權限之安全網域內的其他實體。