Skip to content
/ IdP_CRM Public
forked from NiMouh/IdP_CRM

CRM Flask Web-App that implements an Identity Provider w/ MFA using Authorization Code Flow (defined in OAuth 2.0 RFC 6749)

Notifications You must be signed in to change notification settings

V1dal9/IdP_CRM

 
 

Repository files navigation

Trabalho Prático de Integridade, Autenticação e Autorização

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.

Membros do Grupo

Este projeto foi desenvolvido por:

  • Ana Vidal (118408)
  • Simão Andrade (118345)

Estrutura do Projeto

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

Dependências

Para criar o environment, correr o seguinte comando:

$ python -m venv venv

Para ativar o environment, correr o seguinte comando:

$ venv\Scripts\activate

Para instalar as dependências necessárias para correr o projeto, basta correr o seguinte comando:

$ pip install -r requirements.txt

Para adicionar as tabelas à base de dados, correr o seguinte script db_script.sql:

$ python db_script.py

Important

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).

Segurança

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.bash

Important

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.

Divisão de Tarefas

  • 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;

About

CRM Flask Web-App that implements an Identity Provider w/ MFA using Authorization Code Flow (defined in OAuth 2.0 RFC 6749)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 88.7%
  • CSS 7.9%
  • HTML 2.9%
  • JavaScript 0.2%
  • PowerShell 0.2%
  • C 0.1%