为 WS-Security 开发密码回调处理程序

Liberty 中,可以在许多 WS-Security 方案中使用密码回调处理程序来检索密码。例如,可以检索密码以生成 UsernameToken、打开密钥库或者访问专用密钥。当您使用 PasswordDigest 时,提供者需要密码回调处理程序。必须将密码回调处理程序打包为 Liberty 中的用户功能部件。

关于此任务

此任务描述如何开发密码回调处理程序以检索用户名和密钥库密钥密码。

过程

  1. 开发密码回调处理程序。 以下示例显示了一个回调处理程序:
    package com.ibm.ws.wssecurity.example.cbh;
    
    import java.util.HashMap;
    import java.util.Map;
    import javax.security.auth.callback.Callback;
    import javax.security.auth.callback.CallbackHandler;
    import org.apache.ws.security.WSPasswordCallback;
    
    public class SamplePasswordCallback implements CallbackHandler {
    
      private Map<String, String> userPasswords =  new HashMap<String, String>();
      private Map<String, String> keyPasswords = new HashMap<String, String>();
      public SamplePasswordCallback() {
        // some example user passwords
        userPasswords.put("user1", "user1pswd");
        userPasswords.put("admin", "adminpswd");
        // some example key passwords
        keyPasswords.put("alice",  "keypwsd");
        keyPasswords.put("bob",   "keypswd");
      }
      public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
        for (int i = 0; i < callbacks.length; i++) {
          WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
          String id = pwcb.getIdentifier();
          String pass = null;
          switch (pwcb.getUsage()) {
            case WSPasswordCallback.USERNAME_TOKEN_UNKNOWN:
            case WSPasswordCallback.USERNAME_TOKEN:
              pass = userPasswords.get(id);
              pwcb.setPassword(pass);
                  break;        case WSPasswordCallback.SIGNATURE:
            case WSPasswordCallback.DECRYPT:
              pass = keyPasswords.get(id);
              pwcb.setPassword(pass);
                  break;      }
        }
      }
    }
  2. 为回调处理程序创建 MANIFEST.MF 文件。 以下示例显示了 MANIFEST.MF 文件:
    Manifest-Version: 1.0
    Bnd-LastModified: 1359415594428
    Build-Identifier: SNAPSHOT-Mon Jan 28 17:26:34 CST 2013
    Bundle-Copyright: The Program materials contained in this file are IBM
    copyright materials. 5724-I63, 5724-J08, 5724-H89, 5724-H88, 5655-W65
    Copyright International Business Machines Corp. 1999, 2012 All Rights
    Reserved * Licensed Materials - Property of IBM US Government Users
    Restricted Rights - Use, duplication or disclosure restricted by GSA ADP
    Schedule Contract with IBM Corp.
    Bundle-Description: An PasswordCallbackHandler; version=1.0.0
    Bundle-ManifestVersion: 2
    Bundle-Name: wssecuritycbh
    Bundle-SymbolicName: com.ibm.ws.wssecurity.example.cbh
    Bundle-Vendor: IBM
    Bundle-Version: 1.0.0
    Created-By: 1.6.0 (IBM Corporation)
    Export-Package: com.ibm.ws.wssecurity.example.cbh;uses:="com.ibm.websphe
    re.ras.annotation,javax.security.auth.callback";version="1.0.0"
    Import-Package: com.ibm.websphere.ras,com.ibm.websphere.ras.annotation,c
    om.ibm.ws.ffdc,javax.security.auth.callback,org.apache.ws.security;version="[1.6,2)"
    Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version>=1.6))"
    Tool: Bnd-2.1.0.20120920-170235
    WS-TraceGroup: WSSecurity
  3. 将回调处理程序打包在 JAR 文件中。 创建一个具有回调处理程序类以及在先前步骤中所创建的 MANIFEST.MF 文件的 JAR 文件。 以下示例显示了称为 SampleCbh.jar 的样本 JAR 文件的内容:
    META-INF/MANIFEST.MF
    com/ibm/ws/wssecurity/example/cbh/SamplePasswordCallback.class
  4. 创建功能部件清单文件。 以下示例显示了一个称为 wsseccbh-1.0.mf 的样本功能部件清单文件:
    Subsystem-ManifestVersion: 1
    Subsystem-SymbolicName: wsseccbh-1.0; visibility:=public
    Subsystem-Version: 1.0.0
    Subsystem-Content: com.ibm.ws.wssecurity.example.cbh; version="[1,1.0.100)";    location:="lib/"; type="osgi.bundle"; start-phase:=APPLICATION_EARLY
     
    Subsystem-Type: osgi.subsystem.feature
    IBM-Feature-Version: 2
    
    IBM-API-Package: com.ibm.ws.wssecurity.example.cbh; version="1.0"; type="internal"
  5. 将回调处理程序作为 Liberty 中的用户功能部件安装。 将回调处理程序 JAR 文件和功能部件清单文件复制到 Liberty 用户目录下。 以下示例说明了在何处复制这些文件:
    build.image/wlp/usr/extension/lib/SampleCbh.jar
    build.image/wlp/usr/extension/lib/features/wsseccbh-1.0.mf
  6. 将回调处理程序配置为 server.xml 文件中的用户功能部件。 将回调处理程序定义为 server.xml 文件中的用户功能部件。 以下示例说明如何将回调处理程序定义为用户功能部件:
    <featureManager>
      <feature>usr:wsseccbh-1.0</feature>
      <feature>servlet-3.0</feature>
      <feature>appSecurity-2.0</feature>
      <feature>jaxws-2.2</feature>
      <feature>wsSecurity-1.1</feature>
    </featureManager>

结果

您已成功开发密码回调处理程序,并且已将该回调处理程序安装到 Liberty

下一步做什么

现在,您可以使用此回调处理程序来检索 WS-Security 配置中使用的 UsernameToken 和专用密钥的密码。

用于指示主题类型的图标 任务主题

文件名:twlp_wssec_callbackhandler.html