Configuración de dominios de seguridad en Oracle weblogic con Proveedor SQL - Parte 3

Por Ricardo Ruano
Publicado en junio 2013

Índice de contenidos

1. Configuración del Dominio de Oracle Weblogic Server
2. Configuración de un Origen de datos (Data Source) JDBC en Oracle Weblogic 10.3
3. Configuración de dominios de seguridad en Oracle weblogic con Proveedor SQL 17
4. Despliegue de Aplicaciones en Oracle Weblogic

Para esta ocasión se va configurar un dominio de seguridad sobre Oracle Weblogic que implemente el modelo ADF Security de nuestra aplicación.

Antecedentes.

Se ha implementado correctamente ADF security en la aplicación, la información relativa a los roles, usuarios y la asignación de roles a usuarios se encuentra almacenada en una base de datos.

Objetivo.

El fin es configurar un dominio se seguridad sobre weblogic que permite a la aplicación desplegada:

  • Autentificar a los usuarios usando los registros almacenados en la tabla RED_TAB_DATOS_USUARIOS.
  • Usar los roles almacenados en la tabla RED_TAB_ROLES para que weblogic asigne al usuario el rol de aplicación adecuado para acceder a los recursos basándose en las políticas de seguridad establecidas en el archivo jazn-data.xml de ADF security.

¡Iniciemos!

Partiendo del hecho de que nuestra aplicación ha sido configurada adecuadamente ADF security, tendremos el archivo jazn-data.xml con el siguiente aspecto, este fichero se divide en dos secciones que muestran las asignaciones de permisos de roles a tareas de flujos (taskflow) y asignación de permisos de roles a recursos web (web pages, fragmentpages)

Seguridad en weblogic, archivo jazn-data.xml
Seguridad en weblogic, archivo jazn-data.xml

El archivo anterior permite asignar permisos a los roles definidos en nuestra aplicación, en nuestro caso tenemos los siguiente roles incluyendo los roles por defecto que incluye ADF (anonymous-role, que es el rol del usuario que no está autenticado, authenticated-role, rol de uso general para un usuario autenticado, test-all, rol de uso genérico), volvemos a recalcar que los usuarios y roles de aplicación personalizados (red-app-administracion, red-app-candidatos, red-app-gestion) se encuentran en tablas de base de datos, sin embargo es necesario crear estos roles en la misma aplicación para efectos de la definición de las políticas de seguridad (asignación de permisos).

Seguridad en weblogic, roles de aplicación
Seguridad en weblogic, roles de aplicación

El esquema de las tablas de usuarios, roles y asignación de usuarios a roles es el siguiente y se usa tablas de una base de datos Oracle 10g:

CREATETABLERED_TAB_DATOS_USUARIOS
(
  CODIGO            VARCHAR2(20 BYTE)CONSTRAINT
  DESCRIPCION       VARCHAR2(300 BYTE),
  U_PASSWORD        NVARCHAR2(50)
);
ALTERTABLERED_TAB_DATOS_USUARIOSADD(
CONSTRAINT RED_PK_DAT_USER  PRIMARYKEY(CODIGO));

--------------------------------------------------------

CREATETABLERED_TAB_ROLES
(
  G_NAME         VARCHAR2(200 BYTE)NOTNULL,
  G_DESCRIPTION  VARCHAR2(1000 BYTE)
);

ALTERTABLERED_TAB_ROLESADD(
CONSTRAINT RED_PK_ROLES PRIMARYKEY(G_NAME));

--------------------------------------------------------

CREATETABLERED_TAB_ROLES_MIEMBROS
(
  G_NAME    VARCHAR2(200 BYTE)NOTNULL,
  G_MEMBER  VARCHAR2(200 BYTE)NOTNULL
);
ALTERTABLERED_TAB_ROLES_MIEMBROSADD(
CONSTRAINT RED_PK_ROLMEMS PRIMARYKEY(G_NAME, G_MEMBER));

ALTERTABLERED_TAB_ROLES_MIEMBROSADD(
CONSTRAINT RED_FK_ROLESMEM_ROL 
FOREIGNKEY(G_NAME)
REFERENCESRED_TAB_ROLES(G_NAME)
ONDELETECASCADE);

ALTERTABLERED_TAB_ROLES_MIEMBROSADD(
CONSTRAINT RED_FK_ROLESMEM_USUARIO 
FOREIGNKEY(G_MEMBER)
REFERENCESRED_TAB_DATOS_USUARIOS(CODIGO));

Tabla 1. Seguridad en weblogic, esquema de base de datos

Una vez superado los aspectos anteriormente mencionados podremos sumergirnos de lleno en las tareas de configuración deweblogic, para ello es necesario ingresar en la consola de administración, ubicarse en el árbol “Estructura de Dominio” y seleccionar “Dominios de Seguridad”.

