Resumen curso de seguridad para desarrolladores de aplicaciones web, webservices y web APIs
Introducción a los Webservices. Contenidos Definición Definición Protocolos que hacen posible la...
-
Upload
susana-santos-rios -
Category
Documents
-
view
215 -
download
0
Transcript of Introducción a los Webservices. Contenidos Definición Definición Protocolos que hacen posible la...
Introducción a Introducción a los Webserviceslos Webservices
ContenidosContenidos
DefiniciónDefinición Protocolos que hacen posible la Protocolos que hacen posible la
existencia de los Webservicesexistencia de los Webservices Webservices en JavaWebservices en Java EjemploEjemplo
WebservicesWebservices
Los servicios Web proporcionan una Los servicios Web proporcionan una manera de crear aplicaciones que manera de crear aplicaciones que pueden ser accedidas y utilizadas por pueden ser accedidas y utilizadas por diferentes clientes utilizando diferentes clientes utilizando diferentes plataformas.diferentes plataformas.
Permite invocar funciones de otras Permite invocar funciones de otras aplicaciones independientemente de aplicaciones independientemente de cómo se hayan creado las aplicacionescómo se hayan creado las aplicaciones
Permite integración de aplicacionesPermite integración de aplicaciones
WebservicesWebservices
Los Servicios Web son para los Los Servicios Web son para los computadores, lo que las páginas computadores, lo que las páginas Web para los humanosWeb para los humanos
Fortaleza de los WebServices – Fortaleza de los WebServices – basados en estándaresbasados en estándares Protocolos de comunicación Formatos de representación de datos Lenguajes descriptivos Mecanismo de descubrimiento
Protocolos y estándaresProtocolos y estándares
HTTPHTTP XMLXML SOAP, XML-RPCSOAP, XML-RPC WSDLWSDL UDDIUDDI
Protocolos y EstándaresProtocolos y Estándares
HTTPHTTP Un esquema de direccionamiento Un esquema de direccionamiento
comprensible. comprensible. Arquitectura Cliente-Servidor. Arquitectura Cliente-Servidor.
HTTP se asienta en el paradigma HTTP se asienta en el paradigma solicitud/respuesta. La comunicación se solicitud/respuesta. La comunicación se asienta sobre TCP/IP. El puerto por defecto asienta sobre TCP/IP. El puerto por defecto es el 80, pero se pueden utilizar otros. es el 80, pero se pueden utilizar otros.
Protocolos y EstándaresProtocolos y Estándares
HTTPHTTP Es un protocolo sin conexión y sin estado. Es un protocolo sin conexión y sin estado.
Después de que el servidor ha respondido la Después de que el servidor ha respondido la petición del cliente, se rompe la conexión entre petición del cliente, se rompe la conexión entre ambos. ambos.
Está abierto a nuevos tipos de datos. Está abierto a nuevos tipos de datos. Cuando un servidor HTTP transmite Cuando un servidor HTTP transmite
información de vuelta a un cliente, incluye una información de vuelta a un cliente, incluye una cabecera que le indica al cliente sobre los tipos cabecera que le indica al cliente sobre los tipos de datos que componen el documento. de datos que componen el documento.
Protocolos y EstándaresProtocolos y Estándares
XML (XML (eXtended Markup Language) Base de los servicios WebBase de los servicios Web Permite comunicación entre sistemas Permite comunicación entre sistemas
de forma estándarde forma estándar Información con estructuraInformación con estructura Utilizado ampliamente en la industriaUtilizado ampliamente en la industria Futuro estándar de estructuración de Futuro estándar de estructuración de
informacióninformación
Protocolos y EstándaresProtocolos y Estándares
SOAP v/s XML-RPCSOAP v/s XML-RPC Invocación de procedimientos a través de Invocación de procedimientos a través de
protocolos estándarprotocolos estándar XML-RPC . Unix FriendlyXML-RPC . Unix Friendly SOAP . Arquitectura .NETSOAP . Arquitectura .NET Especifican todas las reglas necesarias Especifican todas las reglas necesarias
para ubicar servicios Web XML, para ubicar servicios Web XML, integrarlos en aplicaciones y establecer integrarlos en aplicaciones y establecer la comunicación entre ellos.la comunicación entre ellos.
Incompatibles entre síIncompatibles entre sí
Protocolos y EstándaresProtocolos y Estándares
SOAP v/s XML-RPCSOAP v/s XML-RPC Estandarizados por la W3CEstandarizados por la W3C SOAP lidera en desarrollos de SOAP lidera en desarrollos de
WebservicesWebservices Google posee un servicio Web de Google posee un servicio Web de
búsqueda implementado con protocolo búsqueda implementado con protocolo SOAPSOAP
Protocolos y EstándaresProtocolos y Estándares
SOAPSOAP Protocolo de acceso a objetos simpleProtocolo de acceso a objetos simple soporte completo y minucioso de todo soporte completo y minucioso de todo
tipo de servicios Webtipo de servicios Web Mas potente que XML-RPCMas potente que XML-RPC Incluye toda una arquitectura a su Incluye toda una arquitectura a su
alrededoralrededor
Protocolos y EstándaresProtocolos y Estándares
WSDL y UDDIWSDL y UDDI El archivo WSDL, en formato XML, indica al El archivo WSDL, en formato XML, indica al
sistema que consulte, qué servicios disponesistema que consulte, qué servicios dispone WSDL además da una referencia precisa WSDL además da una referencia precisa
sobre el servicio, para poder invocarlo sobre el servicio, para poder invocarlo usando los parámetros adecuadosusando los parámetros adecuados
UDDI es un Servicio Web en línea que se UDDI es un Servicio Web en línea que se puede utilizar desde las aplicaciones para puede utilizar desde las aplicaciones para descubrir de forma dinámica otros servicios descubrir de forma dinámica otros servicios en líneaen línea
Protocolos y EstándaresProtocolos y Estándares
WSDL y UDDIWSDL y UDDI
Cliente Servicio Web
SOAP
SOAP
Registro UDDIWSDL WSDL
Webservices en JavaWebservices en Java
Apache Axis – Implementación de Apache Axis – Implementación de SOAP para Java y C++SOAP para Java y C++
Continuación del proyecto Apache Continuación del proyecto Apache SOAPSOAP
Deploy de servicios en forma naturalDeploy de servicios en forma natural Requiere un WebServer para operar Requiere un WebServer para operar
(Apache Tomcat)(Apache Tomcat)
Ejemplo deploy simpleEjemplo deploy simple
Cálculo raíz cuadradaCálculo raíz cuadradapublic class Raiz public class Raiz
{{
public double raizCuadrada(String i1)public double raizCuadrada(String i1)
{{
return Math.sqrt(Integer.parseInt(i1));return Math.sqrt(Integer.parseInt(i1));
} }
}}
Guardamos clase con extensión .jws Guardamos clase con extensión .jws en directorio de Axisen directorio de Axis
Ejemplo deploy simpleEjemplo deploy simple XML SOAP generadoXML SOAP generado
<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope <soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body><soapenv:Body> <raizCuadradaResponse <raizCuadradaResponse
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/esoapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/>ncoding/>
<raizCuadradaReturn <raizCuadradaReturn xsi:type="xsd:double">2.0</raizCuadradaReturn>xsi:type="xsd:double">2.0</raizCuadradaReturn>
</raizCuadradaResponse></raizCuadradaResponse> </soapenv:Body></soapenv:Body></soapenv:Envelope></soapenv:Envelope>
Ejemplo deploy simpleEjemplo deploy simple
Cliente que utiliza este WebserviceCliente que utiliza este Webservice
String numero ="465";String numero ="465";
Service service = Service service = newnew Service(); Service();
Call call = (Call)service.createCall();Call call = (Call)service.createCall();
call.setTargetEndpointAddress(call.setTargetEndpointAddress(new new URL("http://localhost:8080/axis/Raiz.jws"));URL("http://localhost:8080/axis/Raiz.jws"));
call.setOperationName(call.setOperationName(newnew QName("http://soapinterop.org/", QName("http://soapinterop.org/", "RaizCuadrada"));"RaizCuadrada"));
Double returnValue = (Double)call.invoke(Double returnValue = (Double)call.invoke(newnew Object[]{numero}); Object[]{numero});
System.out.println("La raiz de "+numero +" es "+returnValue);System.out.println("La raiz de "+numero +" es "+returnValue);
Ejemplo deploy simpleEjemplo deploy simple Tipos de datos estandarizadosTipos de datos estandarizados
xsd:base64Binaryxsd:base64Binary byte[]byte[] xsd:booleanxsd:boolean booleanboolean xsd:bytexsd:byte bytebyte xsd:dateTimexsd:dateTime java.util.Calendarjava.util.Calendar xsd:decimalxsd:decimal java.math.BigDecimaljava.math.BigDecimal xsd:doublexsd:double doubledouble xsd:floatxsd:float floatfloat xsd:hexBinaryxsd:hexBinary byte[]byte[] xsd:intxsd:int intint xsd:integerxsd:integer java.math.BigIntegerjava.math.BigInteger xsd:longxsd:long longlong xsd:shortxsd:short shortshort xsd:stringxsd:string java.lang.Stringjava.lang.String xsd:QNamexsd:QName javax.xml.namespace.QNamejavax.xml.namespace.QName
Deploy más elaboradoDeploy más elaborado Ejemplo: Webservice que retorna una clase creada por nosotrosEjemplo: Webservice que retorna una clase creada por nosotros
public class Archivo implements Serializable public class Archivo implements Serializable {{
public String Nombre;public String Nombre;public byte[] Datos;public byte[] Datos;public Archivo(){}public Archivo(){}
public void setNombre(String param_Nombre){public void setNombre(String param_Nombre){Nombre = param_Nombre;}Nombre = param_Nombre;}
public void setDatos(byte[] param_Datos){public void setDatos(byte[] param_Datos){Datos = param_Datos;}Datos = param_Datos;}
public byte[] getDatos()public byte[] getDatos() {{return Datos;return Datos; }}
public String getNombre(){public String getNombre(){return Nombre;}return Nombre;}
}}
Deploy más elaboradoDeploy más elaborado Archivo WSDDArchivo WSDD
<deployment xmlns="http://xml.apache.org/axis/wsdd/" <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="EventosServidor" provider="java:RPC"><service name="EventosServidor" provider="java:RPC"> <parameter name="className" <parameter name="className"
value="WS_EventosServidor"/>value="WS_EventosServidor"/> <parameter name="allowedMethods" value="*"/><parameter name="allowedMethods" value="*"/>
<beanMapping qname="myNS:Archivo" <beanMapping qname="myNS:Archivo" xmlns:myNS="urn:BeanService"xmlns:myNS="urn:BeanService"
languageSpecificType="java:Archivo"/>languageSpecificType="java:Archivo"/> </service></service></deployment></deployment>
Deploy más elaboradoDeploy más elaborado ClienteCliente
Service service = Service service = newnew Service(); Service();Call call = (Call)service.createCall();Call call = (Call)service.createCall();QName archivoqn = QName archivoqn = newnew QName("urn:BeanService","Archivo"); QName("urn:BeanService","Archivo");call.setOperationName( "descargaEventos" );call.setOperationName( "descargaEventos" );call.registerTypeMapping(Archivo.call.registerTypeMapping(Archivo.classclass,archivoqn,,archivoqn,newnew
BeanSerializerFactory(Archivo.BeanSerializerFactory(Archivo.classclass,archivoqn),,archivoqn),newnew BeanDeserializerFactory(Archivo.BeanDeserializerFactory(Archivo.classclass,archivoqn),,archivoqn),falsefalse); );
call.registerTypeMapping(Archivo.call.registerTypeMapping(Archivo.classclass,archivoqn,,archivoqn,newnew BeanSerializerFactory(Archivo.BeanSerializerFactory(Archivo.classclass,archivoqn),,archivoqn),newnew BeanDeserializerFactory(Archivo.BeanDeserializerFactory(Archivo.classclass,archivoqn));,archivoqn));
call.setTargetEndpointAddress(call.setTargetEndpointAddress(newnew URL("http://localhost:8080/axis/services/EventosServidor"));URL("http://localhost:8080/axis/services/EventosServidor"));
Archivo[] returnValue = (Archivo[])call.invoke(Archivo[] returnValue = (Archivo[])call.invoke(newnew Object[] Object[]{Fecha,Hora});{Fecha,Hora});
FinFin