2010-03-12 18 views
9

Diciamo che ho un sito Web che ha molte informazioni sui nostri prodotti. Mi piacerebbe alcuni dei nostri clienti per essere in grado di cercare i nostri prodotti per i vari metodi, tra cui (noi compresi!):Best practice per le API sicure?

1) L'estrazione di dati da AJAX chiamate che i dati di ritorno in fresco, JavaScripty vie 2) Creazione di applicazioni iPhone che utilizzano tali dati; 3) Avere altre applicazioni Web usa questi dati per la propria estremità.

Normalmente, vorrei solo creare un'API e averne fatto. Tuttavia, questi dati sono di fatto moderatamente riservati - il che vuol dire che non vogliamo che i nostri concorrenti siano in grado di cercare tutti i nostri prodotti ogni mattina e quindi impostare automaticamente i loro prezzi in modo da indebolirci. E vogliamo anche essere in grado di vedere chi potrebbe abusare del sistema, quindi se qualcuno fa dieci milioni di chiamate complesse alla nostra API al giorno e abbassa il nostro server, possiamo eliminarle.

Il mio prossimo passo logico sarebbe quindi quello di creare una chiave per gli sviluppatori per limitare l'accesso - il che andrebbe bene per le app Web, ma non tanto per le chiamate AJAX. (Per come la vedo io, avrebbero bisogno di fornire la chiave nel codice JavaScript, che è in chiaro e facilmente visibile, e quindi in realtà non c'è alcuna sicurezza, in particolare se dovessimo usare le chiavi dei nostri sviluppatori sul nostro sito per effettuare queste chiamate AJAX.)

Quindi la mia domanda: dopo aver guardato intorno a Oauth e OpenID per qualche tempo, non sono sicuro che ci sia una soluzione che gestirà tutte e tre le precedenti. Esiste una sorta di "best practice" canoniche per le chiavi degli sviluppatori, oppure Oauth e OpenID gestiscono le chiamate AJAX in un modo che non ho ancora trovato, o mi manca qualcosa del tutto?

risposta

4

Penso che OAuth a 2 vie sia ciò che si desidera soddisfare i punti 2 e 3. Per il # 1 suggerirei che invece del cliente che effettua le richieste JS direttamente contro la vostra applicazione, potrebbero invece delegare tali richieste attraverso la loro applicazione web.

+0

Ma come è possibile proteggere questo server proxy API per impedire all'utente malintenzionato di abusarne? – Constantin

1

Una soluzione intermedia è richiedere una chiave API; e poi chiedere che chiunque lo usi, in realtà non lo usa direttamente con l'AJAX; ma avvolgere le loro chiamate in una richiesta sul lato server, ad esempio:

AJAX -> customer server -> your server -> customer server -> user 

Creare una semplice API di PHP per le parti interessate non dovrebbe essere troppo difficile, e le proprie applicazioni per iPhone sarebbero ovviamente tagliare fuori l'uomo medio, il trasporto con la propria chiave API.

+0

Ci deve essere un modo per farlo - Google Analytics non lo fa permettendo di incollare alcuni JS direttamente nella tua pagina e in qualche modo fa quella chiamata API sicura? Mi chiedo come lo facciano. –

1

OAuth e OpenID difficilmente avranno molto a che fare con le chiamate AJAX direttamente. Molto probabilmente, avrai una sorta di filtro di autorizzazione davanti al tuo gestore AJAX che controlla un cookie, e forse quel cookie è impostato come risultato di un'autenticazione OpenID.

Sembra che questo stia arrivando alla domanda "how do I prevent screen scraping". Se solo i clienti che hanno effettuato il login riescono a vedere i prezzi, questa è una cosa, ma presumendo che tu sia come la maggior parte dei siti di vendita al dettaglio e il tuo ostacolo all'accesso dei clienti sia il più basso possibile, non è di grande aiuto.

E, hey, se i prezzi non sono disponibili, non è possibile visualizzarli nei motori di ricerca come Froogle o Nextag o PriceGrabber. Ma questa è più una decisione di una strategia di business, non di programmazione.