Seguridad en weblogic, dominios de seguridad
Seguridad en weblogic, dominios de seguridad

Un dominio de seguridad es un contenedor de mecanismos incluidos usuarios, grupos, roles de seguridad, políticas de seguridad, y proveedores de seguridad, que se utilizan para proteger los recursos de weblogic o los recursos desplegados en weblogic. Se puede tener varios dominios de seguridad en un dominio de Weblogic Server, pero solo uno se puede estar activo de modo que solo uno puede definirse como dominio por defecto. En la siguiente ventana se muestran todos los dominios de seguridad que se ha configurado en el dominio de weblogic Server actual.

Seguridad en weblogic, resumen de dominios de seguridad
Seguridad en weblogic, resumen de dominios de seguridad

 

Haga clic en el nombre del dominio para explorar y configurar dicho dominio. Una vez dentro de la página de configuración seleccionamos el tab “Proveedores”.

Seguridad en weblogic, resumen de dominios de seguridad
Seguridad en weblogic, resumen de dominios de seguridad

El interese es configurar un nuevo proveedor de autenticación sql que use las tablas que contienen nuestros usuarios y roles. Un proveedor de autenticación permite a WebLogic Server establecer protección mediante la validación de un usuario. Se debe tener un proveedor de autenticación en un dominio de seguridad y puede configurar varios en un mismo dominio de seguridad. Los distintos tipos de proveedores de autenticación están diseñados para acceder a distintos almacenes de datos, como servidores LDAP o DBMS. También puede configurar un proveedor de autenticación de adaptador de dominio que le permita trabajar con usuarios y grupos de versiones anteriores de WebLogic Server.

Presionamos el botón nuevo para crear el nuevo proveedor de autenticación.

Seguridad en weblogic, proveedor de autenticación
Seguridad en weblogic, proveedor de autenticación

Definimos el nombre del proveedor usamos “db_usuarios” y el tipo de proveedor de autenticación que se pretende crear es “SQLAuthenticator” y presione Aceptar.

Seguridad en weblogic, nuevo proveedor de autenticación
Seguridad en weblogic, nuevo proveedor de autenticación

Una vez creado el nuevo proveedor de autenticación se lista este en la tabla que resume los proveedores.

Seguridad en weblogic, resumen nuevo proveedor de autenticación
Seguridad en weblogic, resumen nuevo proveedor de autenticación

Seleccione el nuevo proveedor para establecer valores necesarios para lograr la autenticación. Es importante establecer la secuencia de conexión del proveedor como “SUFFICIENT”, este valor especifica que este módulo de conexión no necesita ser correcto. Si es correcto, devuelve el control a la aplicación. Si falla y se configuran otros proveedores de autenticación, la autenticación continúa con la lista de módulos de conexión.

Seguridad en weblogic, proveedor de autenticación, indicador de Control
Seguridad en weblogic, proveedor de autenticación, indicador de Control

Guardamos los cambios, y en la pestaña “Proveedor especifico” definimos la configuración específica del proveedor. Sobre el campo “Nombre de Origen de Datos” es necesario especificar el nombre del proveedor creado en el artículo anterior denominado “Configuración de un Origen de datos (Data Source) JDBC en weblogic 10.3”.

En el campo “Algoritmo de Contraseña” se define el valor “SHA-1”, este es el Algoritmo de resumen del mensaje utilizado para aplicar valores hash a las contraseñas para su almacenamiento. El nombre que se ingrese en esta sección debeser un algoritmo estándar y debe ser reconocido por el proveedor de Java CryptographyExtension (JCE) que está disponible en el tiempo de ejecución.

Seguridad en weblogic, Autenticador de SQL: Proveedor Específico
Seguridad en weblogic, Autenticador de SQL: Proveedor Específico

En aplicación reales, se suele disponer de la opción clásica “Recuperar contraseña”, el mecanismo que suelo recomendar es el siguiente:

Generar contraseñas aleatorias que son almacenadas en la base de datos de forma encriptada, para esta encriptación se debe usar el algoritmo SHA1 el cual es correspondiente al definido en el proveedor sql configurado en el dominio de seguridad de weblogic, lo ideal es generar una rutina de encriptación dentro de un fichero java el cual puede estar dentro de paquete de seguridad de su aplicación.

A continuación sedebedefinirlas sentencias sql que usara weblogic para las diferentes tareas de administración de usuarios, grupos y asignación de usuarios a grupos sobre las tablas de la base de datos, para ello se presenta el siguiente resumen:

Contraseñas en Texto sin Formato Activadas no-check
Nombre del Origen de Datos: SERVIDORUTNDS
Búsqueda de Miembros de Grupo: Unlimited
Nivel Máximo de Búsqueda de Miembros de Grupo: 0
Estilo de Contraseña Mantenido check
Algoritmo de Contraseña: SHA-1
Estilo de Contraseña: SALTEDHASHED
SQL: Obtener Contraseña de Usuarios: SELECT U_PASSWORD FROM RED_TAB_DATOS_USUARIOS WHERE CODIGO = ?
SQL: Definir Contraseña de Usuario: UPDATE RED_TAB_DATOS_USUARIOS SET U_PASSWORD = ? WHERE CODIGO = ?
SQL: Usuario Existente: SELECT CODIGO FROM RED_TAB_DATOS_USUARIOS WHERE CODIGO = ?
SQL: Mostrar Usuarios: SELECT CODIGO FROM RED_TAB_DATOS_USUARIOS WHERE CODIGO LIKE ?
SQL: Crear Usuario: INSERT INTO RED_TAB_DATOS_USUARIOS (CODIGO,U_PASSWORD, DESCRIPCION ) VALUES ( ? , ? , ? )
SQL: Eliminar Usuario: DELETE FROM RED_TAB_DATOS_USUARIOS WHERE CO DIGO = ?
SQL: Mostrar Grupos: SELECT G_NAME FROM RED_TAB_ROLES WHERE G_NAME LIKE ?
SQL: Grupo Existente: SELECT G_NAME FROM RED_TAB_ROLES WHERE G_NAME = ?
SQL: Crear Grupo: INSERT INTO RED_TAB_ROLES VALUES ( ? , ? )
SQL: Eliminar Grupo: DELETE FROM RED_TAB_ROLES WHERE G_NAME = ?
SQL: Es Miembro: SELECT G_MEMBER FROM RED_TAB_ROLES_MIEMBROS WHERE G_NAME = ? AND G_MEMBER = ?
SQL: Mostrar Grupos de Miembros: SELECT G_NAME FROM RED_TAB_ROLES_MIEMBROS WHERE G_MEMBER = ?
SQL: Mostrar Miembros de Grupo: SELECT G_MEMBER FROM RED_TAB_ROLES_MIEMBROS WHERE G_NAME = ? AND G_MEMBER LIKE ?
SQL: Eliminar Miembros de Grupo DELETE FROM RED_TAB_ROLES_MIEMBROS WHERE G_MEMBER = ? OR G_NAME = ?
SQL: Agregar Miembro a Grupo: INSERT INTO RED_TAB_ROLES_MIEMBROS VALUES( ?, ?)
SQL: Eliminar Miembro de Grupo: DELETE FROM RED_TAB_ROLES_MIEMBROS WHERE G_NAME = ? AND G_MEMBER = ?
SQL: Eliminar Miembro del Grupo: DELETE FROM RED_TAB_ROLES_MIEMBROS WHERE G_NAME = ?
Descripciones Soportadas CHECK
SQL: Obtener Descripción de Usuario: SELECT DESCRIPCION FROM RED_TAB_DATOS_USUARIOS WHERE CODIGO = ?
SQLSetUserDescription: UPDATE RED_TAB_DATOS_USUARIOS SET DESCRIPCION = ? WHERE CODIGO = ?
SQL: Obtener Descripción de Grupo: SELECT G_DESCRIPTION FROM RED_TAB_ROLES WHERE G_NAME = ?
SQL: Definir Descripción de Grupo: UPDATE RED_TAB_ROLES SET G_DESCRIPTION = ? WHERE G_NAME = ?

Tabla 2. Seguridad en weblogic, Autenticador de SQL: Proveedor Específico

Guarde los cambios, esto provoca que el navegador presente en pantalla el resumen de proveedores de autenticación existentes en el dominio de seguridad, es necesario ordenar la lista de proveedores de modo que el proveedor que se acaba de crear quede primero, pues al volver a ordenar los proveedores de autenticación, se modifica la secuencia de autenticación. Para ello seleccione el botón Volver a ordenar de la siguiente ventana:

Seguridad en weblogic, ordenar proveedores de autenticación
Seguridad en weblogic, ordenar proveedores de autenticación

En la siguiente ventana se debe establecer al proveedor db_usuarios en primer posición y se guardan los cambios

Seguridad en weblogic, volver a ordenar los proveedores de autenticación
Seguridad en weblogic, volver a ordenar los proveedores de autenticación

Es necesario reiniciar weblogic para que se apliquen los cambios.

Resumen.- En este momento se tiene listo weblogic y la aplicación ADF para desplegar en el servidor, pues se ha configurado adecuadamente un nuevo dominio Weblogic Server, sobre este dominio se creó un origen de datos para manejar la conexión JDBC y se estableció dicho origen de datos en la aplicación, además se ha configurado el dominio de seguridad por defecto de weblogic Server (myrealms) para que se usen inicialmente un proveedor de autenticación basado en sql que usen las políticas de seguridad definidas en el archivo jazn-data.xml de la aplicación Fusion que se desarrolle.


Publicado por Ricardo Ruano.