Web Services de Marcelo Iury - DSC

insidiousbehaviorSecurity

Nov 3, 2013 (3 years and 11 months ago)

60 views


Desenvolvimento de Aplicações
Corporativas Avançadas


Web Services



Marcelo Iury

iury@dsc.ufcg.edu.br

Agenda


Introdução


Web Service


Arquitetura


Soluções


Passos básicos


Implementando com Apache Axis


Novos protocolos


Conclusão





O cenário de TI nas corporações


Novas tendências

batiam à porta das
corporações


Migraram o foco do “
gerenciamento de dados
” para o

gerenciamento dos processos e clientes



Redesenho dos processos

e implantação dos grandes
sistemas de gestão empresarial (ERP)


Sucesso da Internet


Disponibilizar

parte das
informações

corporativas a
usuários ou sistemas que extrapolam as fronteiras
corporativas


E
-
commerce



Enterprise Application Integration


A
diversidade

de sistemas coexistindo nas
empresas é
enorme


Grandes pacotes comerciais a aplicações
desenvolvidas sob
-
medida


Diferentes “software houses”


Diferentes tecnologias (host
-
centric, cliente
-
servidor, n
-
tier, etc),


Diferentes plataformas (mainframes, Unix,
Windows, etc).

Service Oriented Architecture (SOA)


SOA é uma arquitetura que representa
funcionalidades do software como
serviços


Já existiam tecnologias para SOA


Ex.: CORBA, RMI, etc...


Interoperabilidade é muito importante


Padronização


Fraco acoplamento


Exemplo: Aplicação 3 camadas

Data Layer

Presentation

Layer

Business

Layer

Aplicação Central Compras

boa arquitectura

DNA

Interface da aplicação
dá acesso aos dados
aplicacionais

Service Oriented Architecture

Data Layer

Presentation

Layer

Business

Layer

Serviço Central Compras

Service

Façade

UI

boa arquitectura

3
-
tier service

troca de mensagens

Dados e Lógica Negócio
encapsulados por uma
Web Service Façade


Interface desacoplado
da lógica de
processamento dos
dados

Web Service Standards
permitem ligações

cross
-
platform

Automação de Processos de Negócio

Serviço Central Compras

UI Processo Compras

Serviço RH

Serviços Contabilidade

Business

Process

Automation

Múltiplos serviços
combinados num único
processo de negócio

integração com diferentes
plataformas

Web Services

Visão Tecnológica



Web Services é uma tecnologia de
chamada
remota de objetos


Permite a
infra
-
estrutura

para criação

de
aplicações distribuídas (web ou não)


Permitem a criação de pequenos módulos de
código reutilizáveis e disponibilizados para
construção de
aplicações “
LEGO



Utiliza protocolos
Web como meio de transporte

e comunicação


Alto grau de
abstração

em relação a
linguagens

de programação e
plataformas

de hardware /
software

Implementation





Data

Business

Logic

Message

Description

Discovery

Transport

.NET/J2EE





Data

Business

Logic

SOAP / XML

WSDL

UDDI

HTTP(S)

Arquitetura Web Service

Invocação de Web Services

Web Server

(e.g. Apache Tomcat)

Web Service Toolkit

(e.g. Apache Axis)

Client

(e.g. CalcClient.java)




SOAP Binding



SOAP Request

Web Service

Code

(e.g. Calculator.java)



Java to SOAP

Java

Java

SOAP

to Java

<soap:Envelope


<soap:Body>


<add>



<i1>10</i1>


<i2>5</i2>


</add>


</soap:Body>

</soap:Envelope>

calculator.add(10, 5)

add(10, 5)

Vantagens



Padrão adotado pelo
W3C

e pela
indústria.



Atravessa
firewalls
,
roteadores

e
servidores de proxy.



Abordagem
simples

e
fácil

de distribuição
e de interoperabilidade.


Consórcio WS
-
I
-

www.ws
-
i.org


