2010-07-08 15 views
12

Ho un sito Web esistente che desidero trasformare in un provider OpenID. Tutti i miei account utente sono memorizzati in una tabella mysql.Creazione di un provider OpenID in PHP

ho capito perché un OpenID è rappresentato come un URL, ho intenzione di fare qualcosa di simile: http://login.mydomain.com/username

Ho installato un sottodominio, e ha creato un htaccess che reindirizza tutti gli URL per /login.php?username = [nome utente]

Il modo in cui lo vedo e mi dice se ho torto, qualcuno va a dire StackOverflow, entra http://login.mydomain.com/myUsername. Raggiungono una pagina sul mio server che richiede la password (poiché conosco già il loro nome utente), controllo che corrisponda e restituisca la chiave?

Le persone online raccomandate utilizzando Zend_OpenId_Provider. Ho letto la loro documentazione (http://framework.zend.com/manual/en/zend.openid.provider.html), ma trovo molto confuso. Non hanno esempi reali in cui il login/password dell'utente sono memorizzati in un database.

Ho anche visto php-open-id (http://github.com/openid/php-openid), ma nessun aiuto neanche lì.

Sembra essere una cosa piuttosto comune da fare. Esiste un tutorial là fuori o un esempio che posso facilmente adattare?

+1

Mi piacerebbe avere anche qualche esempio di questo, anche io sto andando a diventare OpenID Provider, potremmo collaborare. Ho in programma di utilizzare Janrain OpenID Enabled: http://www.janrain.com/openid-enabled, poiché Zend ha fallito alcuni dei miei requisiti. E temo che tu abbia letto la fonte ... – jayarjo

+0

Sono aperto a openid-enabled o qualsiasi altro. È così difficile trovare aiuto là fuori per diventare un fornitore. Ho fissato una piccola taglia sulla domanda. Forse aiuterà ... Vota per questa domanda. –

+0

La qualità della documentazione ufficiale di Zends è scadente. Difficilmente forniscono esempi del mondo reale. – jantimon

risposta

8

Come hai codificato questa domanda con zend-framework, penso che tu voglia implementarlo con ZF.

sguardo al costruttore della Zend_OpenId_Provider

public function __construct($loginUrl = null, 
          $trustUrl = null, 
          Zend_OpenId_Provider_User $user = null, 
          Zend_OpenId_Provider_Storage $storage = null, 
          $sessionTtl = 3600) 

L'importante è il parametro $storage.

Nell'esempio su http://framework.zend.com/manual/en/zend.openid.provider.html non passano alcun parametro. Ciò significa che per impostazione predefinita viene utilizzato il provider Zend_OpenId_Provider_Storage_File. Anche questo verrà memorizzato per impostazione predefinita nei file nella directory TEMP (/tmp su Linux).

Fondamentalmente, l'esempio dovrebbe essere completamente funzionante. Si potrebbe registrare alcuni più utenti chiamando $server->register($someid, $somepassword);

Ma come memorizza account per impostazione predefinita nella directory temporanea, è necessario sostituire quella linea da qualcosa di simile (se va bene ai conti di convertirli nel formato):

$dir = "/var/lib/myopenidusers"; 
mkdir($dir); 
$server = new Zend_OpenId_Provider(null, null, null, new Zend_OpenId_Provider_Storage($dir)); 

Ora, se si preferisce memorizzare gli utenti in un database è necessario implementare il proprio Provider_Storage.

Dai un'occhiata alla classe astratta abstract class Zend_OpenId_Provider_Storage. Questi sono i metodi che devi implementare.

+0

Nota che ho già tutti i miei utenti nel mio database. Devo ancora "registrarli"? –

+0

Sembra che devo scrivere tutto. Voglio solo che la parte "login" sia fatta attraverso la mia tabella mysql. Qui ho bisogno di implementare tutto il codice da zero, la maggior parte delle quali non capisco nemmeno ... –

1

Puoi provare JanRain Engage (http://www.janrain.com/products/engage). È un'interfaccia semplificata per l'integrazione di OpenID con le applicazioni web. La versione gratuita dovrebbe essere abbastanza buona per tutti gli scopi pratici.

+1

Engage è di ACCETTARE OpenId, non di essere un fornitore. Potresti pensare a FEDERATE, che non è gratuito. –

0

Usiamo: http://source.keyboard-monkeys.org/projects/show/communityid

Dal loro sito:

"Comunità-ID è un'implementazione OpenID in PHP che è OpenID 2.0 Community-ID è costruito al 100% sul software Open Source ed è. rilascio sotto licenza BSD Gli utenti possono tenere traccia dei loro siti fidati e gestirli.Il login a C-ID può essere username/passowrd o One Time Password con Yubikey.Un utente può avere più profili come con informazioni di contatto private o aziendali

Per gli amministratori di ID comunità, le statistiche sono disponibili per tracciare registrazione di nuovi utenti, utenti autorizzati al giorno o il numero di siti attendibili. Gli amministratori possono impostare il sito in modalità manutenzione o inviare e-mail a tutti gli utenti registrati.

Per i dati utente e l'autenticazione, l'amministratore può scegliere la memoria predefinita db o connettersi a un server LDAP. La corrente confermata supportata è OpenLDAP. Altri server LDAP dovrebbero funzionare anche bene."

+0

Sto provando a impostare questo, gestisco una piccola azienda con me e altri 3, gestiamo 4 siti Web e vorrei SSO, ho impostato la parte SSO, ma non sono sicuro di come inoltrare gli altri siti per accedere con questo :/ – MRVDOG

0

SimpleID è un piccolo e piacevole da usare + configurazione software del fornitore OpenID. Io uso io stesso e non può lamentarsi.

2

Ho provato di tutto elencati qui, Comunità ID, simpleid, janrain, ecc., insieme a tutti quelli che affermano di essere provider da OpenID Wiki/Libraries e non sono riuscito. Poi mi sono imbattuto in Prairie e l'ho eseguito in circa un'ora. Un altro po 'di lavoro per cambiare le query in index.php e login.php e stavo andando a lavorare contro il mio tavolo utente

Problemi correlati