Come funziona l'autenticazione con MoinMoin

Storicamente MoinMoin ha supportato solamente autenticazione con nome utente/password e sessioni basate su cookie: si esegue l'accesso attraverso la pagina di accesso, moin imposta in cookie e da quel momento in poi il cookie è usato per l'autenticazione fino a quando non ci si disconnette o il cookie viene cancellato (oppure scade).

In molti ambienti questo metodo non è dei più ottimali, dato che le restrizioni di accesso dovrebbero essere basate su database di utenti come LDAP (Active Directory). Per questo motivo, è stata sviluppata per MoinMoin un'autenticazione modulare, configurabile attraverso la variabile auth in cui vengono inseriti una serie di metodi di autenticazione che vengono utilizzati esattamente in quell'ordine.

Quando viene usato un database di utenti esterno, non è utile ricreare tutti gli utenti in moin. Per questo motivo è stata aggiunta l'opzione user_autocreate. Se viene impostata a True un nuovo profilo utente verrà creato automaticamente quando un utente ha superato l'autenticazione (e il sistema di autenticazione supporto la creazione automatica).

Attualmente sono supportati i seguenti metodi di autenticazione:

Altre pseudo-autenticazioni

Quelle che seguono non sono propriamente dei metodi di autenticazione, dato che non autenticano alcun utente, ma usano auth per altri scopi:

Plug-in forniti

MoinAuth (predefinito)

Questo è il metodo auth predefinito usato da moin (se è richiesto solo questo non è necessario configurarlo).

   1     from MoinMoin.auth import MoinAuth
   2     auth = [MoinAuth()]

Autenticazione HTTP

Per attivare l'autenticazione HTTP è necessario aggiungere quanto segue a wikiconfig.py:

   1     from MoinMoin.auth.http import HTTPAuth
   2     auth = [HTTPAuth()]

Per l'autenticazione HTTP di base usata con un server web come Apache, il server stesso gestisce l'autenticazione prima che venga chiamato moin. È necessario quindi inserire un nome utente e una password validi o l'accesso non viene consentito.

Il sistema di autenticazione HTTP di moin controlla solamente se l'autenticazione è avvenuta e consente l'accesso se è trovato un utente valido con quel nome utente.

Sfortunatamente è un po' più complicato di quanto sembri:

Autenticazione client certificato SSL

Per attivare l'autenticazione client attraverso un certificato SSL è necessario aggiungere quanto segue al file wikiconfig.py:

   1     from MoinMoin.auth.sslclientcert import SSLClientCertAuth
   2     auth = [SSLClientCertAuth()]

L'autenticazione client SSL deve essere utilizzata con un server web come Apache in grado di gestire SSL e presentare solo alcune variabili a Moin.

Il sistema di autenticazione SSLClientCertAuth dispone di alcuni parametri che vanno passati al costruttore:

Parametro

Valore predefinito

Significato

authorities

None

Un elenco di autorità accettate oppure None per accettarle tutte

email_key

True

Indica se l'email nel certificato deve essere usata per trovare l'utente

name_key

True

Indica se il nome nel certificato deve essere usato per trovare l'utente

use_email

False

Se impostato a True, l'email dell'account non può essere modificato e rimane quello del certificato

use_name

False

Se impostato a True, il nome dell'account non può essere modificato e rimane quello del certificato

autocreate

False

Se impostato a True, l'utente viene creato automaticamente

Per esempio, per accettare solo i certificati verificati da Apache e firmati da un'autorità specifica, usare:

   1     from MoinMoin.auth.sslclientcert import SSLClientCertAuth
   2     auth = [SSLClientCertAuth(authorities=['my.authority.tld'])]

PHP Session

Per attivare l'integrazione Single-Sign-On con le applicazioni PHP, utilizzare questo modulo. Legge i file di sessione PHP e si integra direttamente con i sistemi di autenticazione esistenti di PHP.

Per usare questo modulo, aggiungere quanto segue nel file di configurazione:

   1     from MoinMoin.auth.php_session import PHPSessionAuth
   2     auth = [PHPSessionAuth()]

PHPSessionAuth ha i seguenti parametri:

   1     PHPSessionAuth(apps=['egw'], s_path="/tmp", s_prefix="sess_")

L'unica applicazione PHP supportata è eGroupware 1.2, ma dovrebbe essere abbastanza semplice aggiungere qualche riga di codice che recupera le informazioni necessarie dalla sessione PHP. Nel caso lo aveste fatto, segnalatecelo e inviateci anche una patch.

OpenID (con BotBouncer)

