... | ... | @@ -28,14 +28,26 @@ |
|
|
<img src="http://www.tools.ages.pucrs.br/EasyWork/Wiki/raw/master/7.%20arquitetura/Microservices%20Diagram%20Easywork.png" alt="MICROSERVICES_DIAGRAM"/>
|
|
|
<br><br>
|
|
|
|
|
|
## 7.5 Segurança
|
|
|
A segurança do projeto foi implementada utilizando a dependência <a href="https://spring.io/projects/spring-security">Spring Security</a> e a autenticação utilizando <a href="https://jwt.io/>jsonwebtoken </a>. Funcionalmente a segurança é implementada da seguinte forma:
|
|
|
## 7.5 Análise dos princípios SOLID
|
|
|
|
|
|
#### Single Responsibility Principle:
|
|
|
O projeto possui três microsserviços separados em características macro: autenticação, pesquisas e respostas.
|
|
|
Cada microsserviço possui pacotes específicos para segurança, modelo de dados, comunicação com o banco de dados, modelo de saída, controladores e serviços.
|
|
|
Os controladores estão definidos conforme as rotas disponibilizadas, implementam um método para cada rota específica e delegam o processamento para os métodos de serviço.
|
|
|
|
|
|
#### Open Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, Dependency Inversion Principle:
|
|
|
O projeto possui uma lógica concisa, direta e enxuta, logo suas classes não precisam de adptações, porém podem ser estendidas quando necessário.
|
|
|
Novas rotas e serviços podem ser facilmente criados com base nos já disponibilizados, sendo necessário apenas definição dos endpoints e da regra de negócio.
|
|
|
O projeto se vale de diversas abstrações, interfaces e anotações providas pelo framework Spring e outros terceiros, assim trata-se de uma implementação que segue boas práticas consolidadas no mercado, que possui fácil manutenção e extensão, e que pratica grande reúso.
|
|
|
<br><br>
|
|
|
|
|
|
## 7.6 Segurança
|
|
|
A segurança do projeto foi implementada utilizando a dependência <a href="https://spring.io/projects/spring-security">Spring Security</a> e a autenticação utilizando <a href="https://jwt.io/">jsonwebtoken</a>. Funcionalmente a segurança é implementada da seguinte forma:
|
|
|
- A rota de cadastro da api de autenticação permite registrar usuários com no mínimo cinco informações nome completo, usuário, e-mail, senha e papel (name, username, email, password e role).
|
|
|
- Os possíveis papéis (roles) de usuários no sistema são
|
|
|
* ROLE_ADMIN - administrador, só pode ser cadastrado localmente no servidor da aplicação
|
|
|
* ROLE_RESEARCHER - pesquisador, cadastro via tela de cadastro em qualquer browser web
|
|
|
* ROLE_RESPONDENT - respondente, cadastro via tela de cadastro em qualquer browser web
|
|
|
- Os possíveis papéis (roles) de usuários no sistema são:
|
|
|
* ROLE_ADMIN - administrador, só pode ser cadastrado localmente no servidor da aplicação.
|
|
|
* ROLE_RESEARCHER - pesquisador, cadastro via tela de cadastro em qualquer browser web.
|
|
|
* ROLE_RESPONDENT - respondente, cadastro via tela de cadastro em qualquer browser web.
|
|
|
- A rota de login da api de autenticação permite que um usuário faça login no sistema utilizando usuário ou e-mail e senha. Ao validar as credenciais do usário a api retornar um token jwt que é salva pelo cliente front-end para acessar rotas protegidas do sistema.
|
|
|
- Os clientes devem mandar o token jwt no header de cada requisição que acessar rotas protegidas.
|
|
|
- O Spring Security será o responsável por restringir o acesso às rotas conforme abaixo:
|
... | ... | |