SDK Openbus Tecgraf PUCRio maio de 2011 SDK
SDK Openbus Tecgraf PUC-Rio maio de 2011
SDK Openbus • Um conjunto de classes que auxiliam o desenvolvedor na construção de aplicações servidoras ou clientes de um barramento Openbus • Aplicações que publicam serviços • Aplicações que consomem serviços • Ou ambos
SDK Openbus • Possui: • as bibliotecas com as classes usadas no cliente e no servidor • classes de apoio • classes geradas a partir das idls dos serviços básicos • libs do orb, do scs etc • código demo hello • IDLs dos serviços básicos
Serviço de Controle de Acesso • Possui um arquivo IDL que define as facetas que esse serviço implementa. #include "core. idl" #include "scs. idl" module tecgraf { openbus { core { v 1_05 { /** * brief Módulo do Serviço de Controle de Acesso. */ module access_control_service {. . . }; // access_control_service }; // v 1_05 }; // core }; // openbus }; // tecgraf
Serviço de Controle de Acesso • As principais facetas que o Serviço de Acesso implementa são: • IAccess. Control. Service: • responsável pela autenticação no barramento, por login e senha ou por certificado • emite uma credencial válida como resultado da autenticação • ILease. Provider: • responsável pela renovação da credencial
Serviço de Controle de Acesso: IAccess. Control. Service /** * brief Autentica uma entidade através de um nome e uma senha. * param[in] name O nome. * param[in] password A senha. * param[out] a. Credential Uma credencial para a entidade. * param[out] a. Lease Um lease que define a validade da credencial. */ boolean login. By. Password (in string name, in string password, out Credential a. Credential, out Lease a. Lease); /** * brief Autentica uma entidade através de um nome e de uma * resposta para um desafio previamente obtido. * * param[in] name O nome. * param[in] answer A reposta para o desafio. * param[out] a. Credential Uma credencial para a entidade. * param[out] a. Lease Um lease que define a validade da credencial. */ boolean login. By. Certificate (in string name, in Octet. Seq answer, out Credential a. Credential, out Lease a. Lease); };
Credencial • Possui uma estrutura que identifica quem se autenticou no barramento. /** * brief Representa a credencial de um membro. */ struct Credential { Credential. Identifier identifier; /** Identificador único. */ string owner; /** Nome da entidade dona. */ string delegate; /** Nome da entidade delegada (opcional). */ }; • Possui uma validade que indica o tempo de leasing. /** brief Representa a validade de uma credencial (s). */ typedef long Lease;
Serviço de Controle de Acesso: ILease. Provider /** * brief Renova o lease de uma credencial. * * param[in] a. Credential A credencial da entidade. * param[out] a. Lease O lease obtido. * * return true, caso o lease seja renovado, ou false, caso * contrário. */ boolean renew. Lease (in Credential a. Credential, out Lease a. Lease); };
Autenticação por usuário e senha • Requer a configuração de um servidor LDAP. • Normalmente, aplicações clientes (standalone) se autenticam no barramento usando usuário e senha.
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 mais adotado é o X. 509 • A validação de certificados digitais é feita usando um modelo desafio-resposta.
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 • Um desafio é gerado pelo Serviço de Controle de Acesso utilizando a chave pública da entidade. • A entidade decifra o desafio utilizando a sua chave privada. • A chave pública do Serviço de Controle de Acesso é usada para gerar a resposta a partir do desafio fornecido.
Autenticação por certificado • A interface IAccess. Control. Service tem um método que, dado um nome de uma entidade, retorna um desafio. /** * brief Obtém um desafio para uma entidade. * param name O nome da entidade. * return O desafio. */ Octet. Seq get. Challenge(in string name); • A entidade gera uma resposta usando a sua chave pública do ACS e envia essa resposta para fazer a autenticação. boolean login. By. Certificate (in string name, in Octet. Seq answer, out Credential a. Credential, out Lease a. Lease)
Autenticação por certificado • No Openbus, a conexão por certificado é mais usada por sistemas servidores. • Por exemplo, o servidor do Web. Sintesi possui um certificado próprio para usar na conexão com o barramento. • A conexão por certificado permite usar um campo delegate da credencial para delegar a autenticação para uma outra entidade. • Por exemplo, no Web. Sintesi, a credencial usa o campo delegate com o login do usuário da sessão
Serviço de Registro • Possui um arquivo IDL que define as facetas que esse serviço implementa. #include "core. idl" #include "scs. idl" #include "access_control_service. idl" module tecgraf { module openbus { module core { module v 1_05 { /** * brief Módulo do Serviço de Registro. */ module registry_service {. . . }; // registry_service }; // v 1_05 }; // core }; // openbus }; // tecgraf
Serviço de Registro • A principal faceta que o Serviço de Registro implementa é: • IRegistry. Service • responsável pela publicação e remoção de ofertas de serviço • busca de serviços a partir de diferentes critérios de consulta (id, facetas que implementa, propriedades, etc) • Propriedades disponibilizadas por padrão • registered_by: nome da entidade que registrou a oferta. • component_id: identificação do componente. • nome_do_componente: versão_do_componente • O mecanismo de govenança é usado para garantir que apenas entidades autorizadas podem publicar serviços no barramento • exceção Unauthorized. Facet
Oferta de Serviço • Uma Oferta de Serviço possui: • uma referência para o componente SCS que está ofertando o serviço • uma lista de propriedades descritivas do serviço /* Representa uma propriedade. */ struct Property { string name; Property. Value value; }; typedef sequence<Property> Property. List; /* Representa uma oferta de serviço. */ struct Service. Offer { /** brief Propriedades. */ Property. List properties; /** brief O membro que está ofertando o serviço. */ scs: : core: : IComponent member; };
Serviço de Registro: IRegistry. Service /** O identificador do registro de um serviço. */ typedef Identifier Registry. Identifier; /** * Registra uma oferta de serviço. * * param a. Service. Offer A oferta de serviço. * return Um identificador para o registro. * exception Unathorized. Facets Serviço sem autorização para * publicar uma * ou mais facetas. */ Registry. Identifier register(in Service. Offer a. Service. Offer) raises (Unathorized. Facets); /** * Remove uma oferta de serviço. * * param identifier O identificador do registro da oferta do * serviço. * return true, caso a oferta de serviço seja removida, ou false, * caso contrário. */ boolean unregister(in Registry. Identifier identifier);
Serviço de Registro: IRegistry. Service /** Representa uma faceta. */ typedef string Facet; typedef sequence<Facet> Facet. List; /** * Realiza uma busca por ofertas através de uma lista de facetas. * Serão selecionadas as ofertas de serviços que implementam todas * as facetas descritas em facets. * param facets As facetas da busca. * return As ofertas encontradas. */ Service. Offer. List find (in Facet. List facets); /** * Realiza uma busca por ofertas através de uma lista de facetas * e critérios. * Serão selecionadas as ofertas de serviços que implementam todas * as facetas descritas em facets, e, que satisfaçam aos critérios * especificados. * param facets As facetas da busca. * param criteria Os critérios da busca. * return As ofertas encontradas. */ Service. Offer. List find. By. Criteria (in Facet. List facets, in Property. List criteria);
- Slides: 18