Come assicurarsi che una richiesta API provenga da un dominio specifico?

2

Sto aprendo qualche accesso API al mio sito e ai miei utenti è richiesto di specificare da quali dei loro siti web, come esempio.com, faranno le richieste API.

Mi chiedo se ci sia un modo per verificare che una richiesta HTTP provenga effettivamente da un dominio specifico, quindi posso rendere l'utente / dominio responsabile?

    
posta datasn.io 21.06.2015 - 04:17
fonte

2 risposte

5

Suppongo che intendi che i visitatori di un altro sito effettueranno richieste lato client alla tua API e che desideri attribuire queste richieste a quel sito.

Ci sono molti modi per farlo a seconda di quanto sia strong l'autenticazione.

Se stai usando i dati solo a fini statistici e forse per impedire l'uso non autorizzato da parte di aggressori molto poco sofisticati, puoi utilizzare il referrer HTTP. Questo può naturalmente essere falsificato, quindi non sarà adatto se hai bisogno di un'autenticazione molto strong.

Un'altra opzione è utilizzare una chiave API / ID del sito che viene trasmessa insieme a tutte le richieste. Un utente malintenzionato può facilmente prendere la chiave API da un cliente e utilizzarla in modo improprio su un altro sito, ma almeno è possibile riemettere la chiave / l'ID se è maltrattata a differenza del referrer.

Se hai bisogno di un'autenticazione molto strong, dovrai far generare ai tuoi clienti un token firmato a tempo limitato sul lato del server che l'utente quindi trasmetterà alla loro richiesta. Fondamentalmente, ogni cliente avrebbe una chiave segreta sul lato server e lo userebbe per crittografare un messaggio che includa un limite di tempo: puoi verificarlo decodificandolo quando l'utente lo passa. Potresti essere in grado di sfruttare qualcosa come link per farlo. Lo svantaggio di questo è che non è possibile farlo completamente dal lato client, quindi i clienti potrebbero dover apportare alcune modifiche alla loro applicazione.

    
risposta data 22.06.2015 - 02:29
fonte
0

La soluzione più completa sarebbe utilizzare TLS con i certificati client. Ciò consente al server di verificare l'identità del client. Qualsiasi altra soluzione come JWT o uno schema di firma personalizzato rischia di essere selvaggiamente insicura. TLS fa tutto il lavoro duro per te. Se sei particolarmente preoccupato per i compromessi CA, allora potresti configurarti come CA e poi aggiungerti al pool affidabile.

    
risposta data 22.06.2015 - 04:31
fonte

Leggi altre domande sui tag