O trabalho consiste em desenvolver um IdP (Identity Provider) que suporte serviços com diferentes graus de criticidade e aplique MFA (Multi-Factor Authentication), de forma dinâmica, de acordo com os requisitos do serviço e o risco percebido pelo utilizador.
Este projeto foi desenvolvido por:
- Ana Vidal (118408)
- Simão Andrade (118345)
As diretorias do projeto estão organizadas da seguinte forma:
project/ --> Diretoria principal
│
├── frontend/ --> Diretoria das aplicações cliente
│ ├── client1/
│ ├── client2/
│ └── client3/
│
├── backend/ --> Diretoria das aplicações servidor
│ ├── database/
│ │ ├── db_script.py --> *Script* para criar as tabelas da base de dados
│ │ └── database.sql
│ ├── authorization_server.py
│ └── resource_server.py
│
└── requirements.txt
Para criar o environment, correr o seguinte comando:
$ python -m venv venvPara ativar o environment, correr o seguinte comando:
$ venv\Scripts\activatePara instalar as dependências necessárias para correr o projeto, basta correr o seguinte comando:
$ pip install -r requirements.txtPara adicionar as tabelas à base de dados, correr o seguinte script db_script.sql:
$ python db_script.pyImportant
De modo aos caminhos da base de dados estarem corretos, é necessário que o script seja corrido na pasta onde se encontra a aplicação (pois o código é interpretado relativamente ao local onde se encontra).
Para a geração de assinaturas de tokens JWT, é usado um par de chaves RSA. Para gerar as chaves, correr o script generate_rsa.bash na diretoria backend/keys do seguinte modo:
$ bash generate_rsa.bashImportant
Quando utilizar a aplicação, é necessário gerar um novo par de chaves RSA, de modo a não comprometer a segurança da aplicação.
- Desenvolvimento do Resource Server (Simão Andrade):
- Criação da estrutura da base de dados;
- Criação de funções que gerem aleatoriamente os dados da base de dados;
- Chamadas à base dados para o backend;
- Validação dos tokens de acesso;
- Controlo de acessos;
- Implementação de um sistema de logs;
- Validação e sanitização dos dados inseridos pelo utilizador;
- Desenvolvimento do IdP (Simão Andrade e Ana Vidal):
- Desenvolvimento do backend;
- Desenvolvimento do frontend (design e interação com o utilizador);
- Implementação de MFAs (excluindo o smartcard);
- Implementação de um sistema de logs;
- Gestão de tokens e sessões;
- Definição do cálculo do risco;
- Proteção contra erros de CSRF (Cross-Site Request Forgery);
- Validação e sanitização dos dados inseridos pelo utilizador;
- Implementação de autenticação por smartcard;
- Desenvolvimento dos três Client Applications (Ana Vidal):
- Implementação do authentication code flow do lado do cliente;
- Implementação do frontend (design e interação com o utilizador);
- Validação e sanitização dos dados inseridos pelo utilizador;
- Testes à aplicação feita (Ana Vidal e Simão Andrade):
- Testes de validação;
- Testes de stress;
- Testes com risco alto;
- Relatório Final (Ana Vidal e Simão Andrade):
- Descrição das estruturas de dados armazenadas;
- Estrutura das mensagens trocadas e fluxos de mensagens;
- Abordagem MFA e gestão de riscos;
- Interfaces utilizadas e os seus parâmetros;
- Alguns detalhes de implementação relevantes;
- Resultados obtidos;
- Extra:
- Documentação do projeto;