⚠️ This software is in End of Life, please don't use spid-testenv2 anymore! For testing a SPID SP consider to use spid-saml-check for a user friendly IdP or spid-sp-test for Continuous Integration tests.
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.7
-
Clonare il repository in locale
git clone https://github.com/italia/spid-testenv2.git
-
Entrare nella directory
cd spid-testenv2
-
Fare build dell'immagine
docker build -t italia/spid-testenv2 .
-
Lanciare il container:
docker run -p 8088:8088 -v $(pwd)/conf:/app/conf italia/spid-testenv2
L'immagine italia/spid-testenv2
a anche disponibile su Docker Hub.
-
Installare le dipendenze.
Su macOS si può usare
brew install libxmlsec1 libffi
.Su Debian/Ubuntu si può usare
apt-get install libxmlsec1 libffi6
. -
Creare ed attivare un virtualenv
virtualenv -p `which python` env . env/bin/activate
-
Installare i pacchetti necessari tramite pip
pip install -r requirements.txt
-
Generare una chiave privata ed un certificato
openssl req -x509 \ -nodes \ -sha256 \ -subj '/C=IT' \ -newkey rsa:2048 \ -keyout conf/idp.key \ -out conf/idp.crt
-
Creare e modificare il file config.yaml secondo le esigenze.
cp conf/config.yaml.example conf/config.yaml
-
Avvio
python spid-testenv.py
Alternativamente alle procedure riportate sopra, è possible installare spid-testenv2 tramite ansible.
Tutte le informazioni sono nella directory ansible/.
L'unico valore che è necessario modificare rispetto ai default è metadata
,
che indica i metadata dei Service Provider che si intendono collegare a
spid-testenv2.
I metadati possono essere:
- Compilati manualmente a partire dal file sp_metadata.xml.example;
- Generati ed esposti automaticamente dalla propria implementazione del Service Provider (ad esempio https://mioserviceprovider.example.com/metadata).
- Inseriti manualmente dall'interfaccia in
/admin/databasesprecord
.
spid-testenv2 supporta il caricamento in tre modalità, che possono essere combinate tra loro:
local
: i metadati vengono letti da file locali (all'avvio di testenv2);remote
: i metadati vengono letti da URL HTTP remote (all'avvio di testenv2);db
: i metadati vengono letti da un database (alla ricezione di ciascuna richiesta).
I Service Provider registrati correttamente saranno visualizzati nella pagina principale in https://localhost:8088/.
Nel caso in cui si usi la modalità db
sia il database che la tabella verranno creati automaticamente al primo avvio
se l'utente configurato ha privilegi per farlo. 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.
-
Per testare spid-testenv2 con un'immagine Docker di PostgreSQL
docker image pull postgres:13.2-alpine docker run --name some-postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres -d postgres:13.2-alpine
-
Configurare poi in
conf/conf.yml
la connessionedb: 'postgresql+psycopg2://postgres:postgres@localhost:5432/postgres' # ... database_admin_interface: true
spid-testenv2 utilizza SQLAlchemy. Si può usare qualsivoglia DBMS engine disponibile per SQLAlchemy e non per forza esclusivamente postgres.
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 nella pagina /add-user
.
In alternativa è possibile usare un database Postgres configurando l'opzione users_db
.
Questo software è stato sviluppato dal Team per la Trasformazione Digitale, ed è mantenuto con l'ausilio della community di Developers Italia.