martes, 2 de octubre de 2012

Habilitar seguridad en Tomcat

Desarrolle unas demos para la empresa y para accederlas configure un subdominio de la empresa que apunta a un Tomcat 7. Pase la URL a los vendedores y sin problema accedian a las aplicaciones... como todo mundo... si realizabas la búsqueda en Google. En menos de tres días ya estaban en el indice del motor. Finalmente el objetivo de la venta es hacer visible al producto, por lo que sin quererlo ya estaba siendo promovido en internet. El tema aqui es que no podía quedar abierto por temas de inteligencia competitiva, por lo que procedi a habilitar la seguridad en tomcat, de manera muy rápida y sencilla.

Vamos a emplear lo que se denomina "Memory Realm", esto es, la autenticación es contra los datos de usuarios cargados en memoria... ¿de donde? Del archivo users.xml

Los pasos son:
  1. Agregar en la tag <Engine></Engine> a conf/server.xml lo siguiente: <Realm className="org.apache.catalina.realm.MemoryRealm" />
  2. Editar o crear el archivo conf/tomcat-users.xml, un ejemplo puede ser: <?xml version='1.0' encoding='utf-8'?><tomcat-users>  <role rolename="test"/>  <user username="user" password="pass" roles="test"/></tomcat-users>
  3. El paso anterior crea un usuario "user" con el rol "test". 
  4. Finalmente, hay que modificar el archivo XML de la aplicación Web (web.xml) y agregar algunos parámetros para que solicite autenticación: 
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>
            Protected Site
          </web-resource-name>
          <!-- This would protect the entire site -->
          <url-pattern>
            /*
          </url-pattern>
          <!-- If you list http methods,             only those methods are protected -->
          <http-method>
            DELETE
          </http-method>
          <http-method>
            GET
          </http-method>
          <http-method>
            POST
          </http-method>
          <http-method>
            PUT
          </http-method>
        </web-resource-collection>
        <auth-constraint>
          <!-- Roles that have access -->
          <role-name>
            test
          </role-name>
        </auth-constraint>
      </security-constraint>
      <!-- BASIC authentication -->
      <login-config>
        <auth-method>
          BASIC
        </auth-method>
        <realm-name>
          Example Basic Authentication
        </realm-name>
      </login-config>
      <!-- Define security roles -->
      <security-role>
        <description>
          Test role
        </description>
        <role-name>
          test
        </role-name>
      </security-role>
      ..
      <?xml version="1.0" encoding="iso-8859-1"?>
La configuración anterior, obliga a que cualquier recurso que quiera ser accedido debe estar autenticado el usuario y tener el rol test.


No hay comentarios:

Publicar un comentario