保护下游 JAX-RS 资源
您可以通过配置 BasicAuth 方法进行认证以及使用 LTPA JAX-RS 安全处理程序来利用单点登录进行用户认证以保护下游 Java™ API for RESTful Web Services (JAX-RS) 资源。
开始之前
该任务假设您完成了以下步骤:
- 您向应用程序服务器定义单元概要文件,该概要文件将联合到 Deployment Manager 单元中。
- 您将 JAX-RS 应用程序安装到应用程序服务器中。
- 您为 JAX-RS 应用程序启用安全性。
- 您通过将下游 JAX-RS 应用程序配置为将基本认证 (BasicAuth) 方法用于用户认证来保护 Web 容器内的 JAX-RS 应用程序。
关于此任务
编写 JAX-RS 资源时,可以将新的 LTPA JAX-RS 安全处理程序用于对下游资源调用进行无缝认证。
调用下游安全 JAX-RS 资源时,需要调用应用程序对目标资源进行认证。如果下游服务器上的目标资源使用 BasicAuth 方法实现安全,那么调用的应用程序可以利用 JAX-RS 资源的单点登录 (SSO)。使用单点登录,将认证的上下文沿着下游调用传播。您可以使用基于 LTPA 的安全客户机处理程序对跨单元环境的服务器分布的下游资源进行认证。
为了说明此场景,假设您在单元中有两个服务器且您在这两个服务器上都部署了 JAX-RS 资源。假设您需要从 server1 上的一个资源调用部署在 server2 上的另一资源。 使用 BasicAuth 认证方法来保护 server2 资源时,使用 LTPA JAX-RS 安全处理程序来利用单点登录并在下游调用上无缝地传播用户认证,而不必在应用程序中提供或管理用户身份和密码。
图 1. 保护 JAX-RS 下游资源

在应用程序构建时,利用 JAX-RS 安全处理程序,使用以下步骤配置下游服务器的用户认证。
过程
结果
您在单元环境内定义了安全 JAX-RS 资源,以便在调用下游资源时,您可以使用单点登录并在下游调用上无缝地传播用户认证,而不必在应用程序中提供或管理用户身份和密码。
示例
对于 JAX-RS 1.1,以下代码片段演示如何使用封装为 JAX-RS 客户机一部分的此安全性处理程序。
import org.apache.wink.client.Resource;
import org.apache.wink.client.RestClient;
import org.apache.wink.client.ClientConfig;
import org.apache.wink.client.handlers.LtpaAuthSecurityHandler;
ClientConfig config = new ClientConfig();
LtpaAuthSecurityHandler secHandler = new LtpaAuthSecurityHandler();
// Add this security handler to the handlers chain.
config.handlers(secHandler);
// Create the REST client instance.
RestClient client = new RestClient(config);
// Create the resource instance that you want to interact with.
// Substitute a value representing your resource address
resource =
client.resource("http://localhost:8080/path/to/resource");
// Now you are ready to begin calling your resource.
对于 JAX-RS 2.0,以下代码片段演示如何使用封装为 JAX-RS 客户机一部分的此安全性处理程序。
ClientBuilder cb = ClientBuilder.newBuilder();
Client c = cb.build();
c.property("com.ibm.ws.jaxrs.client.ltpa.handler", "true");
String res = "";
res = c.target("http://" + serverIP + ":" + serverPort + "/" + moduleName + "/rest/ltpa")
.request()
c.close();
return res;