Consumindo um serviço seguro utilizando PHP
Dia desses precisei colocar autenticação em um serviço que desenvolvi e passeando pelas opções da interface administrativa da WSO2 Enterprise Service Bus encontrei facilmente minha solução. Um pouco depois, li no twitter do @WSO2 um comentário sobre um novo artigo publicado sobre segurança nos Data Services, onde ensinava a fazer toda a parte de configuração: Content Filtering in Data Services with User Roles.
Só que pouco tempo depois de configurar e entregar ao cliente o serviço, veio o problema: como consumir em PHP o serviço? No artigo a solução entregue por eles para consumo é em Java, como a capacidade do cliente deixa a desejar, fiquei de fazer e enviar um exemplo de consumo do serviço desenvolvido.
Então... mãos na massa!
Configurando a ESB
Nesse ponto não irei escrever passo-a-passo a configuração que deve ser feita, o trabalho realizado pelo pessoal do WSO2 está muito bem feito nessa parte do artigo: Step 4 – Enable User Authentication for the Data Service.
Consumo sem segurança
Um pequeno trecho de PHP que mostra como consumir o serviço sem nenhum tipo de segurança. Código pequeno, limpo e objetivo.
$client = new SoapClient("http://localhost:8280/services/Tutorial?wsdl");
try {
$obj = $client->searchProductsByGroupId(array("group_id" => 1));
print_r($obj);
} catch (Exception $e) {
echo "ERRO: " . $e->getMessage();
}
Mas mesmo com toda essa objetividade, o problema do cliente não estava resolvido e eu recebia o seguinte erro:
ERRO: SOAP header missing
E, para resolver, faltava adicionar o cabeçalho com os dados de segurança.
Consumo com segurança
Agora um não-tão-pequeno trecho em PHP.
// configurações de conexão
$username = "admin";
$password = "admin";
$created = date ("Y-m-d\TH:i:s", mktime (date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")))."Z";
// definição de namespaces
$ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
$wsu = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
// criando elemento UsernameToken
$token = new stdClass;
$token->Username = new SOAPVar($username, XSD_STRING, null, null, null, $ns);
$token->Password = new SOAPVar($password, XSD_STRING, null, null, null, $ns);
// criando elemento Timestamp
$timestamp = new stdClass;
$timestamp->Created = new SOAPVar($created, XSD_STRING, null, null, null, $wsu);
// criando elemento Security
$wsec = new stdClass;
$wsec->UsernameToken = new SoapVar($token, SOAP_ENC_OBJECT, null, null, null, $ns);
$wsec->Timestamp = new SoapVar($timestamp, SOAP_ENC_OBJECT, null, null, null, $wsu);
// criando header
$headers = new SOAPHeader($ns, 'Security', $wsec);
// construtor do web-service (com cabeçalho) passando o endereço do WSDL
$client = new SoapClient("http://localhost:8280/services/Tutorial?wsdl");
$client->__setSOAPHeaders($headers);
// chamada do método
try {
$obj = $client->searchProductsByGroupId(array("group_id" => 1));
print_r($obj);
} catch (Exception $e) {
echo "ERRO: " . $e->getMessage();
}
E tudo rodou normalmente, sem problemas, o cliente ficou feliz e eu matei um pouco da saudade de programar em PHP.
Na pesquisa por soluções, tentei utilizar o WSO2 Web Services Framework for PHP mas descobri que depende de instalação de módulo no Apache e não servia para meu cliente, mas anotei na pauta para testá-lo em outro momento.
Instalando WSO2 Enterprise Service Bus Eclipse Tools no Ubuntu Karmic Koala (9.10)
Com o lançamento do WSO2 Enterprise Service Bus Eclipse Tools (v1.0.0-beta), cansado de ficar utilizando a interface web para gerenciar os "esqueminhas" da ESB, resolvei testar o plugin.
Mas como nem tudo são flores, após eu instalar o plugin e tentar criar um novo endpoint, recebi o erro abaixo:
Unhandled event loop exception XPCOM error -2147467259
Com isso, passei um certo tempo procurando na internet, até descobrir que o erro é causado por falta da biblioteca libstdc++5, que no Ubuntu Karmic Koala (9.10) foi atualizada para libstdc++6. Versão que é incompátivel com a visualização embarcada do Mozilla que o Eclipse WTP utiliza.
Então, para resolver o problema, primeiro passo que tentei foi:
$ sudo apt-get install libstdc++5 Reading package lists... Done Building dependency tree Reading state information... Done Package libstdc++5 is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package libstdc++5 has no installation candidate
Só que não resolveu, a maneira que encontrei foi procurar a biblioteca para download, encontrei no site do Debian:
wget http://ftp.br.debian.org/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.6-18_i386.deb
E instalei:
sudo dpkg -i libstdc++5_3.3.6-18_i386.deb
E com esses passos, tudo funciona normalmente...
Novidades nos lançamentos (nov/2009) da plataforma WSO2
Como avisei aqui e no twitter semana passada, o pessoal do WSO2 lançou algumas atualizações nos projetos da plataforma WSO2 Carbon. Mas somente agora, com o lançamento oficial, é que podemos descobrir o que foi atualizado.
Segue um resumão (baseado nas notas de lançamento) com o que foi atualizado em cada um dos projetos.
WSO2 Web Services Application Server (v3.1.2)
- Correções em vários softwares que fazem parte dele: Apache Axis2, Apache Rampart, Apache Sandesha2, WSO2 Carbon e alguns outros projetos;
- Correção da limpeza de memória após reiniciar o servidor.
Versão original (inglês): aqui.
WSO2 Enterprise Service Bus (v2.1.2)
- Diversas melhorias e correções desde a versão 2.1.0 lançada em julho de 2009.
Versão original (inglês): aqui.
WSO2 Governance Registry (v3.0.2)
- Melhoria no suporte a transação;
- Suporte ao WebSphere, WebLogic e JBoss;
- Baseado na suíte WSO2 Carbon;
- Suporte a clusterização;
- Correção de vários bugs.
Versão original (inglês): aqui.
WSO2 Business Process Server (v1.1.0)
- Nova camada de integração WSO2 Carbon para o Apache ODE;
- Utilizando Apache ODE 2.0-beta (baseado no trunk) como engine BPEL;
- Suporte experimental para clusterização;
- Suporte para consumo de serviços seguros (usando WS-Security);
- Utilizando OpenJPA para camada de acesso a dados ODE;
- Recuperação de atividades utilizando o management console;
- Atualização online (hot update) do pacote BPEL facilitam o versionamento;
- Suporte a manipulação de dados utilizando E4X nos processos BPEL.
Aqui deixo um adendo, baseado em alguns testes superficiais que fiz, posso dizer que não é indicado colocar essa versão em produção. Como disseram nas notas de lançamento, muita coisa está incompleta ainda e achei alguns probleminhas. Mas é interessante tentarmos colocar os processos BPEL e realizar testes para reportarmos os problemas e ajudarmos na correção dos mesmos para a versão 1.1.1 (que espero que chegue logo).
Isso é até compreensível, já que se trata de uma nova versão e não apenas correções de bugs como as outras. (:
Versão original com cada item comentado (inglês): aqui.
WSO2 Identity Server (v2.0.2)
- Correções em vários softwares que fazem parte dele: Apache Axis2, Apache Rampart, Apache Sandesha2, WSO2 Carbon e alguns outros projetos.
Versão original (inglês): aqui.
WSO2 Mashup Server (v2.0.1)
- Interface visual para gerenciar as tarefas agendadas;
- Baseado no WSO2 Carbon SOA Framework que irá facilitar habilitação de funções a um clique, como o gerenciamento de Data Services nas futuras versões do Mashup Server.
Versão original (inglês): aqui.
WSO2 e a quinta-feira agitada: muitos lançamentos
Uma passeadinha básica no site do WSO2 para ver o movimento do fórum e quase caio para trás quando vejo a quantidade de produtos que eles atualizaram de ontem pra hoje.
Não sei se estou sendo apressado, mas o lançamento nem está na página inicial ainda, apenas nas páginas dos projetos... Mas vamos divulgando não é? Então os projetos atualizados são:
- WSO2 Web Services Application Server v3.1.2;
- WSO2 Business Process Server v1.1.0 (finalmente!);
- WSO2 Enterprise Service Bus v2.1.2;
- WSO2 Governance Registry v3.0.2;
- WSO2 Identity Server v2.0.2;
- WSO2 Mashup Server v2.0.1.
Mas ainda sinto falta das atualizações do WSO2 Data Services, que está largado na 2.0 e com alguns bugzinhos chatos que até já arrumamos e mandamos o patch, mas ainda assim...
E pensar que passei dois dias testando as alterações das últimas versões e hoje tem novas. Não consegui nem documentar as antigas... Só me resta testar novamente e homologar as novas versões.
WSO2 Enterprise Service Bus (ESB) 2.1.1 lançada
Foi lançada a versão 2.1.1 da WSO2 ESB, pelo que li no release note essa versão só trás correções de bugs, as correções foram (preguiça de traduzir):
- Endpoint management issues in clustered environments have been fixed (CARBON-5108)
- Defects in DBReport, DBLookup mediator UIs have been corrected (CARBON-5084)
- Script mediator UI has been improved to handle some exceptional scenarios (CARBON-5080)
- XQuery mediator UI has been enhanced to handle some exceptional scenarios (CARBON-5078)
- ESB management console has been enhanced to work properly on WebLogic application server
- UI enhancements to support WebSphere application server
- Sequence management UI has undergone some minor enhancements
- Enhancements to support front end - back end separation of the server
- Reported issues related to transaction mediator have been fixed (CARBON-4225)
- Issues releated to task creation and management have been rectified
- Many documentation updates and enhancements
E que o pessoal do WSO2 continue trabalhando firme e forte assim. Ainda não consegui instalar para ver as diferenças na prática (estamos usando a 2.0.1 ainda)... assim que conseguir volto aqui comentar.

