SDK Openbus
Transcrição
SDK Openbus
SDK Openbus Tecgraf PUC-Rio outubro de 2010 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 que o Openbus possua configurado um servidor LDAP • Normalmente, aplicações clientes (standalone) se autenticam no barramento usando usuário e senha. • Por exemplo, o V3O2 é uma aplicação standalone que se conecta ao barramento utilizando 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 • 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-privada 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) • O mecanismo de govenança é usado para garantir que apenas entidades autorizadas podem publicar serviços no barramento • exceção UnathorizedFacets 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);!