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à.
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:
http://
.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.
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
.
Scarichiamo il software 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):
<html> <head> <link rel="openid.server" href="http://niccolo.rigacci.org/MyID.config.php"> <link rel="openid.delegate" href="http://niccolo.rigacci.org/MyID.config.php"> </head> <body></body> </html>
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.
NOTA: Questa configurazione non è funzionante:
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?
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
:
<?php /** * The URL for the server. * * This is the location of server.php. For example: * * $server_url = 'http://example.com/~user/server.php'; * * This must be a full URL. */ $server_url = "http://niccolo.rigacci.org/"; /** * Initialize an OpenID store * * @return object $store an instance of OpenID store (see the * documentation for how to create one) */ function getOpenIDStore() { require_once "Auth/OpenID/FileStore.php"; return new Auth_OpenID_FileStore("/tmp/openid"); } ?>