Sun Java System Message Queue 4.1 版本說明

JAAS 支援

除了內建檔案式和 LDAP 式認證機制,Message Queue 也支援 Java 認證與授權服務 (JAAS),可讓您將各種服務外掛到代理程式,以認證 Message Queue 用戶端。本節說明代理程式提供給 JAAS 相容認證服務的資訊,並說明如何配置代理程式使用這類服務。

JAAS API 不在本文件的論述範疇內。如需瞭解更多資訊,請參閱下列資訊來源。

JAAS API 是 J2SE 的核心 API,因此是 Message Queue 執行階段環境不可或缺的一部分。JAAS 會在應用程式與認證機制之間定義一個抽象層,允許外掛所需的機制,而無須變更應用程式的程式碼。對於 Message Queue 服務而言,此抽象層位於代理程式 (應用程式) 與認證提供者之間。藉由設定某些代理程式特性,可以在不中斷或變更代理程式的程式碼情況下,外掛任何 JAAS 相容認證服務並升級此服務。

若使用 JAAS 式認證,便可使用 JMX 用戶端管理代理程式,但在啟動代理程式之前,必須手動設定 JAAS 支援 (藉由設定與 JAAS 相關的代理程式特性)。您無法使用 JMX API 變更這些特性。

JAAS 的元素

圖 1–1 說明了 JAAS 的基本元素:JAAS 用戶端、JAAS 相容認證服務與 JAAS 配置檔案。

圖 1–1 JAAS 元素

本圖說明 JAAS 相容認證所需的元素。圖形的介紹文字可解釋圖形內容。

下一節說明 Message Queue 服務如何使用這些元素,以提供 JAAS 相容認證。

JAAS 與 Message Queue

下圖說明 Message Queue 代理程式如何使用 JAAS。該圖說明的 JAAS 模型實作比上圖所示更為複雜。

圖 1–2 Message Queue 使用 JAAS 的方式

該圖說明 JAAS 相容認證如何搭配 Message Queue 使用。圖形之後的文字說明其內容。

如同較簡單的範例所示,此認證服務層與代理程式是分開的。認證服務包含一或多個登入模組 (LoginModule),並視需要包含其他認證模組。執行登入模組的 Java 虛擬機器與執行代理程式的 Java 虛擬機器相同。Message Queue 代理程式被登入模組視為 LogInContext,並藉由屬於代理程式執行階段程式碼的 CallBackHandler 與登入模組通訊。

認證服務也提供 JAAS 配置檔案 (包含登入模組的項目)。配置檔案會指定使用模組的順序,以及某些使用條件。啟動代理程式時,JAAS 會依 Java 系統特性 java.security.auth.login.config 或 Java 安全性特性檔案找出配置檔案。接著會根據代理程式特性 imq.user_repository.jaas.name 的值,選取 JAAS 配置檔案中的項目。此項目會指定認證將使用的登入模組。如圖所示,代理程式可使用多個登入模組。(圖 1–3 說明了配置檔案與登入模組以及代理程式之間的關係。)

Message Queue 用戶端完全不會感受到代理程式使用 JAAS 外掛認證服務。用戶端會如同往常繼續連線至代理程式,並傳遞使用者名稱與密碼。而代理程式會使用回呼處理程式將此資訊傳遞至認證服務,再由服務使用該資訊認證使用者並傳回結果。認證一旦成功,代理程式便會授權連線;如果失敗,用戶端執行階段會傳回用戶端必須處理的 JMS 安全性異常。

Message Queue 用戶端經過認證之後,如果需要進一步的授權,則代理程式會如同往常進行;它會參考存取控制檔案,決定是否授權已認證的用戶端以執行所負責的動作:存取目標、使用訊息、瀏覽佇列等。

設定 JAAS 相容認證

設定 JAAS 相容認證的步驟,包含設定代理程式和系統特性以選取此認證類型、指定配置檔案的位置,以及指定將使用的登入模組項目。

本節說明 JAAS 用戶端、登入模組以及 JAAS 配置檔案之間如何相互關聯,接著說明設定 JAAS 相容認證所需的程序。下圖說明配置檔案、登入模組與代理程式之間的關係。

圖 1–3 設定 JAAS 支援

本圖說明 JAAS 相關檔案之間的關係。圖形之後的文字說明其內容。

