使用 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 配置名称提供缺省值。缺省令牌行为包括:
使用者令牌决定 | 缺省行为 |
---|---|
要使用的令牌类型 | 令牌类型指定要用于签署和验证消息的令牌类型。X.509 令牌是缺省令牌类型。 WebSphere Application Server 提供以下预配置的使用者令牌类型:
还可以根据需要创建定制令牌类型。 |
要指定的 JAAS 登录配置名称 | JAAS 登录配置名称指定要使用的 JAAS 登录配置名称。 |
要使用的配置类型 | JAAS 登录模块配置类型。只能将预先配置的使用者配置类型用于使用者令牌类型。 |
SecurityToken 类 (com.ibm.websphere.wssecurity.wssapi.token.SecurityToken) 是通用令牌类,并且表示具有获取标识、XML 格式和密钥的方法的安全性令牌。使用 SecurityToken 类可以将签名和加密应用于 SOAP 消息。但是,要应用两者,必须具有两个 SecurityToken 对象,分别用于签名和加密。
下列令牌类型是通用安全性令牌类的子类:
令牌类型 | JAAS 登录配置名称 |
---|---|
安全上下文令牌 | system.wss.consume.sct |
派生密钥令牌 | system.wss.consume.dkt |
下列令牌类型是二进制安全性令牌类的子类:
令牌类型 | 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> 元素中。
过程
结果
示例
以下样本代码提供了 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 消息。