gestor: tic/tic-e&p/gidsep versão 1 - julho/2013 tecgraf puc-rio novembro de 2013 sdk openbus
Post on 22-Apr-2015
106 Views
Preview:
TRANSCRIPT
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Tecgraf PUC-Rio
Novembro de 2013
SDK OpenBus
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
OpenBus
• O OpenBus oferece:• Barramento de Integração• Controle de Acesso (autenticação e
identificação)• Serviços de Apoio à Integração• SDK
• Biblioteca de Acesso• Demos• Documentação• Utilitários
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Visão de uma Integração
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Visão de uma Integração
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Visão de uma Integração
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Visão de uma Integração
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Visão de uma Integração
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Visão da Arquitetura
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Controle de Acesso
Cliente
Controle de Acesso
• Ponto de entrada no barramento • sua localização (referência) é conhecida por todos
login• Realiza uma autenticação•Gera um identificador de login •Login possui uma validade
Autenticação com usuário / senha
• Autentica os componentes que querem fazer parte do barramento
LDAP
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
• A autenticação no barramento pode ser feita por:• usuário e senha• certificado digital
Controle de Acesso - Autenticação
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Autenticação por usuário e senha
• Requer a configuração de um servidor LDAP
• Normalmente, aplicações cliente (stand-alone) se autenticam no barramento usando usuário e senha
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Autenticação por certificado
• Baseia-se em um par de chaves: pública e privada
• Um certificado digital normalmente é usado para ligar uma entidade a uma chave pública• Assinado digitalmente• Emitido e assinado por uma Autoridade
Certificadora
• O padrão adotado é o X.509• A validação de certificados digitais é
feita usando um modelo desafio-resposta
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Autenticação por certificado
• O OpenBus possui instalado os certificados públicos de todas as entidades que precisam se conectar a ele
• Apenas a entidade que se conecta ao barramento guarda a chave privada que é par da chave pública do certificado
• Para a autenticação, um desafio é gerado pelo barramento utilizando a chave pública da entidade
• A entidade decifra o desafio utilizando a sua chave privada
• A chave pública do barramento é usada para gerar a resposta a partir do desafio fornecido
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
• Autenticação e Identificação• Login
• Identificador único• Nome da entidade proprietária
• Cadeia de chamadas• Barramento responsável
• Lease de login• Um login é válido por um tempo
determinado• É renovado de tempos em tempos
Controle de Acesso
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
• Uma ou mais chamadas aninhadas feitas através do barramento que originaram uma chamada recebida
• Contém as informações de login dos processos que originaram cada uma das chamadas aninhadas
Controle de Acesso – Cadeia de chamadas
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Registro de Ofertas
• Permite a oferta e a descoberta de serviços• Observação de ofertas e registros de ofertas• Sua referência é obtida através do
barramento• O mecanismo de govenança é usado para
garantir que apenas entidades autorizadas possam publicar serviços no barramento
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
• Descrição de oferta de serviço• Referência para a faceta IComponent do
serviço• Lista de propriedades descritivas
• Especificadas no ato do registro• Automáticas
• Referência para a oferta de serviço propriamente dita• Objeto CORBA que permite a alteração da oferta
pela entidade que a registrou ou usuários administradores
Registro de Ofertas
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
• Propriedades automáticas• Descritas na IDL do registro de ofertas
/** * openbus.offer.id: Ident. único da oferta. * openbus.offer.login: Ident. do login com que a oferta foi registrada. * openbus.offer.entity: Ident. da entidade que registrou a oferta. * openbus.offer.timestamp: Número indicando o momento do registro da oferta. * openbus.offer.year: Ano em que a oferta foi registrada. * openbus.offer.month: Número do mês em que a oferta foi registrada. * openbus.offer.day: Dia do mês que a oferta foi registrada. * openbus.offer.hour: Hora do dia em que a oferta foi registrada. * openbus.offer.minute: Minuto do dia em que a oferta foi registrada. * openbus.offer.second: Segundo do dia em que a oferta foi registrada. * openbus.component.name: Nome do componente SCS que implementa o serviço. * openbus.component.version.major: Versão maior do componente SCS que implementa o serviço. * openbus.component.version.minor: Versão menor do componente SCS que implementa o serviço. * openbus.component.version.patch: Versão de correção do componente SCS que implementa o serviço. * openbus.component.facet: Nome de faceta oferecida pelo component SCS que implementa o serviço. * openbus.component.interface: RepID de interface implementada por faceta do component SCS que implementa o serviço. */
Registro de Ofertas
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Registro de Ofertas
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Registro de Ofertas
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Serviços Adicionais
• Atuais• Serviço de Colaboração• Serviço de Dados
• Não são parte do núcleo do barramento• Ou seja, não é obrigatória a presença desses
serviços em uma instância de barramento
• Acrescentam funcionalidades para auxiliar a integração entre serviços e aplicações
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Serviço de Colaboração
• Permite criar e compartilhar uma sessão de colaboração entre serviços• Fornece mecanismo de notificação para adição
e exclusão de membros
• Oferece um canal de comunicação para o envio de eventos
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
SDK OpenBus
• Biblioteca que implementa o protocolo• Também dá suporte ao protocolo da
versão anterior do barramento, para que seja possível manter a integração com clientes legados
• Assistente (utilitário)• Documentação• Demos
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API da Biblioteca
• Os principais conceitos são representados da seguinte forma:
• ORBInitializer• Connection• CallerChain• OpenBusContext
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - ORBInitializer
• Inicializador de ORBs para acesso a barramentos OpenBus– Mas IIOP.NET só permite uma instância de ORB
• Limita o ORB ao uso exclusivo para chamadas através do barramento• Chamadas fora do barramento deveriam ser
feitas em outro ORB, mas com o IIOP.NET não é possível
• Abstrai a operação CORBA::ORB_init• O ORB passa a ter um OpenBusContext
associado
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - ORBInitializer
// inicialização e configuração do ORB e// obtenção do gerente de contexto de chamadas associadoOpenBusContext context = ORBInitializer.Context;
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - Connection
• Representa um ponto de acesso ao barramento, que é usado tanto para realizar como para receber chamadas através do barramento
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - Connection
// criação de conexão (não lança exceções)// o terceiro parâmetro é um conjunto de propriedades// opcionais, como suporte a clientes legadosConnection connection = context.createConnection(host, port, null);
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - Connection
• Utilizada para realizar acessos identificados ao barramento
• Deve ter um login associado• Atualmente duas formas de autenticação
são possíveis:• Por senha: loginByPassword• Por certificado digital: loginByCertificate
• É possível também obter um login através de uma autenticação prévia
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - Connection
// autenticaçãotry {
// por login e senhaconnection.LoginByPassword(entity, password);// por certificadoconnection.LoginByCertificate(entity, privateKey);// logoutconnection.Logout();
}catch(…) { …}
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - Connection
• O resultado da autenticação é um login com tempo de validade (Lease)
• Cada conexão possui uma thread de renovação automática da validade do login
• Caso o login seja invalidado, é necessário re-autenticar e, no caso de serviços, reofertar suas ofertas no barramento• Para isso, deve-se implementar uma callback
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - Connection
// callback de renovação de login e ofertasconnection.OnInvalidLogin = InvalidLogin;...private void InvalidLogin(Connection conn, LoginInfo login){ //1. autenticar no barramento //2. republicar ofertas se necessário //é necessário o tratamento de concorrência}
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - Connection
• Multiplexação• Possibilidade de assumir múltiplas identidades
através de múltiplas conexões
• Utiliza-se o OpenBusContext para criar e definir as conexões que serão utilizadas pelo ORB
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - CallerChain
• Representa a identificação de todos os acessos ao barramento que originaram uma chamada recebida
• Úteis para aplicações implementarem regras próprias de permissionamento
• São obtidas através do OpenBusContext
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - CallerChain
// obtenção da cadeia da requisiçãopublic void MyServantMethod() {
CallerChain callerChain = ORBInitializer.Context.CallerChain;
LoginInfo caller = callerChain.Caller;System.out.println(caller.entity + “ called me.”);// unindo-se a uma cadeia de chamadascontext.JoinChain(chain);someService.someMethod();context.ExitChain();
}
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - OpenBusContext
• Permite controlar o contexto de chamadas de um ORB para acessar informações que as identificam
• O contexto representa a linha de execução atual do programa em relação ao ORB, o que tipicamente é a thread corrente (mais especificamente o CORBA::PICurrent do padrão CORBA)
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - OpenBusContext
• Que informações identificam as chamadas?• Conexão• Cadeia de chamadas
• O contexto:• Cria conexões• Manipula informações de contexto
• Qual conexão realiza a chamada• Qual cadeia está associada à chamada• Qual conexão recebe (atende) uma chamada
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - OpenBusContext
// configuração da conexão padrãocontext.SetDefaultConnection(connection);// recuperação da conexão padrãoConnection conn = context.GetDefaultConnection();
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - OpenBusContext
• O contexto também fornece a referência para serviços-núcleo:• Registro de ofertas
OfferRegistry offerRegistry = context.OfferRegistry;
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - Publicação de Ofertas
try { // registro de um serviço no barramento ServiceProperty[] properties = new[] { new ServiceProperty(“my property”, “my property value”)}; context.OfferRegistry.registerService(iComponent, properties);}catch (…) {…}
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - Busca e Utilização de Ofertas
ServiceOfferDesc[] offers;try { // busca por serviço ServiceProperty[] properties = new ServiceProperty[1]; properties[0] = new ServiceProperty(“my property”, “my property value”)}; offers = context.OfferRegistry.findServices(properties);}catch (…) {…}
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
API - Busca e Utilização de Ofertas
// análise das ofertas encontradasstring serviceType = ...;foreach(ServiceOfferDesc offerDesc in offers) { try { MarshalByRefObject serviceObj = offerDesc.service_ref.getFacet(serviceType); if (serviceObj == null) { continue; } Service service = serviceObj as Service; if (service == null) {...} service.someMethod(); } catch (…) { … }}
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Assistente
• Abstração sobre a biblioteca de acesso cujo objetivo é atuar como um utilitário que atende a cenários de uso mais comuns
• Auxilia na autenticação com o barramento• Auxilia no registro e busca de ofertas• Permite a configuração de número de tentativas• Permite configurar callbacks de falhas
• Limitação de um assistente por ORB
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Assistente
• Cenários recomendados:• Comunicação com um único barramento• Necessidade de apenas uma autenticação
• Cenários não recomendados:• Comunicação com mais de um barramento• Necessidade de múltiplas autenticações, com
um ou mais barramentos• Esses cenários são impossíveis com a versão
atual do IIOP.NET
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Assistente
• Principais vantagens:• Auxílio na autenticação com o
barramento• Implementa a callback OnInvalidLogin para o
usuário
• Ofertas de serviços são mantidas automaticamente caso a autenticação seja refeita
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Assistente - Login
// Criação de um assistente – tentará realizar o login em uma// nova thread, até conseguir
// por login e senhaAssistant assistant = new AssistantImpl(host, port, new PasswordProperties(entity, password));
// por certificadoAssistant assistant = new AssistantImpl(host, port, new PrivateKeyProperties(entity, privateKey));
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Assistente – Publicação de Oferta
// registro de um serviço no barramento - tentará realizar o// registro em uma nova thread, até conseguir
ServiceProperty[] properties = new[] { new ServiceProperty(“my property”, “my property value”)};assistant.RegisterService(iComponent, properties);
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Assistente – Busca por Oferta
// busca por serviçoServiceProperty[] properties = new[] { new ServiceProperty(“my property”, “my property value”)};ServiceOfferDesc[] offers = Utils.FilterWorkingOffers( assistant.FindServices(properties, -1));
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Boas Práticas
• Ambiente distribuído• Sempre pode haver falhas de acesso a
objetos remotos• Exceções sempre devem ser tratadas
para garantir a robustez
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Tratamento de Exceções
• OpenBus• CORBA::NoPermission
• NoLogin – caso alguma operação que dependa de login seja feita e não haja um login no momento
• InvalidChain – cadeia inválida enviada• UnknownBus – barramento não conhecido pelo
serviço que se está tentando utilizar• UnverifiedLogin – o serviço que se está tentanto
utilizar não conseguiu verificar seu login no barramento
• InvalidRemote – protocolos de versão incompatíveis
• ServiceFailure – falha interna em um serviço
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Tratamento de Exceções
• CORBA• CORBA::TRANSIENT
• Ocorreu um erro na comunicação, mas pode ser possível tentar novamente (ex: não foi possível contactar o servidor)
• CORBA::COMM_FAILURE• Erro de comunicação durante o atendimento
de uma chamada (ex: falta de recursos no servidor)
• CORBA::OBJECT_NOT_EXISTS• O objeto requisitado no servidor não existe
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Detalhes e Outras Funcionalidades
• Veremos agora:
• Comunicação detalhada• Multiplexação• Compartilhamento de autenticação
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Comunicação Detalhada
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Comunicação Detalhada
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Multiplexação
• OpenBusContext• Representa dois contextos diferentes
• Contexto de Requisição (realização de chamadas)
• Contexto de Despacho (recebimento de chamadas)
• Define conexão padrão• A ser utilizada tanto em Requisição como em
Despacho, caso não sejam especificadas
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Multiplexação – Contexto de Request
// configuração da conexão padrãocontext.SetDefaultConnection(connection);
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Multiplexação
• OpenBusContext• Como Contexto de Requisição
• Define conexão corrente• Permite configurar a cadeia de chamadas
associada à requisição• Métodos JoinChain, ExitChain• Propriedade JoinedChain
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Multiplexação – Contexto de Request
// configuração da conexão de requisição (requester)context.SetCurrentConnection(connection);
// junta-se a uma cadeia específicacontext.JoinChain(some_chain);realiza_chamada_remota();
// deixa de usar essa cadeia para as próximas requisiçõescontext.ExitChain();
// volta a usar a conexão padrãocontext.SetCurrentConnection(null);
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Multiplexação
• OpenBusContext• Como Contexto de Despacho
• Define conexão de despacho• E callback OnCallDispatch para a escolha dessa
conexão
• Permite consultar a cadeia de chamadas associada à chamada recebida
• Propriedade CallerChain
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Multiplexação – Contexto de Dispatch
// configuração da conexão de despacho (dispatcher)context.OnCallDispatch = Dispatch;
...
public Connection Dispatch(OpenBusContext context, string busid, string caller, string uri, string operation){ // cabe ao código da aplicação escolher a conexão return some_connection; } });
• Exemplo:
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Multiplexação
• OpenBusContext• Método context.GetCurrentConnection()
• Contexto de Requisição:• Obtém a conexão corrente do contexto ou a
padrão
• Contexto de Despacho• Obtém a conexão que atende à requisição
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Compartilhamento de Autenticação
try { // compartilhamento de autenticação byte[] secret; LoginProcess login = connection.StartSharedAuth(out secret); // passa login e secret para outra aplicação de alguma forma // segura …}catch (…) {…}
• Serviço autenticado (API padrão):
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Compartilhamento de Autenticação
try { // Recebe informações de login e segredo de alguma forma // segura LoginProcess login = …; byte[] secret = …; // Utiliza dados recebidos para realizar login Connection connection = context.CreateConnection(host, port, null); connection.LoginBySharedAuth(login, secret.value); …}catch (…) {…}
• Serviço se autenticando (API padrão):
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013
Compartilhamento de Autenticação
Assistant assistant = new AssistantImpl(host, port, new SharedAuthProperties(SharedAuthObtainer));
...
private LoginProcess SharedAuthObtainer(out byte[] secret) { LoginProcess login = …; secret = …; return login;}
• Serviço se autenticando (Assistente):
top related