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