Skip to content

Two way SSL + JWT (segurança) #51

Description

@kyriosdata

Contexto

O acesso à informação em saúde é possível apenas em cenários restritos e bem definidos. Para requisitar qualquer informação à RNDS, por exemplo, primeiro é preciso obter um token de acesso. A obtenção ocorre por meio de serviço específico.

A requisição para este serviço é GET /api/token. O token só será recuperado por esta requisição se o certificado digital empregando por quem efetua esta requisição já estiver devidamente configurado com o serviço. Esta requisição usa Two Way SSL como mecanismo de autenticação. Se o resultado é positivo, então retornará um JWT. Caso contrário, a requisição falha.

Necessidade

Serviço similar ao oferecido pela RNDS.

Requisitos

  • R1. Implementação deve ser realizada em Java. Caso faça uso de outro software existente, então este deve ser open source.

  • R2. Serviço deve estar em conformidade com Manual de Configuração - Obtenção do token de acesso.

  • R3. Serviço deve responder a requisição POST /certificado no qual o payload é o certificado .cer ou .pfx a ser "cadastrado". Este passo simula o processo de credenciamento. Nenhum segredo (chave privada) é mantido. Apenas a chave pública é mantida e associada ao usuário em questão. Adicionalmente, um código inteiro único é retornado para representar este usuário. Este valor inteiro de 5 dígitos, valor maior que 10000 deve ser único por usuário, que é identificado pelo próprio conteúdo do certificado. Observe que, por uma questão de desempenho, melhor é atualizar o SSLContext empregado com o conteúdo do certificado, em vez de armazená-lo em um keystore e ter que reiniciar a aplicação para que o keystore atualizado seja carregado.

  • R4. Serviço deve responder a requisição GET /api/token e, se o certificado empregado em uma interação Two Way SSL foi cadastrado anteriormente, conforme requisição acima, então um JWT será fornecido como resposta.

  • R5. Deve permitir o cadastro de certificado digital tipo A1 (.cer ou .pfx) (POST /certificado). Dados pertinentes deverão ser coletados do certificado para que possam ser confrontados em requisição posterior. Não é necessário que o certificado seja ICP-Brasil. Um certificado auto-assinado também deverá ser aceito. Observe que, para a RNDS, apenas certificados ICP-Brasil são aceitos. O processo, contudo, é o mesmo, o que não altera o processo de autenticação. Esta funcionalidade, conforme já mencionada, simula o processo de credenciamento.

  • R6. Serviço GET /seguro que fornece resposta OK (200) ou não autorizado conforme a validação do token.

  • R7. Deve incluir dois clientes, um em JavaScript e outro em Java apenas para ilustrar como as requisições citadas anteriormente podem ser executadas nestas duas plataformas. Ou seja, são clientes dos serviços a serem implementados.

Two Way SSL

JWT

Cliente (execução de chamadas)

Aplicações cliente devem obter acesso ao token e, para tal, precisam adequadamente efetuar a requisição ao servidor.

Integração do token

É possível que o serviço a ser construído precise contemplar necessidades do serviço protegido. O serviço protegido não faz parte do projeto, mas pode exigir funcionalidade a ser oferecida pelo serviço a ser construído.

https://www.youtube.com/watch?v=KxqlJblhzfI

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions