A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Versão 3 – fevereiro/2014 Tecgraf PUC-Rio Fevereiro de 2014 SDK OpenBus.

Apresentações semelhantes


Apresentação em tema: "Versão 3 – fevereiro/2014 Tecgraf PUC-Rio Fevereiro de 2014 SDK OpenBus."— Transcrição da apresentação:

1 Versão 3 – fevereiro/2014 Tecgraf PUC-Rio Fevereiro de 2014 SDK OpenBus

2 Versão 3 – fevereiro/2014 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

3 Versão 3 – fevereiro/2014 Visão de uma Integração

4 Versão 3 – fevereiro/2014 Visão de uma Integração

5 Versão 3 – fevereiro/2014 Visão de uma Integração

6 Versão 3 – fevereiro/2014 Visão de uma Integração

7 Versão 3 – fevereiro/2014 Visão de uma Integração

8 Versão 3 – fevereiro/2014 Visão da Arquitetura

9 Versão 3 – fevereiro/2014 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

10 Versão 3 – fevereiro/2014 A autenticação no barramento pode ser feita por: usuário e senha certificado digital Controle de Acesso - Autenticação

11 Versão 3 – fevereiro/2014 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

12 Versão 3 – fevereiro/2014 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

13 Versão 3 – fevereiro/2014 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

14 Versão 3 – fevereiro/2014 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

15 Versão 3 – fevereiro/2014 Representa a identificação de todos os acessos ao barramento que originaram uma chamada recebida Contém as informações de login dos processos que originaram cada uma das chamadas aninhadas Útil para aplicações implementarem regras próprias de permissionamento Controle de Acesso – Cadeia de chamadas

16 Versão 3 – fevereiro/2014 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

17 Versão 3 – fevereiro/2014 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

18 Versão 3 – fevereiro/2014 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

19 Versão 3 – fevereiro/2014 Registro de Ofertas

20 Versão 3 – fevereiro/2014 Registro de Ofertas

21 Versão 3 – fevereiro/2014 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

22 Versão 3 – fevereiro/2014 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

23 Versão 3 – fevereiro/2014 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

24 Versão 3 – fevereiro/2014 API da Biblioteca Os principais conceitos são representados da seguinte forma: ORBInitializer Connection CallerChain OpenBusContext

25 Versão 3 – fevereiro/2014 API - ORBInitializer Inicializador de ORBs para acesso a barramentos OpenBus Inicializa ORB de uso exclusivo para chamadas através do barramento Chamadas fora do barramento devem ser feitas em outro ORB Abstrai a operação CORBA::ORB_init Cada ORB inicializado através dessa classe possui um OpenBusContext associado

26 Versão 3 – fevereiro/2014 API - ORBInitializer // inicialização e configuração do ORB ORB orb = ORBInitializer.initORB(); // obtenção do gerente de contexto de chamadas associado a // esse ORB OpenBusContext context = (OpenBusContext) orb.resolve_initial_references(“OpenBusContext”); Exemplo:

27 Versão 3 – fevereiro/2014 API - Connection Representa um ponto de acesso ao barramento, que é usado tanto para realizar como para receber chamadas através do barramento

28 Versão 3 – fevereiro/2014 API - Connection // criação de conexão (não lança exceções) Connection connection = context.createConnection(host,port); Exemplo:

29 Versão 3 – fevereiro/2014 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

30 Versão 3 – fevereiro/2014 API - Connection // autenticação try { // por login e senha connection.loginByPassword(entity, password.getBytes()); // por certificado connection.loginByCertificate(entity, privateKey); // logout connection.logout(); } catch(…) { … } Exemplo:

31 Versão 3 – fevereiro/2014 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

32 Versão 3 – fevereiro/2014 API - Connection // callback de renovação de login e ofertas Connection.onInvalidLoginCallback( new InvalidLoginCallback() { public void invalidLogin(Connection conn, LoginInfo login){ //1. autenticar no barramento //2. republicar ofertas se necessário //é necessário o tratamento de concorrência } ); Exemplo:

33 Versão 3 – fevereiro/2014 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

34 Versão 3 – fevereiro/2014 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

35 Versão 3 – fevereiro/2014 API - CallerChain // obtenção da cadeia da requisição public void myServantMethod() { CallerChain callerChain = context.getCallerChain(); LoginInfo caller = callerChain.caller(); System.out.println(caller.entity + “ called me.”); // unindo-se a uma cadeia de chamadas context.joinChain(callerChain); someService.someMethod(); context.exitChain(); } Exemplo:

36 Versão 3 – fevereiro/2014 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 a um ORB, o que tipicamente é a thread corrente (mais especificamente o CORBA::PICurrent do padrão CORBA)

37 Versão 3 – fevereiro/2014 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

38 Versão 3 – fevereiro/2014 API - OpenBusContext // configuração da conexão padrão context.setDefaultConnection(connection); // recuperação da conexão padrão Connection conn = context.getDefaultConnection(); Exemplo:

