Giter VIP home page Giter VIP logo

spid-ansible-shibboleth-example's Introduction

Applicazione con autenticazione SPID

Questo playbook Ansible implementa un esempio di applicazione nodejs che serve i propri contenuti in HTTPS e permette di proteggere una parte dell'applicazione tramite autenticazione SPID.

Architettura

Layer architetturali

L'architettura è basata su container Docker ed implementa tre layer applicativi:

  • Layer HTTPS basato su NGINX e Letsencrypt
  • Layer autenticazione SPID basato su NGINX (Openresty) e Shibboleth
  • Layer applicativo (in questo esempio Nodejs ed Express)

Il layer applicativo, essendo un backend del layer di autenticazione, può essere implementato con qualsiasi tecnologia o framework e può anche risiedere su un host diverso da quello su cui risiedono i layer HTTPS e di autenticazione.

Autenticazione

Il layer di autenticazione passa le informazioni di autenticazione al layer applicativo attraverso un set di header HTTP, presenti nel caso la sessione sia stata autenticata.

La gestione delle sessioni di autenticazione è delegata a Shibboleth e nell'esempio attuale é basata sullo StorageService di default che mantiene la cache delle sessioni in memoria. Questo comporta la perdita delle sessioni di autenticazione in caso di riavvio del container Shibboleth.

Modificando la configurazione di default è possibile implementare uno storage persistente tramite database ODBC o Memcache.

Configurazione

Per la configurazione si faccia riferimento dal playbook site.yml.

Esecuzione del playbook

$ ansible-playbook -i "$SERVER_HOST," site.yml

Dove $SERVER_HOST è l'host (raggiungibile via SSH) su cui eseguire il processo di configurazione.

Nota: attualmente il playbook assume che l'host utilizzi apt come sistema di gestione dei pacchetti.

spid-ansible-shibboleth-example's People

Contributors

alranel avatar cloudify avatar dexterp37 avatar francescm avatar gunzip avatar ilpianista avatar peppelinux avatar ruphy avatar umbros avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

spid-ansible-shibboleth-example's Issues

Attributi Format e NameQualifier nella Logout Request

Dal forum:

per quanto riguarda il Service Provider basato su Shibboleth, vorrei porre l'attenzione sulla fase di Logout. Secondo le regole tecniche in "Gestione delle sessioni SSO e meccanismi di Single Logout", la Logout Request dovrebbe contenere nell'elemento Issuer gli attributi Format e NameQualifier. Questo però sembra non essere possibile in Shibboleth SP (al contrario della fase di AuthnRequest, dove è possibile impostare un template nel SessionInitiator).
Avete trovato una soluzione a questa problematica?

(Non ho verificato, sto solo riportando la issue qui)

Licenza

Ciao,
Sarebbe opportuno aggiungere un file di licenza per questo software.

Se me la indicate, posso fare una PR

Documentare installazione manuale Shibboleth

Sarebbe utile scrivere una piccola guida su come installare e configurare manualmente Shibboleth. Questo playbook funziona solo su alcuni sistemi operativi e in generale un playbook Ansible o anche un docker non si adattano all'integrazione con sistemi esistenti.

La guida dovrebbe anche spiegare come integrare Shibboleth a livello applicativo attraverso esempi di chiamate, visto che la documentazione originale di Shibboleth è ampia, un po' accademica, e non è chiaro cosa si applica a SPID e cosa no.

Esporre CSS Shibboleth

La pagina di errore di Shibboleth fa riferimento a /shibboleth-sp/main.css che attualmente non è pubblicato alla configurazione NGINX di shibboleth-nginx

Aggiungere il nameFormat nello attribute-map.xml

Senza nameFormat shibd rifiuta gli attributi provenienti dallo SPID-IdP con l'errore:

2017-12-14 11:31:06 INFO Shibboleth.AttributeExtractor.XML [2]: skipping unmapped SAML 2.0 Attribute with Name: familyName, Format:urn:oasis:names:tc:SAML:2.0:attrname-format:basic

vedi PR #26

Possibile errore nel playbook

Ho provato a usare il playbook (con ansible 2.4 per la configurazione, le VM sono Ubuntu server 16.04 e 17.04), ma mi pare ci sia un errore nella configurazione del container shibboleth-nginx che viene creato. Il file /etc/shibboleth/spidMetadata.xml non è più un file XML come nel repo ma una directory vuota:

#` docker ps --all
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS                      PORTS               NAMES
93f4dbe15c29        bradjonesllc/docker-nginx-letsencrypt   "/bootstrap.sh"          18 seconds ago      Exited (1) 13 seconds ago                       nginx-letsencrypt
a6da989f79e5        virtualstaticvoid/shibboleth-nginx      "/usr/local/bin/ep -v"   20 seconds ago      Up 18 seconds               80/tcp, 9090/tcp    shibboleth-nginx
e517bbe53ac0        readytalk/nodejs-hello                  "/nodejs/bin/npm star"   24 seconds ago      Up 23 seconds               8080/tcp            app-backend
# docker exec -ti a6da989f79e5 bash
root@a6da989f79e5:/# ls -la /etc/shibboleth/spidMetadata.xml/
total 8
drwxr-xr-x 2 root root 4096 Oct 23 07:29 .
drwxr-xr-x 5 root root 4096 Oct 24 12:01 ..

installazione playbook

buongiorno ce qualche guida che spiega come poter provare questo repository?
sto cercando un esempio di spid da poter implementare con una mia piattaforma cms.
purtroppo non conosco questo metodo playbook quindi sarebbe utile spiegare come poterlo provare grazie!

misconfigured ?

https://spid-test.spc-app1.teamdigitale.it/app risponde con 302 redirect su:

https://posteid.poste.it/jod-fs/ssoserviceredirect?SAMLRequest=lV...
&RelayState=ss...
&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1
&Signature=V8...

che risponde con:

messaggio di avviso
Errore: Impossibile stabilire l'autenticità della richiesta di autenticazione - Contattare il gestore del servizio

Playbook per Shibboleth

Il playbook mi ha funzionato correttamente solo con macchina aperta per far funzionare il certbot di Let's Encrypt. E' nota questa limitazione?

Nel caso non sarebbe meglio quindi definire come opzionale l'uso di Let's Encrypt nel playbook (installando un certificato autosigned in questi casi) oppure definire dei playbook alternativi che installano solo una parte (che ne so, solo Shibboleth con configurazione per SPID)?

Grazie

Stato di salute del progetto

Ciao,
Vorrei chiedere aggiornamenti sulla Roadmap di questo progetto per risoluzione delle issues e delle Pull Request.
Abbiamo ricevuto alcune segnalazioni da parte degli sviluppatori che ci indicano che questo repository conterrebbe risorse
non allineate con lo stato attuale delle Specifiche SPID.

Spero di ottenere un tuo gentile feedback entro la prossima settimana,
Grazie e a presto

Usare wildcard per pulire gli header

Attualmente more_clear_input_headers non supporta wildcard, questo rende fragile il meccanismo di anti-spoof degli attributi.

Con OpenResty / LUA dovrebbe essere possibile implementare un meccanismo di blacklist un po' più solido, con supporto di wildcard (es spid-*)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.