Garantir a interoperabilidade



Padrões abertos



Independente de plataforma


170+ fabricantes software envolvidos


Interoperabilidade entre plataformas,
aplicações e linguagens


Maior evidência de que a indústria está
alinhada com os web services

www.ws
-
i.org



Soluções

Fatores decisivos para a escolha


Maturidade da solução


Integração com IDEs


Reutilização da segurança


Escalabilidade (implementação
server
-
side

e
stateless
)


Documentação


Tecnologias mais conhecidas


Framework .NET



Java


Apache Axis


JaxRPC


IBM SOAP Toolkit


Qualquer plataforma

que tenha rotinas de
comunicação
HTTP

e saiba manipular
dados em
XML

pode implementar Web
Services.


Passo 1: Definição do serviço


SOA


Service Oriented Architecture


Um
serviço

é uma função bem definida
, auto
-
contida e que não depende do estado ou
contexto de outros serviços;

Passo 2: Implementação


Implementação do serviço:


O
serviço
a ser fornecido via
web service

deve
ser
identificado e “isolado
” em uma API
tipicamente
stateless;


Normalmente este
serviço
já está
implementado no “legado”,

bastando definir e
implementar uma API para seu acesso na
plataforma original.

Passo 3: Value Objects


Parâmetros de entrada e saída:


A API de um serviço deverá conter apenas
tipos “compatíveis” com
web services