39 Versão 3 – fevereiro/2014 API - OpenBusContext O contexto também fornece a referência para serviços-núcleo: Registro de ofertas OfferRegistry offerRegistry = context.getOfferRegistry();

40 Versão 3 – fevereiro/2014 API - Publicação de Ofertas try { // registro de um serviço no barramento ServiceProperty[] properties = new ServiceProperty[] { new ServiceProperty(“my property”, “my property value”)}; context.getOfferRegistry().registerService(iComponent, properties); } catch (…) { … }

41 Versão 3 – fevereiro/2014 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.getOfferRegistry().findServices(properties); } catch (…) { … }

42 Versão 3 – fevereiro/2014 API - Busca e Utilização de Ofertas // análise das ofertas encontradas for(ServiceOfferDesc offerDesc : offers) { try { org.omg.CORBA.Object serviceObj = offerDesc.service_ref.getFacet(ServiceHelper.id()); if (serviceObj == null) { continue; } Service service = ServiceHelper.narrow(serviceObj); service.someMethod(); } catch (…) { … }

43 Versão 3 – fevereiro/2014 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

44 Versão 3 – fevereiro/2014 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

45 Versão 3 – fevereiro/2014 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

46 Versão 3 – fevereiro/2014 Assistente - Login // Criação de um assistente – tentará realizar o login em uma // nova thread, até conseguir // por login e senha Assistant assistant = Assistant.createWithPassword(host, port, entity, password.getBytes()); // por certificado Assistant assistant = Assistant.createWithPrivateKey(host, port, entity, privateKey); Exemplo:

47 Versão 3 – fevereiro/2014 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 ServiceProperty[]{ new ServiceProperty(“my property”, “my property value”)}; assistant.registerService(iComponent, properties); Exemplo:

48 Versão 3 – fevereiro/2014 Assistente – Busca por Oferta // busca por serviço ServiceProperty[] properties = new ServiceProperty[1]; properties[0] = new ServiceProperty(“my property”, “my property value”)}; ServiceOfferDesc[] offers; try { // O segundo parâmetro define o número de tentativas. // -1 significa tentar indefinidamente até conseguir. // Pode-se configurar o tempo entre as tentativas. offers = assistant.findServices(properties, -1); } catch (…) { … } Exemplo:

49 Versão 3 – fevereiro/2014 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

50 Versão 3 – fevereiro/2014 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

51 Versão 3 – fevereiro/2014 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

52 Versão 3 – fevereiro/2014 Detalhes e Outras Funcionalidades Veremos agora: Comunicação detalhada Multiplexação Compartilhamento de autenticação

53 Versão 3 – fevereiro/2014 Comunicação Detalhada

54 Versão 3 – fevereiro/2014 Comunicação Detalhada

55 Versão 3 – fevereiro/2014 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

56 Versão 3 – fevereiro/2014 Multiplexação – Contexto de Request // configuração da conexão padrão context.setDefaultConnection(connection); Exemplo:

57 Versão 3 – fevereiro/2014 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, getJoinedChain

58 Versão 3 – fevereiro/2014 Multiplexação – Contexto de Request // configuração da conexão de requisição (requester) context.setCurrentConnection(connection); // junta-se a uma cadeia específica context.joinChain(some_chain); realiza_chamada_remota(); // deixa de usar essa cadeia para as próximas requisições context.exitChain(); // volta a usar a conexão padrão context.setCurrentConnection(null); Exemplo:

59 Versão 3 – fevereiro/2014 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 Método getCallerChain

60 Versão 3 – fevereiro/2014 Multiplexação – Contexto de Dispatch // configuração da conexão de despacho (dispatcher) context.onCallDispatch( new CallDispatchCallback() { @Override public Connection Dispatch(OpenBusContext context, String busid, String loginId, byte[] object_id, String operation){ // cabe ao código da aplicação escolher a conexão return some_connection; } ); Exemplo:

61 Versão 3 – fevereiro/2014 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

62 Versão 3 – fevereiro/2014 Compartilhamento de Autenticação try { OctetSeqHolder secret = new OctetSeqHolder(); // compartilhamento de autenticação LoginProcess login = connection.startSharedAuth(secret); // passa login e secret para outra aplicação de alguma forma // segura … } catch (…) { … } Serviço autenticado (API padrão):

63 Versão 3 – fevereiro/2014 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); connection.loginBySharedAuth(login, secret.value); … } catch (…) { … } Serviço se autenticando (API padrão):

64 Versão 3 – fevereiro/2014 Compartilhamento de Autenticação Assistant assistant = new Assistant(host, port) { @Override public AuthArgs onLoginAuthentication() { try { // Recebe informações de login e segredo de alguma forma // segura return new AuthArgs(login, secret); } catch (…) { … } return null; } }; Serviço se autenticando (Assistente):


Carregar ppt "Versão 3 – fevereiro/2014 Tecgraf PUC-Rio Fevereiro de 2014 SDK OpenBus."

Apresentações semelhantes


Anúncios Google