Protección de las aplicaciones de JAX-RS en el contenedor web
Puede utilizar la seguridad de servicios disponibles en el contenedor web para proteger los recursos REST (Representational State Transfer). Puede configurar mecanismos de seguridad que definen la autenticación de usuario, la seguridad de transporte, el control de autorización y las correlaciones de usuarios y roles.
Antes de empezar
Para definir restricciones de seguridad de forma correcta, es importante que esté familiarizado con la aplicación y los recursos RESTful que expone. Este conocimiento le ayudará a determinar los roles de seguridad apropiados que son necesarios para su aplicación así como los recursos individuales que expone.
Para ilustrar cómo proteger una aplicación REST, este tema utiliza un ejemplo de aplicación REST denominado AddressBookApp.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp_1255468655347">
<display-name>Sample REST Web Application</display-name>
<servlet>
<servlet-name>AddressBookApp</servlet-name>
<servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.AddressBookApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AddressBookApp</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
En este ejemplo, la correlación de servlet indica que los recursos REST reciben servicio bajo el directorio /contexto_raíz_aplic/rest donde contexto_raíz_aplic es lo que se ha configurado durante la instalación de la aplicación. El contexto raíz predeterminado es /. Debe habilitar la seguridad para WebSphere Application Server.
Acerca de esta tarea
Puede utilizar el contenedor web para aplicar la autenticación así como restricciones de autorización para una aplicación REST que se ejecute en el entorno del servidor de aplicaciones. La autenticación es un requisito básico de seguridad para recursos REST empresariales que requieren un nivel mínimo de seguridad y es posible que necesite proteger más los recursos basados en la identidad del interlocutor.
- Solicitar que los usuarios se autentique en la aplicación utilizando la autenticación básica HTTP o un formulario de inicio de sesión.
- Configurar la aplicación para utilizar un canal SSL para el transporte cuando se invocan recursos REST.
- Definir restricciones de autorización basados en roles en sus patrones de recursos REST.
- Implementar el uso programático del objeto SecurityContext anotado para determinar la identidad de usuario y roles.
Procedimiento
Resultados
Después de definir restricciones de seguridad, el acceso a los recursos REST que están definidos en la aplicación estará sujeto solamente a la autenticación de usuario correcta. Además, habrá aplicado restricciones de roles en varios patrones de URL de recursos para permitir el acceso basado en roles a esos recursos.
Ejemplo
<web-app id="WebApp_1255468655347">
<display-name>Sample REST Web Application</display-name>
<servlet>
<servlet-name>AddressBookApp</servlet-name>
<servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.AddressBookApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AddressBookApp</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<security-constraint id="SecurityConstraint_1">
<web-resource-collection id="WebResourceCollection_1">
<web-resource-name>AddressBookApp</web-resource-name>
<description>Protection area for Rest Servlet</description>
<url-pattern>/rest/addresses</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint id="AuthConstraint_1">
<description>Role1 for this rest servlet</description>
<role-name>Role1</role-name>
</auth-constraint>
<user-data-constraint id="UserDataConstraint_1">
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint id="SecurityConstraint_2">
<web-resource-collection id="WebResourceCollection_2">
<web-resource-name>AddressBookApp</web-resource-name>
<description>Protection area for Rest Servlet</description>
<url-pattern>/rest/addresses/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint id="AuthConstraint_2">
<description>Role2 for this rest servlet</description>
<role-name>Role2</role-name>
</auth-constraint>
<user-data-constraint id="UserDataConstraint_1">
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-role id="SecurityRole_1">
<description>This is Role1</description>
<role-name>Role1</role-name>
</security-role>
<security-role id="SecurityRole_2">
<description>This is Role2</description>
<role-name>Role2</role-name>
</security-role>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/logon.jsp</form-login-page>
<form-error-page>/logonError.jsp</form-error-page>
</form-login-config>
</login-config>
</web-app>
Qué hacer a continuación
Utilice la consola de administración para administrar la seguridad en su aplicación de JAX-RS.