(tipos
básicos,
strings
,
arrays
tipados ou estruturas


VOs


destes tipos.

Passo 4: Criação do WS


Definições de interesse público:


Definição da API
(
e
value objects);


Geração da definição formal do
web service

(WSDL);


Se VOs forem compatíveis, o WSDL conterá uma
descrição completa das estruturas de dados (mesmo as
complexas);


O WS é, na prática, implementado por uma aplicação
web

comum (HTTP/HTTPS), sem o uso de qualquer
extensão proprietária.

Passo 5: Publicação do WS


A publicação do
web service
é, fisicamente,
como a
publicação de uma aplicação
web

comum


A definição pública do
web service

(WSDL)
estará disponível para
download

pela própria
aplicação
web
que o implementa


API de
web services

será estável


modificações e atualizações serão divulgadas
com antecedência

Passo 6: Consumo do WS


Geração do cliente:


Acesso à definição do
web service
(WSDL) é
tudo que basta;


IDEs têm a capacidade de gerar
stub

cliente a
partir do WSDL;

Apache Axis


A SOAP Processing Engine


JAX
-
RPC Client System


JAX
-
RPC Server System ( Servlet based )


SAAJ


Arquitetura extensível e flexível


Tools, Exemplos, Documentação, …


Uma boa para começar com Web Services.


Open
-
source, Apache Software
Foundation


Executando

Apache AXIS


Instalação


Apache Tomcat (version 4.1.x)


http://jakarta.apache.org/tomcat/


Java


http://java.sun.com/


Apache Axis


http://ws.apache.org/axis/

Teste


Happy Axis


http://localhost:8080/axis


public class Calculator{


public int somar(int numA, int numB){


return numA + numB;


}


public int subtrair(int numA, int numB){


return numA
-

numB;


}



public int multiplicar(int numA, int numB){


return numA * numB;


}

}

Exemplo simples

Publicando WS com Axis


Depende da utilização de tipos
complexos.



Tipos Primitivos


Copie

o arquivo “.java” para a pasta
webapps

do TomCat e trocando sua
extensão

de “.java”
para “.
jws




Tipos Complexos


Deve
-
se prover o servidor da
habilidade de
desserializar / serializar

os objetos complexos.



Deployment Descriptors


JWS é bastante simples, mas possui limitações
:


Código
-
fonte


Não pode especificar
handlers
, mapeamentos,
dispatchers



O
WSDD

( Web Services Deployment
Descriptors ) é um mecanismo que
facilita

a
instalação e configuração de um WS permitindo:


Tipo de Mapeamento


Diferentes tipos de transporte


HTTP/S e CP/IP


Anexos Binários


Etc.


Publicando um WS usando WSDD


Escrevemos

um
WSDD

com os dados de
configurações que desejamos para o nosso
Web Service.


Copiamos
os arquivos “.
class
” que utilizamos no
Web Service para a pasta
/WEB
-
INF/classes

do
Axis.


Realizamos um
deploy
do WSDD
utilizando

a
ferramenta
AdminClient

do
Axis

com o seguinte
comando:


Java org.apache.axis.client AdminClient deploy.wsdd



Publicação de Web Services com Apache Axis

Consumindo o Web Service (Cliente)


Dynamic Invocation Interface

( DII)


Geração
Stubs

a partir do Service WSDL
description


Pacotes


-

axis.jar

-

jaxrpc.jar

-

commons
-
logging.jar

-

commons
-
discovery.jar

-

saaj.jar

-

wsdl4j.jar

Consumindo um WS usando DII

import javax.xml.rpc.Call;

import javax.xml.rpc.Service;

import javax.xml.namespace.QName;


public class CalculadoraClient {


public static void main(String [] args) {


try {


String endpoint = "http://localhost:8080/axis/calculadora.jws";


Service service = new Service();


Call call = (Call) service.createCall();


call.setOperationName(new QName(endpoint, “somar"));


call.setTargetEndpointAddress( new java.net.URL(endpoint) );


Integer ret = (Integer)call.invoke(new Object[]{new Integer(5), new Integer(6)});


System.out.println(“somar(5, 6) = " + ret);


} catch (Exception e) {


System.err.println("Execution failed. Exception: " + e);


}


}

}

Consumindo um WS usando Stubs

Import localhost.*;

public class CalculadoraClient{


public static void main(String [] args) {


try {


CalculadoraService calcSF = new CalculadoraServiceLocator();


Calculadora calc = calcSF.getCalculadora();


System.out.println(“somar(5, 3) = " + calc.somar(5, 3));


} catch (Exception e) {


System.err.println("Execution failed. Exception: " + e);


}


}

}

Generate the stubs:

java org.apache.axis.wsdl.WSDL2Java
\


http://localhost:8080/axis/Calculadora.jws?wsdl

Generating Stubs, Compiling and
Running the Stub Client


Clique com o botão direito
do mouse sobre o arquivo,
selecione a opção
WSDL2Java e depois
clique em Generate. As
classes serão criadas num
pacote padrão.

Consumindo WS usando WSDL2Java

Himalayan X Alpine style


Alpine: a proposed alternative


Abraçe XML & XPath


Use as ferramentas
XML mais recentes


Esqueça rpc/encoded
SOAP


Queued/Asynchronous
API


WSDL
-
first

Novos Protocolos

Limitações actuais:


Segurança?


Garantias de Entrega?


Transações?


Outros Transportes?


Mensagens Assíncronas (One
-
Way)?


Encaminhamento (Routing/Addressing)?


Outros padrões (Ex: Pub/Sub)?

Connected


Applications

Management

Business

Process



Security

Reliability

Transactions

Messaging

XML

Metadata

HTTP

TCP

SMTP




Messaging Specifications

SOAP

WS
-
Addressing

MTOM (Attachments)

WS
-
Eventing





Security Specifications

WS
-
Security

WS
-
SecureConversation

WS
-
Trust

WS
-
Federation

WS
-
Federation Active
Requestor Profile

WS
-
Federation Passive
Requestor Profile

Web Services Security
Kerberos Binding






Reliable Messaging
Specifications

WS
-
ReliableMessaging






Transaction Specifications

WS
-
Coordination

WS
-
AtomicTransaction

WS
-
BusinessActivity






Metadata Specifications

WSDL

UDDI

WS
-
Policy

WS
-
PolicyAssertions

WS
-
PolicyAttachment

WS
-
SecurityPolicy






XML Specifications

XML

Namespaces in XML

XML Information Set

XInclude



Web Services Protocols (WS
-
*)

Security in a Web Services World


IBM/MSFT White Paper

http://msdn.microsoft.com/library/en
-
us/dnwssecur/html/securitywhitepaper.asp

Abril 2002


WS
-
Security Specification


http://www.oasis
-
open.org/committees/tc_home.php?wg_abbrev=wss

Security

Privacy

Trust

Policy

Authorization

Federation

SecureConversation

SOAP Foundation

Hoje

Web Services Security Roadmap

Conclusão

Existe muita propaganda sobre Web
Services


Primeiramente: Eu adoro WS!!!


O formato texto aumenta muito o overhead


Não existe
“neutralidade”

de transporte


Diferentes versões

de padrões


Existem muitos padrões que “interagem”, mas
não definem nenhuma restrição para
interagirem


UDDI
não atende

as necessidades


Ferramentas de
geração automática atrapalham


Não

existe interoperabilidade
100%

WS
-
*


ASAP (Asynchronous Service Access Protocol), BPEL4WS (Business
Process Execution Language), ebSOA TC (Electronic Business Service
Oriented Architecture), ebXML (Electronic Business XML), International
Health Continuum TC, oBIX TC , SAML (Security Assertion Markup
Language), SOAP (Simple Object Access Protocol), SOAP MTOM (SOAP
Message Transmission Optimization Mechanism), ranslation WS TC , UBL
(Universal Business Language), UDDI (Universal Description, Discovery,
and Integration), WS
-
Addressing, WS
-
AtomicTransaction, WSBPEL
(Business Process Execution Language), WS
-
CAF (WS Composite
Application Framework ), WS
-
CF (WS Coordination Framework), WS
-
Choreography , WS
-
CDL (Web Services Choreography Description
Language), WS
-
Coordination, WS
-
CTX, WS Context, WS
-
Discovery (Web
Services Dynamic Discovery), WSDL (WS Description Language), WSDM
(WS Distributed Management), WS
-
Enumeration, WS
-
Eventing, WS
-
Federation (Web Services Federation Language), WSIL (WS Inspection
Language), WS
-
Manageability, WS
-
MetadataExchange (Web Services
Metadata Exchange), WS
-
MessageDelivery, WS
-
Notification, WS
-
Policy,
WS
-
Provisioning, WS
-
Reliability, WS Reliable Messaging, WS
-
RF (WS
-
Resource Framework), WS
-
Reliablemessaging , WSRP (WS Remote
Portals), WS
-
Security, WS
-
SecureConversation, WS
-
SecurityPolicy, WS
Security Services TC, WS
-
TM (WS Transaction Management), WS
-
Transfer, WS
-
Trust, XML
-
Encryption, XML
-
Signature


Java Web Services Developer Pack
2.0


Fast Infoset


Service Registry


XML


JAXB


JAXP


JAXR


JAX
-
RPC


SAAJ


JAXM


XML Web Services Security


Service Registry


Sun Java Streaming XML Parser


JSTL

Web Services Project @ Apache


Addressing (WS
-
Addressing)


Axis (SOAP)


EWS (J2EE 1.4)


JaxMe (JAXB)


jUDDI (UDDI)


Kandula (WS
-
Coordination, WS
-
AtomicTransaction, WS
-
BusinessActivity)


Mirae (J2ME)


Muse (WSDM MUWS)


Pubscribe (WS
-
Notification)


Sandesha (WS
-
ReliableMessaging)


Scout (JAXR)


Woden (WSDL 2.0)


WSIF


WSRF (WS
-
ResourceFramework)


WSS4J (WS
-
Security)


XML
-
RPC

Fontes de consulta


http://java.sun.com/webservices


developers.ibm.com/webservices


JavaWorld: www.javaworld.com


webservices.org


www.uddi.org


xml.apache.org


http://www.tusc.com.au/tutorial/html/chap9
.html