Componentes de microsserviços ############################# Uma breve descrição de cada componente de microsserviço que compõe a solução de Identidade Digital Descentralizada. Componentes da camada de aplicação ********************************** Carteira digital ================ `Carteiras digitais`_ são peças chaves para soluções de Identidade Digital Autossoberana, elas não servem apenas para guardarmos de forma segura e confiável as nossas credenciais, chaves privadas e informações, servem também para gerenciarmos que agentes terceiros possam, com o nosso consentimento, acessar as nossas credenciais e respectivos dados, nos fornecendo meios para verificar quem possui tais permissões e para revogar permissões que não queiramos mais ou que não fazem mais sentido. Além disso, Carteiras Digitais são responsáveis por fazer o gerenciamento de nossas credenciais, desde comprovantes de conclusão de cursos, que podem ficar por longo período, até um simples ingresso de cinema ou teatro, que poderiam ser descartados apenas a algumas horas depois de seu uso. Módulo de autorização ===================== Microsserviço responsável por realizar a identificação e autenticação dos usuários e das aplicações terceiras que se integrem com as APIs da solução de Identidade Digital Descentralizada, para isso, ela implementa protocolos padrão `OAuth 2.0`_, para realizar a autenticação e autorização de aplicações que se integrem com a solução e componente como o `OpenID`_, necessário para identificação e autenticação de usuários administradores e operadores da solução. Aplicação Web ============= Componente responsável por disponibilizar, por meio de uma interface gráfica (GUI), as funcionalidades para registro, gerenciamento, controle de agentes emissores e verificadores, assim como para controle e definição de credenciais. É por meio deste componente que os administradores de agentes conseguem configurar um novo agente, definindo se o agente em configuração será um emissor ou um verificador, que tipo de credencial interagirá e também os processos de *onboarding*, por exemplo. Aplicação de agentes ==================== Aplicações e sistemas legados de agentes emissores e/ou verificadores que implementem as regras de negócios específicas desses agentes, como por exemplo, as regras para validação biométrica e/ou biográfica para a emissão de uma credencial específica, ou ainda, as regras e validações necessárias para a verificação de credenciais de usuários. Gerenciador de dados ==================== Componente de *Dashboard* para verificação de informações de métricas da solução de Identidade Digital Descentralizada. Essas informações podem ser tanto técnicas, como taxa de transações por segundo e saúde dos agentes monitorados, quanto de negócios, por exemplo, quantidade de credenciais emitidas. API Gateway =========== Componente responsável por fazer o roteamento das funcionalidades disponíveis para integração com serviços terceiros via protocolo *HTTP Rest*. É por meio deste componente que as aplicações cliente, incluindo a própria aplicação web, se integram com as funcionalidades disponibilizadas pela solução de Identidade Digital Descentralizada. Componentes da camada lógica e regras de negócio ************************************************ Agentes ======= Microsserviços de agentes para emissores, verificadores e também para os holders que optarem por fazer a custódia de suas credenciais verificáveis na nuvem, ao invés de seus dispositivos móveis pessoais. Essas aplicações interagem diretamente com a carteira digital desses agentes e representam o coração da solução de Identidade Digital Descentralizada, uma vez que é neles que estão desenvolvidas as funcionalidades dos protocolos de IDD, como conexão entre agentes e também emissão, armazenamento e verificação de credenciais. Definição de credenciais ======================== Microsserviço responsável pelas funcionalidades para registro e manutenção de definição de uma credencial, tais quais: * Criação de estrutura de dados (*schema*) de uma credencial; * Versionamento de *schema* de credencial; * Definição da ordem dos atributos da schema de credencial para fins de apresentação; * Definição de título (*label*) internacionalizável para cada atributo de uma credencial; * Texto descritivo da finalidade e demais informações da credencial. Gerenciador de agentes ====================== O componente de gerenciamento de agentes é responsável por, dentre outras coisas, criar automaticamente agentes em uma instância de servidor, orquestrando a criação dele com o *Webhook orchestrator*, registrando-o numa rede *Hyperledger Indy*. Além disso, esse serviço também é responsável por interagir com os agentes em nome do *holder*, em caso de perda de dispositivo ou migração das credenciais. O *pool* de agentes é responsável pela disponibilização e gerenciamento dos agentes, que conseguem comunicar-se diretamente uns com os outros por meio do protocolo `Agent to Agent`_ enquanto sua integração com as aplicações de identidade digital descentralizada ocorre pela camada do componente de *Api Gateway*. Orquestrador de gerenciador de agentes ====================================== Este microsserviço, por sua vez, é o responsável por orquestrar e controlar uma coleção de gerenciadores de agentes em *cluster*, sendo assim responsável pelo dimensionamento de alocação de recursos e serviços para os gerenciadores de agentes da solução de Identidade Digital Descentralizada. Sua função, dentre outras coisas, é de realizar o balanceamento de carga entre os gerenciadores de agentes. Administração SS e SSA ====================== Microsserviço de administração, responsável pelo registro das organizações que utilizam a solução de Identidade Digital Descentralizada e, portanto, responsável também pela “multitenacidade” da solução, ou seja, garantir que as organizações participantes da solução tenha acesso somente às suas informações e agentes de sua alçada, não sendo possível controlar ou visualizar funcionalidades e informações de agentes de outras instituições. Histórico e *logs* ================== Microsserviço responsável pela captação, processamento e armazenamento de histórico e logs da aplicação, em observância com as práticas de Segurança da Informação, assim como com a Lei Geral de Proteção de Dados Pessoais, a LGPD. Além disso, é responsável também pela configuração de *log* utilizada pela solução, que é dividida em três categorias: * *Prod*: utilizada em produção, onde armazena apenas dados necessários para análise de suporte e operação da solução, sem revelar jamais dados pessoais ou informações da solução, a fim de se garantir a não exposição de possíveis vulnerabilidades da solução; * *Info*: geralmente utilizada em ambientes de homologação, em que se reflete o ambiente de produção, mas com dados fictícios; * *Debug*: utilizado em ambiente de desenvolvimento e testes, sendo repleto de diferentes cenários a fim de oferecer os meios necessário para análise de *bugs* e validação de implementação de novas funcionalidades. Métricas e desempenho ===================== Microsserviço responsável por coletar e registrar as métricas de performance da aplicação. Além disso, é também utilizado para a coleta de métricas de mercados, para a análise e geração de dados centrada nos representantes e demais usuários a fim de gerar informações úteis para a evolução do *backlog* da solução. Propagador de eventos ===================== Microsserviço responsável por tratar as ações executadas no sistema e dar o correto tratamento para que sejam propagadas, seja como *e-mail* ou via tópico de *webhook*, às participantes do ecossistema, assim como o seu devido registro pelo microsserviço *Hystory*. Portanto, é um componente extremamente importante, cuja principal função é monitorar um *Agent cloud* e propagar por meio de um barramento de *mensageria*, como por exemplo, um tópico em *Kafka*, onde todos os eventos relevantes que ocorram com o agente serão monitorados, por exemplo, solicitações de conexões, emissão de credencial ou solicitação para apresentação de uma credencial verificável. Orquestrador de propagador de eventos ===================================== Para realizar o monitoramento de um agente qualquer, é necessário, primeiro, criar uma configuração para o *webhook* orquestrator. Essa configuração singular ocorre por questões de conformidade de segurança, uma vez que todos os eventos disparados entre agentes são enviados para o *webhook*, uma configuração não pode acessar as informações de outro. As interações com a agência, para envio de notificações às aplicações clientes, acontecem nesta camada. Gerenciador de dados e consentimentos ===================================== Componente de microsserviço a ser desenvolvido para controle e gerenciamento dos consentimentos emitidos pelos portadores da Identidade Digital Descentralizada para com os agentes institucionais, sejam eles agentes emissores ou ainda verificadores. Este microsserviço faz-se necessário para atender às exigências das regras de consentimento previstas na Lei Geral de Proteção de Dados Pessoais, a LGPD. Componentes da camada de integração *********************************** Identificação e autenticação ============================ Microsserviço responsável pelas integrações e disponibilização das funcionalidades de autenticação de pessoas físicas –agentes holder– da solução, como por exemplo: * Integração com APIs de serviços públicos (e.g.: Data Valid do Serpro) para validação biográfica dos dados inseridos e trafegados no sistema; * Integração com soluções de biometria para verificação biométrica dos agentes *holders*. Servidor de e-mail ================== Microsserviço utilizado para contatar o usuário *holder* da solução via *e-mail*. Pode ser utilizado, desde enviar um código para duplo fator de autenticação e até para mensagens informativas sobre ofertas de credenciais e solicitação para realização de prova e verificação de credenciais. Camada de acesso a dados ======================== Componente de microsserviço da camada de acesso aos dados de cadastro das empresas controladoras dos agentes institucionais. Este microsserviço é o responsável por tratar e manter os dados dessas instituições e recebe requisições diretas do microsserviço de Administração. É importante ressaltar que nenhum dado de pessoa física é armazenado e tratado nesta solução, sendo trafegados, portanto, apenas dados de pessoas jurídicas. Notificador de evento entre agentes =================================== Componente responsável por garantir a entrega de mensagens para as aplicações que se integram com os agentes, por exemplo aplicações móveis que não possuem um *endpoint* persistente para integração direta. Para isso, essa solução é “multitenant”, ou seja, consegue operar vários agentes de vários proprietários. Além disso, é importante ressaltar que nenhuma chave é trafegada por meio deste componente, devendo o conteúdo das mensagens ser criptografado pelos próprios agentes, que trocam as chaves simétricas utilizadas em tais operações diretamente, por meio de suas conexões criadas pelo protocolo `Agent to Agent`_. Personalização de fluxos ======================== Microsserviço onde soluções terceiras implementam regras específicas dos agentes verificadores e/ou emissores nos processos desses agentes. O conceito proposto é que as organizações clientes possam desenvolver suas soluções para emissão e verificação da identidade dos usuários e que possam então automatizar processos que atualmente dependam de interação dos usuários ou, ainda, que atividades fora do mundo digital sejam necessárias para a conclusão de determinados processos. Para isso, será necessário que essas aplicações implementem um SDK (Software Development Kit) com uma interface específica e que se registre ao componente de Personalização de fluxos, que passará então a se integrar e enviar as transações realizadas pela solução para essa aplicação personalizada. Gerenciador de redes ==================== Microsserviço responsável por fazer o gerenciamento das redes de Identidade Digital Descentralizada integradas à solução, podendo oferecer para configuração dos agentes uma rede global pública, como por exemplo, a `Sovrin`_, a rede do CPQD ou até mesmo a criação de uma rede privada. Camada de dados pessoais – PII ============================== Componente para armazenamento de dados pessoais de *holder*, sendo, portanto, o componente responsável por armazenar dados pessoais que porventura sejam necessários para o funcionamento da aplicação e consequentemente sendo o microsserviço que implementa as funcionalidades de anonimização e pseudonimização desses dados pessoais, garantia de esquecimento e demais funcionalidades necessárias para aderência às normas, boas práticas e exigências da Lei Geral de Proteção de Dados Pessoais. .. _Carteiras digitais: https://thewalletwars.s3.amazonaws.com/The-Current-and-Future-State-of-Digital-Wallets-v1.0-FINAL.pdf .. _OAuth 2.0: http://www.rfceditor.org/rfc/rfc6749.txt .. _OpenID: https://dl.acm.org/doi/10.1145/1179529.1179532 .. _Agent to Agent: https://hyperledger-indy.readthedocs.io/projects/hipe/en/latest/text/0024-a2a-forward-secrecy/README.html .. _Sovrin: https://sovrin.org/wp-content/uploads/Sovrin-Protocol-and-Token-White-Paper.pd .. toctree:: :maxdepth: 1 cpqdidCreateAccount