如圖所示,JAAS 配置檔案 MyJAASCFile.config 包含數個登入模組的參照,共同組成一個進入點。代理程式會藉由查詢 Java 系統特性 java.security.auth.login.config 或 Java 安全性特性檔案,以找出配置檔案。決定要使用的登入模組時須查詢代理程式特性 imq.user_repository.jaas.name,該特性會指定配置檔案中的所需項目。這些模組的類別位於 lib/ext 目錄中。

若要設定 JAAS 對 Message Queue 的支援,您必須完成下列步驟。(在開發環境中,這些步驟可能是由開發人員完成。在生產環境中,管理員會接管部分此類作業。)

  1. 建立可實作認證服務的一或多個登入模組類別。以下列出代理程式支援的 JAAS 回呼類型。

    javax.security.auth.callback.LanguageCallback

    代理程式使用此回呼,將執行代理程式所在的語言環境傳遞給認證服務。此值可用於本土化。

    javax.security.auth.callback.NameCallback

    代理程式使用此回呼,將請求連線時由 Message Queue 用戶端所指定的使用者名稱,傳遞至認證服務。

    javax.security.auth.callback.TextInputCallback

    代理程式使用此回呼,在 TextInputCallback.getPrompt() 為 imq.authentication.type 時,將 imq.authentication.type 的值指定給認證服務。現在此欄位唯一可能的值為 basic。這表示 Base-64 密碼編碼。

    javax.security.auth.callback.PasswordCallback

    代理程式使用此回呼,將請求連線時由 Message Queue 用戶端所指定的密碼,傳遞至認證服務。

    javax.security.auth.callback.TextOutputCallback

    代理程式使用此回呼將文字輸出記錄到代理程式記錄檔,以提供記錄服務給認證服務。回呼的訊息類型 ERROR、INFORMATION 和 WARNING 分別對映至代理程式的記錄層級 ERROR、INFO 和 WARNING。

  2. 建立包含參照登入模組類別之項目的 JAAS 配置檔案,並將此檔案的位置指定給 Message Queue 管理員。(該檔案可位於遠端,並可由 URL 指定其位置。)

  3. 記下 JAAS 配置檔案中參照登入實作類別的項目名稱。

  4. 將實作登入模組的類別歸檔為 jar 檔案,並將 jar 檔案置於 Message Queue 的 lib/ext 目錄中。

  5. 配置與 JAAS 支援相關的代理程式特性。這些特性說明於表 1–2 中。

  6. 設定下列系統特性,以指定 JAAS 配置檔案的位置。

    java.security.auth.login.config= JAAS_Config_File_Location

    例如,您可以在啟動代理程式時指定配置檔案。

    imqbrokerd -Djava.security.auth.login.config=JAAS_Config_File_Location

    還有其他方法可指定 JAAS 配置檔案的位置。如需其他資訊,請參閱

    http://java.sun.com/j2se/1.5.0/docs/guide/security/jaas/tutorials/LoginConfigFile.html

下表列出設定 JAAS 支援所需的代理程式特性。

表 1–2 JAAS 支援的代理程式特性

特性 

說明 

imq.authentication.type

設定為 basic,以表示為 Base-64 密碼編碼。此為 JAAS 認證的唯一允許值。

imq.authentication.basic.user_repository

設定為 jaas,以指定 JAAS 認證。

imq.accesscontrol.type

設定為 file。

imq.user_repository.jaas.name

設定為參照需要用做認證機制之登入模組的所需項目 (位於 JAAS 配置檔案中) 名稱。這是您在步驟 3 中記下的名稱。

imq.user_repository.jaas.userPrincipalClass

此特性由 Message Queue 存取控制所使用,會指定登入模組中的 java.security.Principal 實作類別,讓代理程式用來擷取在 Message Queue 存取控制檔案中表示使用者實體的主體名稱。若未指定,則會改用請求連線時從 Message Queue 用戶端傳遞的使用者名稱。

imq.user_repository.jaas.groupPrincipalClass

此特性由 Message Queue 存取控制所使用,會指定登入模組中的 java.security.Principal 實作類別,讓代理程式用來擷取在 Message Queue 存取控制檔案中表示使用者實體的主體名稱。若未指定,則會忽略 Message Queue 存取控制檔案中的群組規則 (若有的話)。