/spid-testenv2

New test Identity Provider for SPID

Primary LanguagePythonGNU Affero General Public License v3.0AGPL-3.0

SPID

Join the #spid-testenv channel Get invited SPID on forum.italia.it Build Status

spid-testenv2

Identity Provider di test per SPID

Questo Identity Provider consente agli sviluppatori di verificare le proprie integrazioni con SPID in modo semplice, ottenendo messaggi diagnostici chiari ed assicurandosi dell'interoperabilità.

Può essere facilmente eseguito in locale o su un proprio server seguendo le istruzioni di seguito riportate.

⚠️ AVVISO DI SICUREZZA: spid-testenv2 non deve essere utilizzato in ambienti di produzione. Nessun Service Provider deve accettare in produzione autenticazioni prodotte da spid-testenv2, che è solo uno strumento da utilizzarsi in fase di sviluppo e test.

Requisiti

  • Python 3+

Installare le seguenti librerie:

Su MacOS X si può usare brew install libxmlsec1 libffi.

Su Debian/Ubuntu si può usare apt-get install libxmlsec1 libffi6.

Installazione

Manuale

Creare ed attivare un virtualenv (opzionale ma raccomandato)

virtualenv -p `which python` env
. env/bin/activate

Installare i pacchetti necessari tramite pip

pip install -r requirements.txt

Ansible

Alternativamente alla procedura di installazione manuale riportata sopra, è possible installare l'Identity Provider di test tramite lo strumento di configuration management ansible. Tutte le informazioni sono nella directory ansible/.

Docker

Alternativamente alla procedura di installazione manuale è possible installare ed eseguire l'Identity Provider di test usando l'immagine presente su Docker Hub.

Per ottenere la persistenza della configurazione è necessario creare nell'host una directory, da collocarsi in un percorso a piacere (di seguito un suggerimento). Tale directory sarà mappata in conf/ all'interno del container.

mkdir /etc/spid-testenv2

Creare nella directory il file config.yaml e la coppia chiave/certificato per l'IdP, nonché eventuali metadata SP, come indicato nel paragrafo successivo.

Creare il container con il seguente comando:

docker create --name spid-testenv2 -p 8088:8088 --restart=always \
   --mount src="/etc/spid-testenv2",target="/app/conf",type=bind \
   italia/spid-testenv2

Avviare il container:

docker start spid-testenv2

Il log si può visualizzare con il comando:

docker logs -f spid-testenv2

Configurazione

Generare una chiave privata ed un certificato (non necessario se si usa il container Docker).

openssl req -x509 -nodes -sha256 -subj '/C=IT' -newkey rsa:2048 -keyout conf/idp.key -out conf/idp.crt

Creare e configurare il file config.yaml.

cp conf/config.yaml.example conf/config.yaml

Caricamento metadata Service Provider

L'unico valore che è necessario modificare rispetto ai default è metadata, che indica i metadata dei Service Provider che si intendono collegare all'IdP di test.

I metadati possono essere:

  1. Compilati manualmente a partire dal file sp_metadata.xml.example;
  2. Generati ed esposti automaticamente dalla propria implementazione del Service Provider (ad esempio https://mioserviceprovider.example.com/metadata).
  3. Inseriti manualmente dall'interfaccia in /admin/databasesprecord.

Il testenv2 supporta il caricamento in tre modalità, che possono essere combinate tra loro:

  • local: i metadati vengono letti da file locali (all'avviamento del testenv2);
  • remote: i metadati vengono letti da URL HTTP remote (all'avviamento del testenv2);
  • db: i metadati vengono letti da un database PostgreSQL (alla ricezione di ciascuna richiesta).

Nel caso in cui si usi la modalità db è sufficiente creare il database e poi spid-testenv2 creerà automaticamente la tabella. Abilitando l'opzione database_admin_interface spid-testenv2 esporrà una semplice interfaccia di gestione all'indirizzo /admin; è possibile ovviamente usare un qualsiasi tool di gestione esterno.

Avvio

python spid-testenv.py

Home page

Nella home page è presente la lista dei Service Providers registrati sull'IdP di test.

Metadata IdP

Il metadata dell'Identity Provider di test è generato automaticamente ed esposto all'URL /metadata. Questo metadata deve essere inserito nella configurazione del proprio Service Provider.

Utenti

Gli utenti di test sono configurati nel file users.json e possono essere aggiunti chiamando la pagina /add-user.

In alternativa è possibile usare un database Postgres configurando l'opzione users_db.

Logging

Il log del flusso di login / logout viene registrato nel file idp.log (tramite configurazione pysaml2) e inviato in STDOUT insieme al log del web server.

Autori

Questo software è stato sviluppato dal Team per la Trasformazione Digitale, ed è mantenuto con l'ausilio della community di Developers Italia.

Link utili