在 Liberty 應用程式用戶端儲存器上配置 JAAS 程式化登入

Liberty 應用程式用戶端儲存器可以配置成使用 JAAS 程式化登入。

開始之前

請檢閱應用程式用戶端儲存器中各種用來鑑別使用者的方法,並決定程式化登入選項是否最適合您的環境。如需進一步詳細資料,請參閱在 Liberty 應用程式用戶端儲存器上進行鑑別

關於這項作業

程式化登入是一種表單登入類型,支援應用程式出示登入表單,以進行鑑別。這種方式會需要應用程式開發者收集使用者的認證,並鑑別該使用者。這種方法利用 JAAS 架構,將使用者的認證傳送給伺服器進行鑑別。JAAS 架構包含建立登入環境定義,其作法是指定 JAAS 登入配置,以及使用回呼處理程式來收集使用者的認證。當從登入環境定義取得主體時,您可以使用 Liberty 安全 API 在執行緒上設定該「主體」,以便在您對伺服器發出出埠呼叫時使用它。
JAAS 登入配置指定鑑別時要使用的登入模組,以及其使用方式。這裡是 Liberty 在用戶端上提供的 JAAS 登入配置:
  • WSLogin JAAS 登入配置:這是通用的 JAAS 登入配置,可供 Liberty 應用程式用戶端儲存器應用程式用來執行以使用者 ID 與密碼為基礎的鑑別。不過,這種配置不支援用戶端應用程式模組部署描述子中指定的 CallbackHandler 處理程式。
  • ClientContainer JAAS 登入配置:這種 JAAS 登入配置可辨識用戶端應用程式模組的部署描述子中指定的 CallbackHandler 處理程式(若有指定的話)如果部署描述子中沒有指定處理程式,就會使用以程式設計方式指定的處理程式。

    JAAS 登入配置所指定的登入模組會實作特定的鑑別技術。登入模組可以利用 javax.security.auth.callback.CallbackHandler 介面,來收集使用者的認證。Liberty 提供無提示的 CallbackHandler 介面實作,稱為 com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl。這種實作可讓應用程式開發人員直接在應用程式中指定認證,而不必提示使用者輸入。CallbackHandler 實作的指定方式有兩種:

    • 以程式設計方式將實作指定成 javax.security.auth.login.LoginContext 建構子的引數;例如:
      LoginContext logincontext = new LoginContext("ClientContainer", new WSCallbackHandlerImpl("user", "password"));
    • 在用戶端應用程式模組的部署描述子 (application-client.xml) 中指定實作名稱;例如:
      <callbackhandler>com.acme.callbackhandler.WSCallbackHandlerImpl/<callbackhandler>
註: WSLogin 登入配置無法辨識第二個選項,亦即在部署描述子中指定 CallbackHandler 處理程式。

程序

  1. appSecurityClient-1.0 特性新增至 client.xml 檔。
    <feature>appSecurityClient-1.0</feature>
  2. 配置用戶端的 SSL:
    1. 選用:使用 securityUtility 指令,為用戶端建立 SSL 憑證;例如:
      securityUtility createSSLCertificate --client=myClient --password=liberty
    2. 建議:使用 securityUtility 指令,產生 xor 編碼密碼。例如,將 liberty 密碼編碼:
      securityUtility encode liberty
    3. keyStore 元素新增至 client.xml 檔。下列範例使用預設 SSL 配置:
      <keyStore id="defaultKeyStore" password="{xor}MzY9Oi0rJg=="/> <!-- pwd:
      liberty -->
  3. 在應用程式碼中,使用 ClientContainer JAAS 登入配置和 WSCallbackHandlerImpl 回呼處理程式,建立 Subject
    1. 在應用程式發出出埠要求之前,請新增下列程式碼。針對存在於目標伺服器使用者登錄中的使用者,將其 userNameuserPassword 變更為有效的認證。
      CallbackHandler wscbh = new WSCallbackHandlerImpl("userName", "userPassword");
      LoginContext ctx = null;
      try {
            ctx = new LoginContext("ClientContainer", wscbh);
      } catch (LoginException le) {
            le.printStackTrace();
      }
      try {
            ctx.login();
      } catch (LoginException le) {
            le.printStackTrace();
      }
      Subject subject = ctx.getSubject();
  4. 在執行緒上設定您在先前步驟中取得的 Subject,並使用該 Subject 來查閱 EJB。請使用 WSSubject.doAsdoAsPrivilieged API,來達成這個動作。當檢查 Java™ Platform Enterprise Edition (J2EE) 資源授權時,會使用 com.ibm.websphere.security.auth.WSSubject.doAscom.ibm.websphere.security.auth.WSSubject.doAsPrivileged 程式碼區塊內的主體。
    WSSubject.doAs(subject, new PrivilegedAction() {
        public Object run() {
               try {
                      //執行 EJB 查閱和呼叫
               } catch (Exception ex) {
                      ex.printStackTrace();
               }
               return null;
        }
    });
  5. 如果用戶端有啟用 Java 2 安全,且您的應用程式碼會呼叫 JAAS 或 Liberty 安全 API,請將必要的「Java 2 安全」許可權新增至應用程式的 permissions.xml 檔或 client.xml 檔。如需瞭解哪些 Liberty 安全 API 受 「Java 2 安全」許可權保護的詳細資料,請參閱程式設計介面 (API)。如需進一步詳細資料,請參閱 Java 2 安全

下一步

在伺服器上時,您可以利用自訂登入模組進行其他鑑別決策,或新增資訊到主題中,以便在用戶端應用程式內進行更細膩的授權決策。如需進一步詳細資料,請參閱為 Liberty 應用程式用戶端儲存器配置 JAAS 自訂登入模組

指示主題類型的圖示 作業主題



「時間戳記」圖示 前次更新: 2016 年 11 月 30 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_config_jaas_prog_login
檔名:twlp_config_jaas_prog_login.html