Arquitectura de Seguridad
El API JAXR no especifica sus propios mecanismos de seguridad, en su lugar, el API define algunos métodos mínimos
que permiten a las implementaciones elegir su mecanismo de seguridad subyacente.
Los métodos mínimos relacionados con la seguridad del API JAXR están alineados con la "Java Authentication and
Authorization Specification [JAAS]" y las "Java Secure Sockets Extensions [JSSE]".
Estas son partes estándars del JDK 1.4. El soporte para versiones anteriores del JDK está disponible a través de versiones
en solitario de estos paquetes.
Integridad
Para asegurar la integridad de una petición JAXR al proveedor de registro objetivo, el API JAXR proporciona la habilidad para
solicitar que el proveedor de registro esté firmado por un certificado digital. Todos los proveedores JAXR de Nivel 1 deben
ser capaces de enviar peticiones firmadas al proveedor de registro y de recibir respuestas firmadas de éste.
El cliente JAXR no firma directamente las peticiones, ni valida las respuestas firmadas. En su lugar, esta funcionalidad
se delega al proveedor JAXR de Nivel 1.
Confidencialidad
Para asegurar la confidencialidad de una petición JAXR hacia el proveedor de registro objetivo, todo lo que el proveedor
JAXR (Nivel 0 y superior) debe poder hacer es usar SSL para comunicar con un registro que está accesible a través del
protoclo HTTPS. El uso del protocolo HTTPS es transparente para el cliente JAXR excepto en el echo de que la URL
define https como protocolo.
Los proveedores JAXR de Nivel 1 debe ser capaces de envíar peticiones encriptadas al proveedor de registro y de recibir
respuestas encriptadas desde el proveedor de registro. El cliente JAXR no encripta directamente las peticiones, ni
desencripta las respuestas entrantes desde el registro. En su lugar, est funcionalidad está delegada al proveedor
JAXR de Nivel 1.
Autentificación
Desde la perspectiva del proveedor de registro objetivo, es el proveedor JAXR, no el cliente JAXR, el cliente del
proveedor de registro. El proveedor JAXR debe autentificarse con el proveedor de registro según las especificación
del proveedor de registro (por ejemplo, ebXML Registry, UDDI). Normalmente dicha autentificación ocurre sobre
ciertas peticiones privilegiadas. Por ejemplo, en UDDI, la autentificación sólo es necesaria sobre peticiones que usan
el API de publicación de UDDI para enviar, actualizar o borrar contenidos.
En todas las clases, el proveedor JAXR ejemplariza las peticiones de autentificación, mientras que el proveedor de
registro realiza realmente la autentificación.
El cliente JAXR no inicia directamente la autentificación. No sabe si la autentificación con el registro ojetivo
es necesaria o cómo se debe hacer. En su lugar, esta funcionalidad está delegada al proveedor JAXR.
Autorización
El proveedor JAXR no realiza ninguna decisión de autorización. Todas las peticiones del cliente están relegadas,
junto con cualquier token de autentificación requerido. El proveedor de registro podría realizar chequeos de
autentificación de una forma especifica del proveedor de registro e informa de cualquier error de
autentificación. El proveedor JAXR debe mapear cualquier error específico de dicho registro a una
JAXRException y enviarla al cliente.
Soporte de Seguridad en el API JAXR
La siguiente sección describe el soporte de características de seguridad en el API JAXR.
Método Connection.setCredentials
public void setCredentials(Set credentials)
throws JAXRException
Permite al cliente enviar credenciales de seguridad para el usuario que está actualmente asociado con el
cliente. El término credencial tiene el significado definido por el API JAAS.
Un proveedor JAXR debe soportar credenciales en la forma de un certificado digital y clave primara o una
combinación de nombre de usuario y password. Un proveedor JAXR podría soportar otras formas de credenciales
de seguridad si no son soportados por el proveedor de registro objetivo. Por ejemplo, si el UDDI no soporta
certificados digitales, entonces el proveedor JAXR UDDI necesita soportar las credenciales de certificados
digitales.
Cuando un cliente JAXR especifica un certificado digital como una credencial, debe usar un ejemplar de la clase
javax.security.auth.x500.X500PrivateCredential según define el API JAAS.
Cuando un cliente JAXR especifica una combinación de nombre de usuario y password como credencial,
debe usar un ejemplar de la clase java.net.PasswordAuthentication. Esta clase
es un simple contenedor para un nombre de usuario y una password.
Un proveedor JAXR debe poder usar la credencial apropiada desde el conjunto de credenciales para la
Connection mediante la última llamada a setCredentials
con el proveedor de registro de una forma específica del proveedor.