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 module module module tecgraf { openbus { core { v1_05 { /** * \brief Módulo do Serviço de Controle de Acesso. */ module access_control_service { ... }; // access_control_service }; // v1_05 }; // core }; // openbus }; // tecgraf Serviço de Controle de Acesso • As principais facetas que o Serviço de Acesso implementa são: • IAccessControlService: • responsável pela autenticação no barramento, por login e senha ou por certificado • emite uma credencial válida como resultado da autenticação • ILeaseProvider: • responsável pela renovação da credencial Serviço de Controle de Acesso: IAccessControlService /** * \brief Autentica uma entidade através de um nome e uma senha. * \param[in] name O nome. * \param[in] password A senha. * \param[out] aCredential Uma credencial para a entidade. * \param[out] aLease Um lease que define a validade da credencial. */ boolean loginByPassword (in string name, in string password, out Credential aCredential, out Lease aLease); /** * \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] aCredential Uma credencial para a entidade. * \param[out] aLease Um lease que define a validade da credencial. */ boolean loginByCertificate (in string name, in OctetSeq answer, out Credential aCredential, out Lease aLease); Credencial • Possui uma estrutura que identifica quem se autenticou no barramento. /** * \brief Representa a credencial de um membro. */ struct Credential { CredentialIdentifier 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: ILeaseProvider /** * \brief Renova o lease de uma credencial. * * \param[in] aCredential A credencial da entidade. * \param[out] aLease O lease obtido. * * \return true, caso o lease seja renovado, ou false, caso * contrário. */ boolean renewLease (in Credential aCredential, out Lease aLease); }; 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 IAccessControlService 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. */ OctetSeq getChallenge(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 loginByCertificate (in string name, in OctetSeq answer, out Credential aCredential, out Lease aLease) Autenticação por certificado • No Openbus, a conexão por certificado é mais usada por sistemas servidores. • Por exemplo, o servidor do WebSintesi 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 WebSintesi, 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 v1_05 { /** * \brief Módulo do Serviço de Registro. */ module registry_service { ... }; // registry_service }; // v1_05 }; // core }; // openbus }; // tecgraf Serviço de Registro • A principal faceta que o Serviço de Registro implementa é: • IRegistryService • 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 UnauthorizedFacet 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; PropertyValue value; }; typedef sequence<Property> PropertyList; /* Representa uma oferta de serviço. */ struct ServiceOffer { /** \brief Propriedades. */ PropertyList properties; /** \brief O membro que está ofertando o serviço. */ scs::core::IComponent member; }; Serviço de Registro: IRegistryService /** O identificador do registro de um serviço. */ typedef Identifier RegistryIdentifier; /** * Registra uma oferta de serviço. * * \param aServiceOffer A oferta de serviço. * \return Um identificador para o registro. * \exception UnathorizedFacets Serviço sem autorização para * publicar uma * ou mais facetas. */ RegistryIdentifier register(in ServiceOffer aServiceOffer) raises (UnathorizedFacets); /** * 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 RegistryIdentifier identifier); Serviço de Registro: IRegistryService /** Representa uma faceta.*/ typedef string Facet; typedef sequence<Facet> FacetList; /** * 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. */ ServiceOfferList find (in FacetList 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. */ ServiceOfferList findByCriteria (in FacetList facets, in PropertyList criteria);