Error “401 Unauthorized” al consumir un servicio web desde un DataControl en ADF 11g

Durante el desarrollo de una aplicación ADF me he encontrado con la necesidad de consumir un servicio web a través de un DataControl. El servicio tenía autenticación http básica, de modo que a mi DataControl le he añadido las credenciales. Una vez hecho esto, desplegué la aplicación en el Weblogic local y funcionó a la perfección.

Después, desplegué la aplicación en el servidor Weblogic del entorno de test y al ir a probar la página que hacía la llamada, me encontré con que se producía el error “javax.xml.soap.SOAPException: Bad response: 401 Unauthorized”.

Featured image

A continuación, os explico los pasos que hay que realizar para solucionar este problema.

En primer lugar es necesario que el DataControl sobrescriba las propiedades de seguridad que por defecto asigna Weblogic. Esto se realiza de la siguiente manera:

1. Seleccionar el archivo “DataControls.dcx”

Selecionar "DataControls.dcx"

2. En la ventana “Structure”, seleccionar el DataControl y mostrar el menú emergente. Seleccionar la opción “Define Web Service Security…”.

Definir seguridad

3. En la ventana emergente que se abre, debemos escoger la política de seguridad que hay que aplicar y a continuación sobrescribir sus propiedades. En el caso de usar autenticación HTTP básica hay que seleccionar la política “oracle/wss_http_token_client_policy”.

Seleccionar política de seguridad

4. Una vez seleccionada la política ejecutamos la opción “Override Properties…”. Se abre una nueva ventana en la que podemos definir la credencial a usar. Como no habrá ninguna, debemos crearla: click en “New key…” y entrar los datos de usuario, password y clave que identifica la nueva entrada (ojo: hay que apuntarse esta clave, la volveremos a usar más adelante).

Sobreescribir propiedad

Añadir credencial

5. Aceptar todos los cambios.

En este punto ya hemos definido qué seguridad usará el DataControl y qué credencial va a usar. De todos modos, en este momento, si desplegamos la aplicación nos seguirá dando error. El motivo es que el dominio de Weblogic necesita explícitamente que se le permita a las aplicaciones sobrescribir las credenciales. Para poder dar este permiso hay que modificar el script “setDomainEnv.sh” del dominio. Hay que añadir la siguiente propiedad:

1
2
3
<pre>EXTRA_JAVA_PROPERTIES="${EXTRA_JAVA_PROPERTIES} -Djps.app.credential.overwrite.allowed=true"
export EXTRA_JAVA_PROPERTIES

(nota: el archivo “setDomainEnv.sh” se encuentra en “/ORACLE_HOME/ user_projects/domains/DOMINO/bin”).

Tras modificar el script hay que reiniciar el domino para que el cambio sea efectivo. Llegados a este punto la aplicación aún no va a poder ejecutar el servicio: el error que da ya no es “401 Unauthorized” sino que ahora se queja que no encuentra la credencial en el almacén de llaves. Sólo nos queda añadir al almacén la nueva credencial (la que hemos definido anteriormente en la seguridad de nuestro DataControl).

Para añadirla lo haremos a través de “Fusion Middleware Control” (“Enterprise Manager”). Hacemos login en la consola de FMC (http://servidor:puerto administración/em). Seleccionamos el dominio en el que queremos añadir la credencial, mostramos el menú emergente (click botón derecho del mouse sobre el nombre del dominio) y seleccionamos la opción “Seguridad > Credenciales”.

Seguridad > Credenciales

Se abre una nueva página en la que se muestran los almacenes de credenciales disponibles. En el caso que estamos tratando vamos a añadir la nueva credencial en el almacén por defecto, “oracle.wsm.security”: seleccionamos el almácen y clicamos en “Crear Clave”.

Página de credenciales

Se abre un popup en el que hemos de introducir los datos de la credencial (usario y password) y la clave que la identifica (campo “Clave”). En la clave hay que poner el mismo nombre que el que le hemos puesto en la configuración de seguridad del DataControl.

Nueva clave

Ahora sí, una vez introducida la credencial en el almacén, la aplicación ya va a ser capaz de acceder al servicio web securizado.

Evolución, innovación y transformación
37 especializaciones avaladas por Oracle
Oportunidades ilimitadas
El equipo marca la diferencia
Posts 100% Oracle
Sigue nuestro día a día