2013-03-12 28 views
5

Ho un'applicazione web ballerino che è in parte sito web e parte web-service; alcuni percorsi sulla mia domanda dovrebbero avere un'autorizzazione su di essi.Perl Dancer Auth Solution che supporta le chiavi API?

Tutte le soluzioni di autenticazione che ho trovato per un'applicazione Web di Dancer richiedono il reindirizzamento a una pagina di accesso; mentre questo va bene per l'uso interattivo, questo non è ottimale per un servizio web riposante.

Esiste una soluzione di autenticazione che consenta qualcosa come le chiavi API?

+1

Non so molto delle chiavi API, quindi sfortunatamente non posso aiutarti. L'approccio di autenticazione delineato in Dancer :: Cookbook fornisce un semplice servizio web REST come autenticazione e memorizzazione dei dettagli di autenticazione nella sessione di ballerino. Ho usato con successo una strategia come questa con la mia app client/server basata su REST. Una cosa fondamentale da tenere presente è che i client devono essere in grado di trattenere i cookie di sessione e restituirli nell'intestazione della richiesta dopo l'autenticazione. Fammi sapere se desideri maggiori dettagli. –

+0

Ho pensato che l'utilizzo di una sessione/cookie violasse i principi di REST ... – Blaskovicz

+0

Suppongo che dipenda da come vedi i principi di REST. Un principio è creare servizi stateless e sì - l'uso di sessioni viola questo. Tuttavia, se vedi un principio REST come un uso pragmatico delle tecnologie Internet consolidate, le sessioni e i cookie hanno più senso. Un approccio simile suggerito da un collega è quello di passare l'hash username e password nell'intestazione della richiesta. È quindi possibile gestire le informazioni dell'intestazione in un trigger precedente utilizzando Dancer. Si tratta di un approccio stateless che non si basa sui cookie, ma potrebbe complicare il test dei servizi autenticati. –

risposta

2

Si dovrebbe dare un'occhiata a Dancer::Plugin::Auth::Extensible per costruire questo. Il modo più semplice per inviare credenziali in ogni richiesta. Sul client, devi essere chiamando il servizio REST in questo modo:

$ua->post('http://example.com/rest/getStuff?cred=foobar1234567, $search_criteria); 

Se lo fate in questo modo, è possibile fornire un cookie, ma non c'è bisogno di, e il cliente non avrebbe necessariamente bisogno di cura del cookie

Modifica: Se si desidera l'autenticazione di base, dare un'occhiata a Plack::Builder. Puoi usarlo per aggiungere l'autenticazione a determinate richieste.

+1

Ho parlato con l'autore di quel modulo; prova a reindirizzare a/login form con tutte le richieste (che non funzioneranno facilmente con servizi Web riposanti). – Blaskovicz