Domanda

Sto lavorando a un servizio REST che ha alcuni requisiti:

  1. Deve essere sicuro.
  2. Gli utenti non dovrebbero essere in grado di creare richieste.

La mia attuale soluzione proposta è quella di avere un'intestazione di autorizzazione personalizzata che assomigli a questa (allo stesso modo in cui funzionano i servizi Web di Amazon):

Authorization: MYAPI username:signature

La mia domanda è come formare la firma. Quando l'utente accede al servizio riceve una chiave segreta che dovrebbe essere in grado di utilizzare per firmare le richieste. Ciò impedirà ad altri utenti di inviare richieste per loro conto, ma non impedirà loro di inviare richieste.

L'applicazione che utilizzerà questo servizio è un'applicazione per iPhone, quindi stavo pensando che potremmo avere una chiave pubblica incorporata nell'applicazione con cui possiamo fare una firma aggiuntiva, ma questo significa che dovremo avere due firme, una per la chiave utente e una per la chiave dell'app?

Qualsiasi consiglio sarebbe molto apprezzato, mi piacerebbe molto farlo bene la prima volta.

È stato utile?

Soluzione

Penso che il modo più semplice per fare questo nel modo giusto sia usare l'autenticazione client HTTPS. Il sito di Apple ha un thread proprio su questo argomento.

Modifica: per gestire l'autorizzazione, creerei una risorsa separata (URI) sul server per ciascun utente e consentirei solo all'utente (autenticato) di manipolare questa risorsa.

Modifica (2014): Apple ha cambiato il software del forum negli ultimi sei anni; la discussione è ora su https://discussions.apple.com/thread/1643618

Altri suggerimenti

La risposta è semplice: non si può fare. Non appena spedisci qualsiasi soluzione all'utente finale, lui o lei può sempre attaccare il server con cui sta comunicando. La versione più comune di questo problema è barare con gli elenchi dei punteggi migliori nei giochi Flash. Puoi renderlo più difficile incorporando una sorta di crittografia nel client e offuscando il codice ... Ma tutto il codice compilato e offuscato può sempre essere decompilato e non offuscato. È solo una questione di quanto tempo e denaro sei disposto a spendere e allo stesso modo per il potenziale attaccante.

Quindi la tua preoccupazione è non come tentare di impedire all'utente di inviare dati difettosi al tuo sistema. È come impedire all'utente di danneggiare il sistema. Devi progettare le tue interfacce in modo che tutto il danno causato da dati difettosi influisca solo sull'utente che lo invia.

Cosa c'è di sbagliato con Autenticazione digest HTTP ?

C'è una discussione migliore di questo qui:

Best practice per la protezione di un'API / servizio web REST

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top