Download Introducción a Web Services

Document related concepts
no text concepts found
Transcript
3er Congreso Interamericano de
Administración Universitaria
Visión de Web Services
con J2EE
Héctor Jiménez
Arquitectura e Integración de aplicaciones
Dirección de Tecnología
QoS Labs
Agenda
• Introducción a Web Services
• Web Services: que son, estándares e implementaciones
• Desarrollo de Web Services en Java
• Arquitectura de Web Services en J2EE – JAX-RPC
• Ejemplos de implementación de servicio con JAXRPC
• Modelos de programación para clientes de Web Services
• Web Services y Seguridad
• Estándares e implementaciones en J2EE
• Ejemplos
Agenda
• Integración e Interoperabilidad J2EE usando Web Services
• Procesos de negocio en Web Services (BPEL)
• WS-I
• Consideraciones generales
• Ejemplo de Web Services en Sector Financiero
• Trayectoria de Web Services
• Adopción de tecnología de Web Services actual: simple, EAI y B2B
• Colaboración en negocio: ebXML, EDI, RosettaNet, BizTalk
Comenzamos
• Introducción a Web Services
• Desarrollo de Web Services en Java
• Web Services y Seguridad
• Integración e Interoperabilidad J2EE usando Web Services
• Trayectoria de Web Services
Introducción a Web Services
• Qué es un Web Service:
Infraestructura independiente de lenguaje y plataforma para comunicación
aplicación – aplicación desacoplada e interoperable sobre una Internet
• Independiente de lenguaje y plataforma: Separación de la especificación y la
implementación
• Desacoplada: Basa en mensajes con interacción síncrona y asíncrona
• Sobre una Internet: No existe control centralizado, se usan protocolos bien
establecidos y consideraciones de seguridad
• Interoperable: Basado en estándares
• Aplicación – Aplicación: Internet tradicional es Aplicación – Humano (SMTP, FTP,
HTTP); esquemas RPC (procedural), ORB y COM (objetos), MOM (mensajes –
jms/mq) para aplicación – aplicación dentro de una Internet sin considerar interoperar
con otros sistemas
Introducción a Web Services
• Comunicación entre Aplicaciones en Web Services
• Protocolo de Transporte:
• HTTP/HTTPS
• Codificación de datos
• Protocolo SOAP (Simple Object Access Protocol) y Esquema XML (DTD/XSD)
• Descripción de interfaces o puntos de acceso a aplicación
• WSDL (Web Services Description Language)
• Descripción de servicio y descubrimiento
• UDDI (Universal Description, Discovery and Integration)
• Seguridad
• WS-Security, XML Signature y XML Encription (Especificaciones JSR)
Introducción a Web Services
• Protocolo SOAP
• Protocolo basado en XML para intercambio de información
Mensaje SOAP
Parte principal
(text/xml)
“Sobre” SOAP
(Envelope)
Encabezado
(Header)
Enrutamiento
Seguridad
Attachment
.
..
Attachment
Cuerpo
(Body)
Contenido
Introducción a Web Services
• Protocolo SOAP
POST /axis/services/MessageService HTTP/1.0
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.2RC1
Host: localhost:5050
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: ""
Content-Length: 409
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:e1 xmlns:ns1="urn:foo">Hola</ns1:e1>
<ns2:e1 xmlns:ns2="urn:foo">Mundo</ns2:e1>
<ns3:e3 xmlns:ns3="urn:foo">Datos adicionales</ns3:e3>
</soapenv:Body>
</soapenv:Envelope>
Introducción a Web Services
• Definición de Web Services: WSDL
• Propuesta de IBM y Microsoft
<definitions>
Define el servicio llamado ServicioSumaNumeros y los nombres de
espacio para el documento XML (targetNamespace)
<message>
Define 2 mensajes: Solicitud y Respuesta c/u con 1 parámetro (part) de
tipo String que está definido según el estándar de XML Schema con el
namespace xsd referenciado en <definitions>
<portType>
<binding>
Define una operación llamada suma que se compone de un mensaje de
entrada (param) y otro de salida (valor) identificado con el namespace
xsd1. Los patrones de operaciones son: input, input y output, output e
input y output (notificación) que pueden incluir un fault
Especifica cómo el puerto se va a transmitir (HTTP GET, HTTP POST o
SOAP) y el estilo o formado el mensaje: RPC o Document.
Especifica la ubicación del servicio y una descripción
<service>
Introducción a Web Services
• Ejemplo de definición de servicio en WSDL: Servicio de Suma de
Números
Introducción a Web Services
• Formas de serialización de datos
• Se usan definiciones de XML Schema (Literal) para determinar cómo codificar los
datos
• Se usa reglas de codificación de SOAP (Encoding)
• Resultado de 4 combinaciones: Document/Literal, RPC/Encoding,
Document/Encoding, RPC/Literal
• SOAP Document/Literal encoding más aceptado y usado, recomendado
por Web Services Interop (WS-I) Basic Profile.
• Usar RPC cuando: dentro de misma empresa (ambiente confiado), se
requiere confiabilidad, se tiene suficiente ancho de banda, proceso de
negocio corto, comunicación síncrona y punto a punto (en vez de “endto-end”).
Introducción a Web Services
• Formas de interpretación de documentos SOAP
• RPC (Remote Procedure Call): cada atributo part del WSDL de la operación indica un
parámetro o un valor de respuesta que se encuentra dentro del cuerpo del mensaje de
SOAP
<binding name="SumaNumerosBinding" type="tns:SumaNumerosPort">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="Suma">
<input>
<soap:body use="encoded" namespace=http://www.qoslabs.com”
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace=http://www.qoslabs.com”
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
<fault name="error">
<soap:fault name="error" use="literal"/>
</fault>
</operation>
</binding>
Introducción a Web Services
• Formas de interpretación de documentos SOAP
• Document: El mensaje es directamente el body de SOAP
<binding name="SumaNumerosBinding" type="tns:SumaNumerosPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="Suma">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="error">
<soap:fault name="error" use="literal"/>
</fault>
</operation>
</binding>
Introducción a Web Services
• Esquemas XML
• Sistema o lenguaje de definición de tipos de datos para XML.
Tradicionalmente definido en DTD / XML Infoset (abstracto),
evolución a espacios de nombres (Namespaces) con XML 1.0
<?xml version="1.0" encoding="UTF-16" ?>
<ns:estudiante xmlns:ns="xyzzy:abc">
<nombre>David</nombre>
<edad>21</edad>
</ns:estudiante>
• XML Schema Definition Languaje (XSD) permite asociar tipos de
datos con elementos y atributos
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="xyzzy:abc"
targetNamespace="xyzzy:abc">
<xsd:complexType name="persona" >
<xsd:sequence><xsd:element name="nombre" type="xsd:string"/>
<xsd:element name="edad" type="xsd:double" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="estudiante" type="tns:persona" />
</xsd:schema>
Introducción a Web Services
• Esquemas XML
• Mapeo entre un esquema XML y la programación del sistema no es
fácil
• Estructuras de datos no soportadas en esquema XML (arreglos,
referencias, etc)
Sistema
Clase Java
Clase Java
Cuerpo
(Body)
Esquema
ComplexType
ComplexType
Donde vamos?
• Introducción a Web Services
• Desarrollo de Web Services en Java
• Web Services y Seguridad
• Integración e Interoperabilidad J2EE usando Web Services
• Trayectoria de Web Services
Desarrollo de Web Services en Java
• Arquitectura de Web Services en J2EE: JAXRPC
• Basada en JAXRPC 1.1 (Java API for XML-Based RPC) y JSR 101. Especificación
para la construcción de aplicaciones y servicios Web que incorpora funcionalidad RPC
basada en XML de acuerdo al estándar SOAP 1.1. Versión 2.0 de especificación
JAXRPC en proceso de revisión por Java Community Process (Junio 2004)
• Conjunto de puertos que operan sobre mensajes, los puertos operan dentro de un
contenedor J2EE. Implementación JAX-RPC 1.1 especifica uso de Servlet para acceso
a puerto de servicio, JSR 109 emplea EJB 2.1.
• Implementación incluída en JWSDP 1.4 (Java Web Services Developer Pack)
• Herramientas:
• WSDL desde/hacia Java
• Serialización de tipos de Java desde/hacia XML
• Empaquetamiento para aplicaciones web J2EE
• Modelos de programación de clientes
Desarrollo de Web Services en Java
• Arquitectura de Web Services en J2EE: JAXRPC
Puerto Servicio
JAXRPC
Documento WSDL
Cliente
JAXRPC
Java < WSDL
WSDL > Java
Código Generado
wscompile
wsdeploy
Runtime JAXRPC
(Stub)
Contenedor
Runtime JAXRPC
(Tie)
SOAP
HTTP
Desarrollo de Web Services en Java
• Mapeo WSDL < > Java en JAXRPC
<portType name="Servicio">
<operation name="Operacion">
<input message="tns:Consulta"/>
<output message="tns:Respuesta"/>
</operation>
</portType>
portType = Interfaz Abstracta en Java
operation = Metodo de clase
message = parámetros y valores de regreso según codificación
public interface Servicio extends java.rmi.Remote {
public String Operacion(String param) throws java.rmi.RemoteException;
}
Desarrollo de Web Services en Java
• A partir de definición WSDL ó a partir de clases java
• Uso de herramientas (IDE, Ant)
• Pasos generales para generación de Web Service
• wsdl2java – Generación de clases de tipos y operaciones
wscompile.sh -import -d ./classes -keep -s ./src -f:serializeinterfaces,wsi -verbose -model ./
ServicioSumaNumeros_model.xml.gz ./config.xml
•Modificar código generado (implementación de lógica de web
service) - recompilar
•Generar clases de servicio
wscompile.sh -gen:server -classpath ./classes -d ./classes -keep -s ./src -verbose config.xml
•Crear estructura de aplicación web (WAR)
•Instalación de aplicación web en servlet container
Desarrollo de Web Services en Java
• Ejemplo de implementación de servicio (Suma Numeros)
Desarrollo de Web Services en Java
• Modelos de programación para clientes de Web Services
• Stub
• Se genera(n) clase(s) al compilar y están ligadas a transporte
del XML (HTTP o SOAP)
• Se implementa javax.xml.rpc.Stub
• Se utilizan clases particulares de API de implementación
(JAXRPC, AXIS)
• Mejor rendimiento, método menos dinámico
• Ejemplo de cliente Stub
Desarrollo de Web Services en Java
• Modelos de programación para clientes de Web Services
• Dynamic Proxy: Interfaz WSDL creada al momento de compilación
pero la implementación de proxy en cliente se hace en “runtime”
• Se genera “al vuelo” durante ejecución de cliente, no al
compilar
• El servicio proporciona la definición (WSDL) que el proxy
acuerda durante ejecución
• Más fácil de programar pero mas lento que Stub
• Ejemplo de cliente Proxy
Desarrollo de Web Services en Java
• Modelos de programación para clientes de Web Services
• Dynamic Invocation Interface (DII): Tanto el WSDL como la
implementación misma del cliente se hace en “runtime”
• Control completo al programador del cliente
• Método más dinámico pero mayor complejidad en programación
• Cliente encuentra servicio e invoca vía Broker
• Usar cuando no se conoce la definición hasta ejecución (no al
compilar)
• Ejemplo de cliente DII
Donde vamos?
• Introducción a Web Services
• Desarrollo de Web Services en Java
• Web Services y Seguridad
• Integración e Interoperabilidad J2EE usando Web Services
• Trayectoria de Web Services
Web Services y Seguridad
• Seguridad en Web Services: Panorama general de estándares
• W3C (World Wide Web Consortium)
• XML Encription, XML Signature, SOAP
• IETF (Internet Engineering Task Force)
• SSL, TLS, HTTP sobre SSL/TLS, HTTPS
• OASIS (Organization for the Advancement of Structured Information
Standards)
• Web Services Security (WSS), SOAP message level security,
SAML
Web Services y Seguridad
• Seguridad en Web Services: Panorama general de estándares
Draft Inicial
Estabilidad
Draft Maduro
V1 Completa
Web Services y Seguridad
• Seguridad en Web Services: Implementación en J2EE
• JAXRPC utiliza XWS-Security APIs para seguridad en Web
Services bajo los siguientes estándares:
• XML-DSig (Apache/W3C) para firmas digitales
• XML-Enc (Apache/W3C) para encripción de mensajes
• Tokens de usuario y certificados X.509 para autenticación
basados en OASIS WSS Username Token Profile 1.0 y OASIS
WSS X509 Certificate Token Profile 1.0
• JSR 105 es estándar para firmas digitales y JSR 106 es estándar
para encripción, no usados por JAXRPC (versiones futuras)
• Base de datos certificados basada en JKS (Java Key Store)
Web Services y Seguridad
• Capas de seguridad
• Nivel Transporte: Autentificación básica, autentificación por
certificado sobre SSL/TLS. Codificación de usuario/contraseña en
stub de cliente, puerto de servicio en HTTPS con J2EE security
constraints.
• Nivel Mensaje: Información de seguridad dentro de mensaje SOAP
(encabezado) por ejemplo: la firma de contenido, certificado x.509
de remitente. Problemas con administración de infraestructura PKI
en B2B
• Formatos de mensaje en desarrollo por OASIS por lo cual es EA en
XWS-Security de JWSDP
• JAXRPC utiliza Handlers: puntos de intercepción en el
procesamiento del mensaje entre cliente y servicio
Web Services y Seguridad
• Ejemplo de implementación de WSS (Pago Electronico):
• Encripción de mensajes SOAP
• Autentificación vía certificados X.509
Cliente
Msg Firmado = SpK1(M),PK1
Server
(Tomcat)
Msg Encriptado = EPK2(M)
JKS contiene:
a)pK1 y PK1 de cliente
b)PK2 de server
JKS contiene:
a)pK2 y PK2 de server
b)PK1 de cliente
Hash de msg a partir de pK1
y envío de PK1 (para verific
por parte de server)
Desencripción usando pK2
Encripción de msgusando PK2
p = Llave privada
P = Llave pública
Donde vamos?
• Introducción a Web Services
• Desarrollo de Web Services en Java
• Web Services y Seguridad
• Integración e Interoperabilidad J2EE usando Web Services
• Trayectoria de Web Services
Integración e Interoperabilidad
• Procesos de negocio con Web Services
• Especificación de Business Process Execution Languaje (BPEL) for
Web Services 1.1 por IBM
• BPEL es un lenguaje en XML para describir el comportamiento de
un proceso de negocio basado en Web Services
• Acceso a ciertos procesos de negocio para otras empresas de
manera estándar: proveedores, distribuidores, cadena de
aprovisionamiento
• Ejemplo de implementación ActiveBPEL
Integración e Interoperabilidad
• WS-I
• Esfuerzo para proveer interoperabilidad para Web Services entre
aplicaciones, lenguajes de programación y plataformas: Microsoft,
IBM, Sun
• No genera especificaciones o estándares, más bien genera perfiles,
marcos de referencias para pruebas de interoperabilidad
(conformance)
• J2EE 1.4 provee compatibilidad para Web Services según WS-I
para: WSDL, SOAP y WSS. Implementado en JWSDP
• Provee escenarios de compatibilidad, herramientas para el análisis
de configuraciones (WSDl/UDDI) así como para monitoreo de
mensajes
Integración e Interoperabilidad
• Consideraciones generales de integración para Web Services
• Abuso de Web Services en sistemas (sobrecarga adicional)
• Limitaciones en el uso de tipos de estructuras de datos cuando se
utilizan diferentes implementaciones (.NET, Java)
• Implementaciones de estándares de Web Services carecen de WSS
• Federación de identidad no madura entre implementaciones,
requiere de infraestructura de identidad
• Mecanismo adecuado para Service Oriented Architectures (SOA),
principalmente como enlace entre los procesos de negocio de
empresas
Web Services Sector Financiero
• Web Service para Sector Financiero
• Arquitectura SOA
• Estandarización de estructura de transacciones: IFX
• Seguridad en transacciones
• Crecimiento hacia exterior/interior con procesos de negocio
• Ejemplos de implementación
Web Services Sector Financiero
WF
App
Mainframe Msg
App
J2EE Web
App
WS
Orq
WSS
BD
LDAP
IDs
Sincronización
Auditoría
Rep1
Rep2
Identidad
Rep3
Rep4
Consumidores
Donde vamos?
• Introducción a Web Services
• Desarrollo de Web Services en Java
• Web Services y Seguridad
• Integración e Interoperabilidad J2EE usando Web Services
• Trayectoria de Web Services
Trayectoria Web Services
• Adopción de tecnología de Web Services actual
• Actualmente se implementan (México) muy pocos Web Services y
son simples, orientados a consumidores, sin estado
• Principalmente en EUA se ha iniciado la implementación de Web
Services estilo EAI (Enterprise Application Integration), con frontera
la misma organización
• A corto plazo: B2B, implementando Web Services para extranet con
el fin de habilitar integración con los procesos de negocio de la
empresa hacia socios, clientes y otros
Trayectoria Web Services
• Colaboración de negocio: ebXML, EDI, RosettaNet y BizTalk
• Limitantes en WSDL, SOAP y UDDI: no resuelven colaboración de
negocio, no hay repositorio de objetos de negocio
• EDI muy “pesado”, requiere de VPN y “personalización” para cada
negocio
• RosettaNet provee definiciones muy rígidas y no ofrece
descubrimiento
• BizTalk es propietario, una sola plataforma y no existe concepto de
colaboración de negocio o perfil de socios
• ebXML: crear una comunidad de comercio electrónica donde
empresas de cualquier tamaño puedan localizarse y llevar a cabo
negocio a través del intercambio de mensajes XML
• Especificaciones para Procesos de negocio, modelo de registro y
servicios, mensajería y colaboración entre socios
• JAXR provee API para registros basados en ebXML
Trayectoria Web Services
• Colaboración de negocio: ebXML
Trayectoria Web Services
• Colaboración de negocio: ebXML
Web Services
+
ebXML
Tipo
Request/Response
Colaboración
Comunicación
RPC/Document
Síncrona/Asíncrona
Descr. Servicio
WSDL
CPP, CPA (WSDL
dentro de CPP/CPA)
Protocolo
SOAP, XML
ebXML Message Service
sobre SOAP, XML o BPSS
Estándar de
contenido
Ninguno
EDIFACT, OAGI, BODs,
UBL, etc
Localización
UDDI Registry
ebXML Registry
Trayectoria Web Services
• Rendimiento: Fast Web Service
Protocolo vs. Tiempo
20 elementos
Preguntas