kyriosdata / rnds

Integração RNDS
https://kyriosdata.github.io/rnds
Apache License 2.0
42 stars 14 forks source link

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

Open kyriosdata opened 1 year ago

kyriosdata commented 1 year ago

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

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

DukeOmni commented 1 year ago

Estou tendo dificuldades para realizar testes no passo 1 Post "/certificado", para cadastrar no keystore um certificado auto-assinado. Através da ferrramenta postman a requisição simplesmente não passa quando importa um certificado auto-assinado.

DukeOmni commented 1 year ago

Ainda sobre o passo 1, post "/certificado". Quando é configurado no application.yml a opção client-auth: need, ele necessariamente espera um certificado que já está importado no keystore. A pergunta é como abrir esse endpoint para cadastrar o novo certificado, visto que o serviço sempre espera um

kyriosdata commented 1 year ago

O endpoint /certificado não será protegido. Qualquer um poderá submeter um certificado para o nosso credenciamento, ou seja, para /certificado. De fato, nem tampouco /api/token será protegido. Ou seja, qualquer cliente poderá realizar as duas operações. A primeira tem uma diferença da segunda muito importante. A primeira sempre irá funcionar, enquanto a segunda pode não retornar um token conforme desejado, afinal, se o cadastramento prévio não foi feito previamente, então não poderá ser gerado um token.