2009-03-10 9 views
5

Sto progettando un web api. Ho bisogno di lasciare che l'utente si autentichi. Sono un po 'titubante nel consentire all'utente di inserire il proprio nome utente/password in chiaro .. qualcosa come: api.mysite.com/auth.php?user=x & pass = yProgettazione di una web api: come autenticarsi?

Un'altra opzione di cui ho letto era Base64 codifica il nome utente/password e quindi l'invio di una richiesta HTTP. Quindi vuol dire che sul lato server, vorrei _GET ['user'] e _GET ['password'] e poi in qualche modo decodificarli?

E 'questo che fa Twitter: http://apiwiki.twitter.com/REST+API+Documentation#Authentication?

risposta

7

Base64 non offre alcuna protezione. Usa SSL per sicurezza reale.

+0

allora come fa Twitter api usare la sicurezza? http://apiwiki.twitter.com/REST+API+Documentation#Authentication – shergill

+0

Utilizzano l'autenticazione di base HTTP, che è testo normale, che il poster non desiderava. – truppo

+0

mi sto solo chiedendo .. se non è un problema/problema per Twitter; allora è davvero un grosso problema? – shergill

2

Se si tratta di un servizio Web, è consigliabile utilizzare una forma di autenticazione più sicura. Guarda ad esempio, nel protocollo LiveJournal: Challenge-Response.

+0

come fa twitter api a gestirlo: http://apiwiki.twitter.com/REST+API+Documentation#Authentication? – shergill

3

Proprio questa settimana l'IETF ha pubblicato uno new draft discutendo le proprietà di sicurezza dei vari meccanismi di autenticazione in HTTP. Dovresti trovare informazioni utili lì.

Personalmente raccomanderei almeno di leggere su digest authentication e analizzare se è adatto a voi.

L'utilizzo di SSL potrebbe anche essere un'opzione. Tuttavia, affronta anche problemi aggiuntivi a scapito di prestazioni, cachability e altri. Mantiene i dati del payload confidenziali. Se questo è un requisito, allora è la tua strada da percorrere.

5

Come menzionato da truppo, utilizzare prima SSL.

Quello che molti servizi Web hanno è un servizio "autenticato" che restituisce un token che viene poi utilizzato in seguito e può essere utilizzato in testo semplice, poiché è valido solo per un periodo di tempo limitato. Alla scadenza, il client esegue semplicemente un'altra autenticazione.

Il vantaggio chiave di questo è che riduce il numero di richieste SSL, che alleggerisce il carico sul server.

1

Si prega di non utilizzare l'autenticazione normale nome utente/password per l'API. Le persone non dovrebbero essere costrette a mettere le credenziali da servizi stranieri in un servizio di mashup.

Si prega di considerare l'uso di oauth http://oauth.net/ o almeno di un sistema basato sulla risposta alle sfide, come suggerito da Eugene.

Un modo semplice sarebbe quello di consentire al servizio guest di generare un token collegato alla sua app e a un utente. Se si inserisce un lavoro, si potrebbe persino rendere sicuro il tokencreation di avere consentito solo i servizi stranieri con alcuni meccanismi di chiave privata/pubblica.

L'utente deve autorizzare questo token nella propria app prima che il servizio guest possa utilizzarlo per ottenere l'autenticazione.

+0

Grazie per il tuo feedback. Ho intenzione di implementare il sistema di risposta alle sfide. – shergill

0

Ho trovato questo article apertura degli occhi.

In breve: utilizzare una coppia di chiavi API per utente. Uno è per l'autenticazione del client, uno per la firma dei parametri.

Problemi correlati