使用 WSS API 配置使用者安全性令牌

可使用 Web Service 安全性 API 取代策略集来保护 SOAP 消息。要在使用者端配置令牌,请使用 Web Service 安全性 API (WSS API)。使用者安全性令牌是 com.ibm.websphere.wssecurity.wssapi.token 接口包的一部分。

开始之前

WebSphere® Application Server 中的可插入令牌框架已重新设计,以便可以复用 WSS API 中的同一框架。可以将创建和验证安全性令牌的同一实现用于 Web Service 安全性运行时和 WSS API 应用程序代码。重新设计的框架还简化了 SPI 编程模型,从而简化了添加安全性令牌类型的过程。

可以使用 WSS API,或者通过管理控制台来配置令牌。要配置令牌,必须完成了以下令牌任务:根据需要配置生成器令牌。

关于此任务

在生成器端,JAAS CallbackHandler 和 JAAS LoginModule 负责创建安全性令牌。令牌通过使用 JAAS LoginModule 创建,并使用 JAAS CallbackHandler 来传递认证数据。然后,JAAS LoginModule 创建 securityToken 对象(例如 UsernameToken)并将其传递给 Web Service 安全性运行时。

在使用者端,XML 格式被传递到 JAAS LoginModule 以进行验证或认证。 然后,将使用 JAAS CallbackHandler 将认证数据从 Web Service 安全性运行时传递到 LoginModule。对令牌进行认证并创建安全性令牌对象后,会将令牌传递到 Web Service 安全性运行时。

使用 WSS API 进行使用者令牌验证时,将执行某些缺省行为。使用 WSS API 的最简单方法是使用缺省 JAAS 登录模块和回调处理程序。本示例对它们使用缺省值,以便不指定 JAAS 登录模块名。

使用 WSS API 的最简单方法是使用缺省行为(请参阅示例代码)。WSS API 对令牌类型、令牌值和 JAAS 配置名称提供缺省值。缺省令牌行为包括:

表 1. 缺省令牌行为. 缺省情况下,已配置若干令牌特征。
使用者令牌决定 缺省行为
要使用的令牌类型

令牌类型指定要用于签署和验证消息的令牌类型。X.509 令牌是缺省令牌类型。

WebSphere Application Server 提供以下预配置的使用者令牌类型:

  • 安全上下文令牌
  • 派生密钥令牌
  • X509 令牌

还可以根据需要创建定制令牌类型。

要指定的 JAAS 登录配置名称

JAAS 登录配置名称指定要使用的 JAAS 登录配置名称。

要使用的配置类型 JAAS 登录模块配置类型。只能将预先配置的使用者配置类型用于使用者令牌类型。

SecurityToken 类 (com.ibm.websphere.wssecurity.wssapi.token.SecurityToken) 是通用令牌类,并且表示具有获取标识、XML 格式和密钥的方法的安全性令牌。使用 SecurityToken 类可以将签名和加密应用于 SOAP 消息。但是,要应用两者,必须具有两个 SecurityToken 对象,分别用于签名和加密。

下列令牌类型是通用安全性令牌类的子类:

表 2. SecurityToken 的子类. 使用子类来表示安全性令牌。
令牌类型 JAAS 登录配置名称
安全上下文令牌 system.wss.consume.sct
派生密钥令牌 system.wss.consume.dkt

下列令牌类型是二进制安全性令牌类的子类:

表 3. BinarySecurityToken 的子类. 使用子类来表示二进制安全性令牌。
令牌类型 JAAS 登录配置名称
X.509 令牌 system.wss.consume.x509
X.509 PKI 路径令牌 system.wss.consume.pkiPath
X.509 PKCS7 令牌 system.wss.consume.pkcs7
注:
  • 对于每个 JAAS 登录令牌使用者配置名称,分别具有一个令牌生成器配置名称。例如,对于 X509Token,单独的令牌生成器配置名称是 system.wss.generate.x509。
  • LTPA 和 LTPA 传播令牌仅适用于正在作为基于服务器的客户机来运行的请求者。Java™ SE 6 或 Java EE 应用程序客户机不支持 LTPA 和 LTPA 传播令牌。

要在使用者端验证 SOAP 消息的 X509Token,<X509Token> 元素必须在 <wsse:Security> 元素中。

过程

  1. 要验证 securityToken 包 com.ibm.websphere.wssecurity.wssapi.token,请首先确保安装了应用程序服务器。
  2. 如果使用的是缺省值,那么配置 Web Service 安全性令牌使用者过程的令牌。 对于每个令牌类型,此过程类似于以下令牌使用者过程:
    1. 使用 WSSFactory.getInstance() 获取 WSS API 实现实例。
    2. 根据 WSSFactory 实例创建 WSSConsumingContext 实例。 注意,必须始终在 JAX-WS 客户机应用程序中调用 WSSConsumingContext。
    3. 使用验证安全性令牌所必需的信息来创建 JAAS CallbackHandler。 请检查令牌类信息以确定哪些参数是必需的或可选的。例如,对于 X.509 令牌,可以配置下列各项:
      表 4. X.509 令牌选项. 使用 X.509 配置选项来控制令牌的行为。
      令牌信息 描述
      keyStoreRef 指示存储在加密卡中的密钥库的引用名称。将此卡设置为硬件时可以指定此项。
      keyStorePath 指示密钥库文件的路径。如果设置了 keyStoreRef,那么不必指定 keyStorePath。
      keyStorePassword 指示密钥库文件的密码。
      keyStoreType 指示密钥库文件的类型。
      alias 指示密钥的别名。
      keyPassword 指示密钥的密码。
      keyName 指示密钥的主体集名称。
    4. 将回调处理程序设置到 WSSDecryption、WSSVerification 或 WSSConsumingContext。
    5. 如果将回调处理程序设置到 WSSDecryption 或 WSSVerification,那么将其中任何一个添加到 WSSConsumingContext。
    6. 调用 WSSConsumingContext.process()。
  3. 如果使用的是非缺省值,那么配置 Web Service 安全性令牌使用者过程的令牌。 对于每个令牌类型,此过程类似于以下令牌使用者过程:
    1. 如果使用的不是缺省 JAAS 登录模块和回调处理程序,那么需要准备一个定制 JAAS 登录模块和回调处理程序,然后使用管理控制台预先注册 JAAS 登录配置的名称。
    2. 使用 WSSFactory.getInstance() 获取 WSS API 实现实例。
    3. 根据 WSSFactory 实例创建 WSSConsumingContext 实例。 注意,必须始终在 JAX-WS 客户机应用程序中调用 WSSConsumingContext。
    4. 使用验证安全性令牌所必需的信息来创建回调处理程序。 请检查令牌类信息以确定哪些参数是必需的或可选的。例如,对于 X.509 令牌,可以配置下列各项:
      表 5. X.509 令牌选项. 使用 X.509 配置选项来控制令牌的行为。
      令牌信息 描述
      keyStoreRef 指示存储在加密卡中的密钥库的引用名称。将此卡设置为硬件时可以指定此项。
      keyStorePath 指示密钥库文件的路径。如果设置了 keyStoreRef,那么不必指定 keyStorePath。
      keyStorePassword 指示密钥库文件的密码。
      keyStoreType 指示密钥库文件的类型。
      alias 指示密钥的别名。
      keyPassword 指示密钥的密码。
      keyName 指示密钥的主体集名称。
    5. 将 JAAS 配置名称和回调处理程序设置到 WSSDecryption、WSSVerification 或 WSSConsumingContext。
    6. 如果将 JAAS 配置名称和回调处理程序设置到 WSSDecryption 或 WSSVerification,那么将其中任何一个添加到 WSSConsumingContext。
    7. 调用 WSSConsumingContext.process()。

结果

如果存在错误情况,那么将提供 WSSException。如果成功,那么将调用 WSSConsumingContext.process(),并对使用者端的安全性令牌进行验证(认证)。

示例

以下样本代码提供了 WSS API 示例代码,这段代码通过缺省 JAAS 登录模块和回调处理程序进行解密:

// Get the message context
   Object msgcontext = getMessageContext();

// Generate the WSSFactory instance (step: a)
   WSSFactory factory = WSSFactory.getInstance();		

// Generate the WSSConsumingContext instance (step: b)
   WSSConsumingContext gencont = factory.newWSSConsumingContext();

// Generate the callback handler (step: c)
   X509ConsumeCallbackHandler callbackHandler = new
        X509ConsumeCallbackHandler(
                                   "",
                                   "enc-sender.jceks",
                                   "jceks",
                                   "storepass".toCharArray(),
                                   "alice",
                                   "keypass".toCharArray(),
                                   "CN=Alice, O=IBM, C=US");

// Generate the WSSDecryption instance (step: d)
   WSSDecryption dec = factory.newWSSDecryption(X509Token.class,
                                                callbackHandler);


// Add WSSDecryption to WSSConsumingContext (step: e)
   concont.add(dec);

// Validate the WS-Security header (step: f)
concont.process(msgcontext);

下一步做什么

对于每个令牌类型,使用 WSS API 或管理控制台来配置令牌。接下来,指定类似的生成器令牌(如果尚未这样做)。

如果配置了生成器和使用者令牌,请使用 WSS API 继续保护响应使用者处的 SOAP 消息,或者使用管理控制台配置令牌。

如果生成器和使用者令牌均已配置,请根据需要通过验证签名或通过对消息进行解密来继续保护 SOAP 消息。可以使用 WSS API 或管理控制台来保护 SOAP 消息。


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



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_confwssconsumertoken
文件名:twbs_confwssconsumertoken.html