保护下游 JAX-RS 资源

您可以通过配置 BasicAuth 方法进行认证以及使用 LTPA JAX-RS 安全处理程序来利用单点登录进行用户认证以保护下游 Java™ API for RESTful Web Services (JAX-RS) 资源。

开始之前

此任务假定您已完成以下步骤:
  • 您将 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 下游资源您可以通过配置 BasicAuth 方法进行认证以及使用 LTPA JAX-RS 安全处理程序来保护下游资源。

在应用程序构建时,利用 JAX-RS 安全处理程序,使用以下步骤配置下游服务器的用户认证。

过程

  1. 在应用程序构建时,使用基于 LTPA 的安全客户机处理程序 LtpaAuthSecurityHandler 对的服务器中分布的下游资源进行认证。
    • 对于 JAX-RS 1.1,使用 LtpaAuthSecurityHandler 类时,确保您瞄准使用 URL 的 https 方案的资源,且目标应用程序已启用 SSL。极力建议您在发送用户凭证(包括 LTPA cookie)时使用 SSL 连接。您可能通过以 false 值在安全处理程序上调用 setSSLRequired 方法在 LtpaAuthSecurityHandler 类中显式关闭对 SSL 的需求。缺省值为 true
      yourLtpaAuthSecHandler.setSSLRequired(false);
    • 对于 JAX-RS 2.0,可使用 com.ibm.ws.jaxrs.client.ltpa.handler 客户机属性来获取 SSO cookie 并将值设置为 true
      ClientBuilder cb = ClientBuilder.newBuilder();
      
              Client c = cb.build();
              c.property("com.ibm.ws.jaxrs.client.ltpa.handler", "true");
              WebTarget t = c.target("http://" + serverIP + ":" + serverPort + "/" + moduleName + "/ComplexClientTest/ComplexResource");
              String res = t.path("echo1").path("test1").request().get(String.class);
              c.close();
              ret.append(res);
    如果要在 JAX-RS 2.0 中使用安全套接字层 (SSL) 功能,那么您需要启用 ssl-1.0 或 appSecurity-2.0 功能部件。对于 LTPA 令牌功能,appSecurity-2.0 功能部件是必需的。
    注: ssl-1.0 功能部件是 appSecurity-2.0 功能部件的子功能部件。如果您启用 jaxrsClient-2.0 功能部件和 ssl-1.0 功能部件,那么系统会自动启用 appSecurity-2.0 功能部件。
  2. 将安全处理程序添加到处理程序链。
  3. 创建 REST 客户机实例。
  4. 创建您要交互的资源实例。
  5. 替换表示您资源地址的值。

结果

您在定义了安全 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;

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

信息中心的条款和条件 | 反馈


时间戳记图标 最近一次更新时间: Tuesday, 7 June 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twbs_jaxrs_impl_securejaxrs_downstreamresource
文件名:twbs_jaxrs_impl_securejaxrs_downstreamresource.html