2011-10-21 11 views
15

Sto studiando le opzioni per l'utilizzo di Shibboleth in una distribuzione Django. Da quello che ho trovato, le cose sembrano un po 'scarne. Qualcuno può commentare quanto segue?Django e Shibboleth

  • È chiunque utilizzi il modulo django_shibboleth (vedi http://code.arcs.org.au/gitorious/django/django-shibboleth/trees/1.1)? Se sì, quali esperienze hai avuto con questo modulo?

  • Le implementazioni SAML 2 per Django (ad es., Django-saml2-sp) e Python in generale (ad es. Pysaml2) sembrano in qualche modo sperimentali e includono poca documentazione. Qualcuno sa di soluzioni SAML 2 stabili per Django/Python?

Grazie in anticipo per qualsiasi aiuto!

+0

Quali funzionalità sono necessarie? Verrai mai autenticato solo contro un singolo IdP o hai bisogno di DS, WAYF, federazione, risoluzione degli artefatti, disconnessione e così via? – JimB

+0

Domande eccellenti! Questo particolare progetto avrà bisogno di DS, WAYF, ecc. – user1007116

+0

Soprattutto se utilizzerai più funzioni SAML di base, rimarrò con la prima parte della mia risposta e accetto con @hrnt. Incorporare lo shibboleth nativo SP sarà il percorso più affidabile. – JimB

risposta

3

Mentre non ho esperienza con Django + Shibboleth, ne ho alcuni con "semplici" Shibboleth.

Se Apache ha mod_shibboleth configurato correttamente, l'integrazione con un'app Web è relativamente semplice. Controlla il modulo django_shibboleth e puoi vedere che non contiene quel tanto di codice.

In particolare, se mod_shibboleth è già in esecuzione, non utilizzare una libreria SAML 2 di terze parti. Quelle portano molta complessità inutile.

9

Si consiglia di utilizzare Shibboleth Native SP (apache mod_shib). È ben testato, ha una vasta base di utenti ed è molto stabile.

Ho dato una rapida occhiata al modulo django_shibboleth, e sembra che dipenda da mod_shib e non faccia alcun SAML da solo. In questo senso, quel modulo è molto semplice e probabilmente funziona bene.

Non ho visto alcuna implementazione SAML2 python completa (o per lo più completa) e nessuna che sia un progetto attivo. I requisiti di sicurezza e crittografia xml sono un problema in Python, e questo probabilmente contribuisce alla mancanza di librerie.

[EDIT - Riporto parte di ciò] La libreria pysaml2 ha alcune attività di sviluppo e sembra abbastanza completa da uno sguardo superficiale. Utilizza il file binario xmlsec1 direttamente per le firme e la crittografia e pertanto non si basa su alcun binding obsoleto. Questa è probabilmente la soluzione migliore per utilizzare SAML2 direttamente in Python al momento.

1

È disponibile un modulo django-shibboleth che può essere utilizzato per ottenere attributi da un IdP e mapparli agli utenti nel sistema di autenticazione Django. Gran parte del lavoro è svolto da Shibboleth stesso, con solo una piccola quantità di codice richiesta per la mappatura.

L'imballaggio è disponibile da qui.

linuxsoft.cern.ch/internal/repos/ai6-stable/x86_64/os/Packages/django-shibsso-0.1-1.noarch.rpm

o la fonte da qui.

linuxsoft.cern.ch/internal/repos/ai6-stable/source/SRPMS/django-shibsso-0.1-1.src.rpm

Seguire le istruzioni Shibboleth per la configurazione del Shibboleth Service Provider locale (SP) per l'uso con un IdP.

Nel file http.conf o nella configurazione della propria app in conf.d, creare la seguente voce.

<Location /shibboleth> 
    AuthType shibboleth 
    ShibRequireSession On 
    ShibUseHeaders On 
    require valid-user 
</Location> 

Ciò dovrebbe comportare che gli URL a/shibboleth vengano indirizzati alla pagina di accesso di IdP. Dopo aver effettuato l'accesso, verrà restituita una pagina 404.

Aggiungi la configurazione, sostituendo l'app con il nome della tua app.

<Location "/"> 
    SetHandler mod_python 
    PythonHandler django.core.handlers.modpython 
    SetEnv DJANGO_SETTINGS_MODULE app.settings 
    PythonDebug Off 
</Location> 

Questo dovrebbe comportare il seguente errore dopo l'accesso tramite l'URL/shibboleth. L'URL corrente, Shibboleth.sso/ADFS, non corrisponde a nessuno di questi.

Per risolvere questo problema è necessario aggiungere quanto segue alla configurazione.

<Location /Shibboleth.sso> 
    SetHandler None 
</Location> 

/var/log/shibboleth/transaction.log dovrebbe indicare quali attributi vengono rilasciati.

+0

Invece di impostare 'SetHandler None' su" /Shibboleth.sso ", riordino il modo in cui Apache carica i moduli. Mi sono imbattuto in una situazione simile con mod_passenger + mod_shib2. Ad esempio, se mod_shib2 è caricato * dopo * mod_passenger, la posizione "/Shibboleth.sso" viene gestita dall'app Passenger (che non è un comportamento desiderato). Se mod_shib2 è caricato * prima di * mod_passenger - tutto funziona come previsto. –