Protegendo Aplicativos JAX-RS Dentro do Contêiner da Web
É possível usar serviços de segurança disponíveis a partir do contêiner da Web para proteger recursos Representational State Transfer (REST). É possível configurar os mecanismos de segurança que definem o aplicativo do usuário, a segurança de transporte, o controle de autorização e o usuário para mapeamentos de função.
Antes de Iniciar
Para definir apropriadamente as restrições de segurança, é importante estar familiarizado com seu aplicativo e com os recursos RESTful que ele expõe. Esse conhecimento ajuda a determinar as funções de segurança apropriadas necessárias pelo seu aplicativo, além de recursos individuais que ele expõe.
Para mostrar como proteger um aplicativo REST, este tópico usa um aplicativo REST de amostra 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>
Nesse exemplo, o mapeamento de servlet indica que os recursos
REST são atendidos no diretório /app_root_context/rest, em que
app_root_context é o que você configurou durante a instalação do aplicativo. O contexto raiz padrão é /. Você deve ativar a segurança para o WebSphere Application Server.
Sobre Esta Tarefa
É possível usar o contêiner da Web para aplicar autenticação assim como restrições de autorização a um aplicativo REST que esteja executando no ambiente do servidor de aplicativos. A autenticação é um requisito de segurança básico para os recursos REST de negócios que requerem nível mínimo de segurança e podem precisar proteger ainda mais os recursos com base na identidade do responsável pela chamada.
- Requer que os usuários sejam autenticados no seu aplicativo usando autenticação básica HTTP ou login de formulário.
- Configure seu aplicativo para usar um canal SSL para transporte quando chamar recursos REST.
- Defina restrições de autorização com base em função nos padrões de recurso REST.
- Implemente o uso programático do objeto SecurityContext anotado para determinar a identidade e as funções de usuário.
Procedimento
Resultados
Depois de definir as restrições de segurança, o acesso aos recursos REST que são definidos no seu aplicativo está sujeito apenas para autenticação do usuário com êxito. Além disso, você aplicou as restrições de função em vários padrões de URL de recurso para ativar o acesso baseado em função para esses recursos.
Exemplo
<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>
O que Fazer Depois
Use o console administrativo para administrar a segurança para seu aplicativo JAX-RS.