Redireccionamento para o Localizador de Evidência
Após receber os dados e pedido do cidadão, o portal de serviços necessita de comunicar e enviar o pedido para o localizador de evidência. Com base nos requisitos técnicos OOTS (Once-only Technical System), além dos campos a enviar, ficou definido até ao momento da redação deste documento que:
O pedido é enviado por parâmetros de URL;
O localizador de evidência não requer autenticação do cidadão do pedido;
A informação enviada não é particularmente sensível, mas pode ser manipulada nos parâmetros do URL;
Gestão de chaves de encriptação com todos os portais com que o localizador irá comunicar pode ser uma tarefa complexa e a sua necessidade será revista após a fase de testes do OOTS Projectathon.
Este tema ainda está sob consulta e é possível que haja alterações se for determinado ser necessário um método mais seguro.
Com base nesta informação, uma vez que não requer autenticação, e de forma a não expor tão facilmente os campos do pedido que podem ser adulterados no endereço URL da página, foi pensada a seguinte solução de ofuscação que procura ser simples sem recurso a métodos de encriptação mais complexos:
Criação de uma Mask Key (Chave de Ofuscação) única associada ao portal de serviços:
Esta chave é composta por uma string de 255 caracteres alfanuméricos;
A chave é gerada pela equipa responsável pelo localizador de evidência durante o processo de integração, e é fornecida ao portal de serviços através de um canal seguro (a ser determinado);
A chave é secreta no sentido em que nunca deve ser exposta ao público;
A chave é única para cada portal de serviços.
O portal de serviços codifica e mascara parte do conteúdo do pedido de evidência com o auxílio da chave de codificação:
A codificação é realizada através de uma cifra de substituição XOR de forma a não ser demasiado simples como um único encoding em Base64, nem demasiado complexa como o recurso a criptografia;
O pedido de evidência é assumindo como partindo de um JSON string e depois convertido a Base64, seguido da codificação por uma cifra de substituição com a chave de ofuscação;
O resultado deverá ser um conjunto de caracteres alfanuméricos representados na constante MASK_CHARS;
É um método simples de encriptação simétrica e ofuscação, relativamente robusto a ataques de força bruta, cuja segurança está fortemente dependente do sigilo da chave.
O pedido codificado deverá ser depois encoded para URL e enviado para a página do localizador de evidência como parâmetro URL (ev-request) juntamente com o código identificador do portal de serviços (portal-id).
O localizador de evidência depois irá obter, internamente, a chave de codificação específica ao portal de serviços associado ao pedido através do identificador do portal e descodificar o pedido para obter o JSON string do pedido original.
Para aplicar os passos 2 e 3 acima, o portal de serviços deverá implementar o seguinte código. Para efeitos práticos e de apresentação, iremos apresentar o código na linguagem Java e os passos mais importantes em sequência:
Obter a Mask Key que será fornecida ao portal de serviços durante o processo de integração e que estará especificamente associada ao portal de serviços que pretende integrar. Para este exemplo teremos a chave “42oszYRtoj3BgXu9” a título exemplificativo. Contudo, será fornecida mais tarde uma chave com 255 caracteres alfanuméricos durante o processo de integração.
Implementar os seguintes métodos auxiliares de codificação associados à chave de codificação:
A partir do JSON String do pedido, aplicar a seguinte sequência de codificações até obter o parâmetro a ser enviado. A demonstração abaixo incluirá um exemplo de um pedido JSON num formato já desatualizado, contudo pode ser aplicado a qualquer tipo de input desde que se trate de um JSON com a estrutura de dados correcta e tenha um encoding UTF-8.
Uma vez obtida a JSON string codificada do pedido, enviar para a página do localizador de evidências como um parâmetro URL de acordo com a especificações abaixo.
Parâmetros URL
ev-request
O JSON String do pedido após codificação em base64, codificação com chave única, e codificação URL.
Conteúdo do pedido “EvidenceRequest” pode ser consultado abaixo.
portal-id
Código de identificação do portal de serviços.
O código é fornecido pelo localizador de evidência para identificar o portal de serviços localmente.
request-id
Código de identificação gerado pelo portal de serviços.
Utilizado para identificar todas as invocações de serviço relacionadas com o processo global de pedido de evidência.
Exemplo de URL de Redireccionamento
EvidenceRequest
requirement
Identificador do requerimento
procedure
Identificador do procedimento
redirectUrl
Endereço para o redireccionamento de volta ao portal de serviços após o localizador enviar a evidência no final do processo
Endereço deve ser URL encoded; Endereço será também utilizado em caso de erro que não permita proceder no processo.
+ person
Dados da pessoa (natural person).
++ levelOfAssurance
O nível mínimo de garantia eIDAS
“High”, “Medium”, ou “Low”. Case sensitive.
++ id
Identificador único eIDA
Opcional
++ familyName
Apelido da pessoa
++ givenName
Primeiro nome da pessoa
++ dateOfBirth
Data de nascimento da pessoa
Formato yyyy-MM-dd
requesterId
Identificador do portal
requesterType
Identificador do tipo de portal
+ requesterNames
Lista de nomes do portal em vários idioma
Lista
++ lang
Idioma
“EN”, “PT” …
++ name
Nome do portal no idioma
fullAddress
Morada da entidade solicitadora (portal)
Opcional
locatorDesignator
Nº da porta ou nº do edifício da entidade solicitadora
Opcional
postCode
Código postal da entidade solicitadora
Opcional
postCityName
Localidade da entidade solicitadora
Opcional
adminUnitLevel1
Código do nível mais alto da morada (quase sempre o código do país)
Opcional
adminUnitLevel2
Código do nível secundário da morada (costuma ser um código da cidade ou região)
Opcional
possibilityForPreview
Indica se é um pedido de evidência que com possibilidade de pré-visualização da evidência
Booleano
Exemplo de JSON do EvidenceRequest
Last updated