API pubblica con token di autorizzazione - è possibile proteggere il token dimostrativo?

10

Ho un'API REST per eseguire alcuni calcoli e restituire il risultato, con un sistema di token molto semplice in cui solo gli utenti autorizzati possono utilizzare l'API.

L'utente aggiunge il proprio token alla query in questo modo:

{
    authorization: 'my token',
    moreData: 51351,
    etc: 'etc'
}

Poiché gli utenti di questa API di solito non sono programmatori, ho realizzato una pagina Web molto semplice che dimostra l'API, con una demo live che può essere eseguita direttamente dalla pagina Web, dimostrando come funziona e cosa viene restituito.

Questa dimostrazione ha un token di autorizzazione falso, che viene visualizzato nella query di esempio. Ho creato una funzione JavaScript semplice, nascosta e parzialmente offuscata che intercetta questo falso token e lo sostituisce con un token effettivo prima di inviare la richiesta, il che probabilmente ingannerà la maggior parte degli utenti. Ma un utente che osserva effettivamente la richiesta dallo strumento di debug nel browser vedrà facilmente il token effettivo che viene inviato e può utilizzare questo token per inviare la propria richiesta.

Ovviamente, potrei valutare il limite del token demo, ma questo significherebbe che gli utenti che stanno sperimentando la demo live potrebbero sperimentare blocchi temporanei, che vorrei evitare.

C'è un modo per proteggere il token di autorizzazione demo da un'API che deve essere facile da usare e richiede una demo dal vivo?

    
posta Erlend D. 16.11.2018 - 08:55
fonte

2 risposte

26

Come ha detto Steffen, non è possibile proteggere il token dagli utenti.

Vorrei solo aggiungere un suggerimento per uno scenario più generale di avere una Api "demo". Sembra che la tua API non abbia dati memorizzati e calcoli solo sull'input, quindi questo potrebbe non essere un problema per te, ma piuttosto che avere il token dimostrativo punta alla tua vera API, potresti puntarlo a una demo / sandbox versione con dati significativi, ma non reali che potrebbero:

  1. ha solo il token demo in esso - nessun altro utente
  2. si resetta automaticamente su base giornaliera
  3. contiene una piccola quantità di dati anziché il set completo (se hai dati)
  4. potenzialmente non restituisce risultati validi per tutti i calcoli come un modo per richiedere alle persone di ottenere un vero conto da te piuttosto che usare semplicemente il token demo

Questo mi sembrerebbe più sicuro in quanto il tuo sistema live non sarebbe mai toccato da nessuno con il token demo, e in scenari in cui potresti avere funzionalità che stai vendendo ecc., consente agli sviluppatori di integrarsi e confermare di aver integrato correttamente, ma non fornisce il set completo di funzionalità / dati al token demo.

    
risposta data 16.11.2018 - 10:51
fonte
11

Non è possibile proteggere il token perché, come ti sei accorto, l'utente può semplicemente verificare quale tipo di richiesta è stata inviata. Dal momento che il sito demo è sotto il tuo controllo, puoi comunque cambiare il token demo quando vuoi. Finché accetti solo token validi e modifichi il token abbastanza spesso limiti l'uso improprio del token. E poiché la pagina che include il token è stata generata dal server, potresti anche generare un token specifico per l'indirizzo IP di origine degli utenti e forse un cookie che potrebbe limitare ulteriormente l'uso improprio del token.

    
risposta data 16.11.2018 - 09:02
fonte

Leggi altre domande sui tag