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);
Download

SDK Openbus - Tecgraf JIRA / Confluence - PUC-Rio