Il plug-in di autenticazione OpenID consente agli utenti di iscriversi utilizzando il proprio OpenID e collegare tale OpenID a un nuovo o esistente account di Moin. Affinché gli utenti possano autenticarsi con OpenID, aggiungere il plug-in all'elenco auth o per richiedere la verifica OpenID con http://botbouncer.com usare:

   1     from MoinMoin.auth.openidrp import OpenIDAuth
   2     from MoinMoin.auth.botbouncer import BotBouncer
   3     auth = [OpenIDAuth(), BotBouncer("la-tua-chiave-API-botbouncer")]

L'autenticazione OpenID richiede le sessioni anonime: impostare anonymous_session_lifetime a un valore maggiore di zero. Consultare AiutoSuConfigurazione per i dettagli. Per OpenID è richiesto un tempo molto breve.

Configurazione avanzata di OpenID RP

Il codice OpenID RP può essere configurato per due casi d'uso:

  1. È possibile forzare un fornitore di accesso OpenID specifico. Può essere fatto in due modi:
    • Configurare semplicemente l'autenticatore OpenIDAuth in questo modo:

      auth = OpenIDAuth(forced_service='http://myopenid.com/')
    • Creare un oggetto OpenIDServiceEndpoint e usarlo per il parametro forced_service:

      fs = OpenIDServiceEndpoint()
      fs.type_uris = OPENID_2_0_TYPE
      fs.server_url = 'http://localhost:8000/openidserver'
      fs.claimed_id = 'http://specs.openid.net/auth/2.0/identifier_select'
      
      auth = OpenIDAuth(forced_service=fs)
    Nell'ultimo caso, non è necessario eseguire alcuna scoperta.
  2. È possibile specificare le funzioni da chiamare in diversi passi del processo di autenticazione OpenID per esempio per implementare "Attribute Exchange". Al momento questo non è documentato, è necessario controllare il file MoinMoin/auth/openidrp.py.

Autenticazione via LDAP

L'autenticatore LDAP di MoinMoin abilita la funzione single-sign-on (SSO), basta che ci sia già una directory LDAP con gli utenti, password e indirizzi email. Su Linux questo può essere un server OpenLDAP, su Windows (tipicamente il controllore del dominio) è chiamato "Active Directory".

Funziona in questo modo:

Installazione / Configurazione LDAP auth

È necessario installare il modulo python-ldap (e tutto quello da cui dipende, consultarne la documentazione).

È necessario anche un server LDAP o Active Directory.

Consultare wiki/config/more_samples/ldap_wikiconfig_snippet.py nell'archivio di moin per un esempio di codice da poter usare nella propria configurazione del wiki.

(!) Consultare anche il file README presente in quella directory.

Problemi con LDAP auth?

Chi offre supporto per MoinMoin non conosce la configurazione dei server LDAP degli utenti, prima di chiedere aiuto seguire questi passi:

/!\ Chiedere supporto a MoinMoin solo è stato usato ldapsearch con successo, è stata controllata approfonditamente la configurazione del wiki e ancora non funziona.

XMLRPC auth

   1 import xmlrpclib
   2 
   3 name = "TestUser"
   4 password = "secret"
   5 wikiurl = "http://localhost:8080/"
   6 
   7 homewiki = xmlrpclib.ServerProxy(wikiurl + "?action=xmlrpc2", allow_none=True)
   8 auth_token = homewiki.getAuthToken(name, password)
   9 
  10 mc = xmlrpclib.MultiCall(homewiki)
  11 mc.applyAuthToken(auth_token)
  12 # you can add more xmlrpc method calls to the multicall here,
  13 # they will run authenticated as user <name>.
  14 result = mc()

Utilizzare diversi metodi di autenticazione

Per utilizzare l'autenticazione SSL assieme a quella con nome utente/password, è necessario che il file wikiconfig.py contenga quanto segue:

   1     from MoinMoin.auth import MoinAuth
   2     from MoinMoin.auth.sslclientcert import SSLClientCertAuth
   3     auth = [SSLClientCertAuth(), MoinAuth()]

In questo caso, qualsiasi certificato client che l'utente fornisce verrà usato per consentire l'accesso, ma se non ne viene fornito uno sarà sempre possibile eseguire l'accesso con nome utente e password.

Scrivere il proprio metodo di autenticazione

Consultare il file contrib/auth_externalcookie/ e MoinMoin/auth/*.py negli archivi per degli esempi su come eseguire l'autenticazione. Inoltre, le docstring in MoinMoin/auth/__init__.py contengono una spiegazione su cosa è possibile fare e come farlo.

Gli autenticatori possono: