====== OpenID ======
===== Cos'è e come funziona =====
Si tratta di un **sistema di autenticazione per siti web**. La propria identità viene registrata presso un server OpenID e protetta da una password, altri siti web possono essere configurati come client OpenID e quindi richiedere l'autenticazione al server.
In questo modo è possibile gestire le proprie credenziali sul server OpenID ed utilizzare sempre la stessa password per accedere a tutti i siti client.
La password viene registrata presso il server generalmente in formato hash md5 e non necessita di transitare mai in chiaro sulla rete.
È possibile utilizzare uno dei numerosi server OpenID per registrare la propria identità, oppure allestire in proprio un server OpenID completo o un semplice server personale per gestire una sola identità.
===== Registrare uno OpenID =====
Utilizziamo il fornitore di OpenID **''[[https://www.myopenid.com/]]''**, un provider che fornisce un servizio OpenID di base gratuito e numerosi servizi aggiuntivi a pagamento.
Cliccare su "Sign up for an openid" e scegliere uno username. In base allo username viene generato uno OpenID URL, ad esempio scegliendo **''Niccolò Rigacci''** l'URL OpenID sarà **''%%http://Niccolò-Rigacci.myopenid.com/%%''**. Oltre allo username si sceglie anche una password. Attenzione ai caratteri speciali, alcuni client OpenID potrebbero avere dei problemi a gestire l'encoding UTF-8.
Via email si riceve una richiesta di conferma da cliccare sul web.
myOpenID mette a disposizione acluni servizi aggiuntivi, ad esempio una pagina web a cui si viene rediretti digitando l'URL OpenID, la pagina può essere personalizzata con i propri dati, una foto, ecc. Molto utile anche il log dell'attività di autenticazione e la possibilita di creare diverse personalità da presentare ai diversi clienti OpenID.
L'accesso ad un sito che utilizzi OpenID avviene in questo modo:
- Il sito web richiede l'OpenID, digitiamo l'URL completo di ''%%http://%%''.
- Si viene rediretti sulla pagina web del server OpenID, nel nostro esempio sul sito di myopenid.com. In questa pagina si digita la password.
- Se l'autenticazione ha successo si viene infine rediretti sul sito originale.
Il sito che ha chiesto l'autenticazione OpenID memorizza un cookie con il quale rimaniamo autenticati senza digitare nuovamente la password.
È possibile **eliminare un account** da myOpenID, il provider assicura che lo stesso username non verrà assegnato nuovamente per evitare che qualcuno possa rubare l'identità. Contestualmente viene anche assegnato un //recovery code//, nel caso si cambiasse idea.
===== Allestire un provider OpenID personale =====
==== phpMyID ====
FIXME
**NOTA:** Dal sito di phpMyID: **phpMyID is no longer developed or maintained**. Inoltre phpMyID non è compatibie con ambienti PHP rinforzati, come Apache Suhosin installato da Debian Squeeze. Ecco il messaggio di errore:
phpMyID is not compatible with 'suhosin'
Per forzare il funzionamento anche in presenza di Suhosin dovrebbe bastare disabilitare tale funzione nel VirtualHost (si consiglia di farlo solo se il VirtualHost è dedicato esclusivamente a phpMyID):
php_flag suhosin.simulation On
quindi in **''MyID.config.php''** impostare nell'array **''%%$GLOBALS['profile']%%''** l'elemento **''%%'allow_suhosin' => true%%''**.
FIXME
Scarichiamo il software **[[http://siege.org/projects/phpMyID/|phpMyID]]** e scompattiamo i file **''MyID.config.php''** e **''MyID.php''** in una directory accessibile via web. Nel primo si impostano **''auth_username''** e **''auth_password''**. Per calcolare l'hash di ''auth_password'':
echo -n 'username:phpMyID:password' | openssl md5
Infine si crea un ''index.html'' che indica il link a cui risponde il server (notare che l'href deve essere assoluto):
L'OpenID è l'URL con il quale si accede all'''index.html''.
La password viene richiesta dal server come autenticazione HTTP Digest, quindi transita crittografata con hash md5, sebbene la connessione sia HTTP.
Nel file di configurazione si possono impostare altre informazioni personali, tipo nome e cognome, indirizzo email, una foto, ecc.
==== php-openid ====
FIXME
**NOTA:** Questa configurazione non è funzionante:
* Come definire nomi utente e password nell'Auth_OpenID_FileStore?
* Pare che il server risponda a richieste del tipo ''%%http://hostname/server.php/idpage?user=USERNAME%%'', come usare invece l'URL radice (''%%http://hostname/%%'') visto che si tratta di un vanity URL con un solo utente?
* Dalla documentazione: //It does not require passwords//. Che razza di server è allora?
La libreria **php-openid** contiene sia il codice per un client che il codice per un server. Il server è in ''/usr/share/doc/php-openid/examples/server/'', bisogna copiarlo in una directory accessibile via web.
La configurazione si esegue scompattando il file **''setup.php.gz''** e puntandoci il browser. C'è un problema con il PHP 5.3.3 e l'istruzione **''dl()''** che genera un errore fatale (tale funzione dovrebbe solo essere deprecata), purtroppo l'errore //Call to undefined function dl()// non viene segnalato nel log di PHP.
Come workaround si può definire la funzione all'inizio del file **''setup.php''**:
function dl($str) {
return false;
}
Viene generato a video il file di configurazione che deve essere salvato come **''config.php''**: