Domanda

Sto cercando di creare un'API e stavo prendendo in considerazione la possibilità di gestire l'accesso all'API, ma quello che sto facendo è più di un sistema b2b che consente alle aziende di accedere ai dati da incorporare nei loro siti. Non avrò alcun b2c all'inizio.

Quindi oauth non sembra lo strumento giusto per me, ho cercato fonti per costruire un sistema basato su chiavi, ma non ho trovato nulla.

È già disponibile qualcosa? È meglio creare un hash di alcuni dati inviati dagli utenti o qualcosa del genere?

È stato utile?

Soluzione

Ciò di cui hai bisogno è solo qualcosa che identifichi in modo univoco l'utente ... Basta usare un UUID o forse un hash di un UUID.

Assicurati solo che questo ID venga passato su un canale sicuro, se lo stai passando su un canale non sicuro, potresti dover implementare un metodo di protezione dell'ID simile all'autorizzazione digest HTTP.

Altri suggerimenti

Dai un'occhiata a quasi tutti i siti / servizi Web 2.0. Tutti hanno vari gradi di autenticazione e gestione delle chiavi API. Flickr, Twitter, Github, ecc.

A seconda dei requisiti, nel mondo delle API web, fornire ai tuoi partner / sviluppatori una chiave API (identificazione) e richiedere che firmino le chiamate (autenticazione) è piuttosto standard. Esistono molti modi per specificare le firme. Una cosa abbastanza comune in questi giorni è; prendi tutti i parametri della chiamata, un timestamp (+/- 5 min wiggle), un segreto condiviso e cancellalo usando SHA-1 o MD5 (SHA-1 migliore).

Puoi implementarlo tu stesso o trovare un partner (ce ne sono alcuni) che lo faccia per te.

L'approccio generale qui proposto (per usare un hash che include una chiave API e l'ora corrente) sono tutti validi - sicuramente meglio che includere una "password" nel messaggio.

Tuttavia, esiste un modo cripto standard di fare questo "mung". operazione chiamata HMAC. Vale la pena dare un'occhiata se vuoi qualcosa di più standard / robusto / sicuro.

Finalmente c'è ovviamente il "gold standard" dalle opzioni di sicurezza: utilizzare un certificato digitale per firmare tutte le richieste (può essere computazionalmente costoso) o utilizzare per firmare una richiesta iniziale che quindi genera una chiave di sessione di utilizzo limitato (ad esempio una sola API, con una scadenza dopo 60 minuti).

In alternativa, puoi utilizzare SSL a 2 vie per il livello di trasporto e fidarti semplicemente di ciò all'interno dell'applicazione / API.

Dipende davvero dalla sicurezza che vuoi ...:]

Non vorrei semplicemente utilizzare i dati inviati dall'utente, in quanto ciò può creare una situazione in cui le chiavi API sono indovinabili. In genere, prendo alcuni dati generati dall'utente, quindi li combino con alcuni dati relativamente unici (ovvero l'ora corrente del sistema) e hash che usando SHA-1 o qualcosa del genere, forse cambio la rappresentazione se non lo faccio voglio che sia ovviamente un hash SHA-1, quindi usalo come chiave.

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