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.
- 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
.
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
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/.
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
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
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. Per generare tali metadati vi sono tre possibilità:
- compilarli a mano a partire dal file sp_metadata.xml.example;
- compilarli usando l'interfaccia disponibile in https://idp.spid.gov.it:8080/
- generarli (ed esporli) automaticamente dalla propria implementazione Service Provider (ad esempio https://www.mioserviceprovider.it/spid/metadata).
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.
python spid-testenv.py
Nella home page è presente la lista dei Service Providers registrati sull'IdP di test.
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.
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
.
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.
Questo software è stato sviluppato dal Team per la Trasformazione Digitale, ed è mantenuto con l'ausilio della community di Developers Italia.