Autorizzazione dell'API Web per altre app

1

Vorrei creare un'applicazione WebAPI che possa servire alcuni dei miei siti web. Il mio obiettivo è quello di astrarre alcuni compiti comuni come l'invio di e-mail, la risoluzione degli indirizzi ecc. Fornendo un'API a tutti i miei siti web.

Ho creato un'applicazione WebAPI che implementa la maggior parte delle API precedenti ma senza alcuna autorizzazione. Vorrei limitare l'accesso solo alle mie applicazioni.

Potrei implementare l'identità 2.0 o il provider di appartenenze, ma tutti questi sono pensati per essere utilizzati dagli utenti e non da altri siti web. I miei clienti sono siti Web e non solo utenti.

Quale sarebbe un approccio valido e sicuro a questo problema?

    
posta Menelaos Vergis 22.09.2014 - 10:21
fonte

2 risposte

2

Stai tentando di limitare l'utilizzo dell'API condivisa (Web) in modo che solo i tuoi siti possano utilizzare l'API.

Un'alternativa a OAuth menzionata da Joe potrebbe essere quella di creare controller API nei tuoi siti che utilizzano la tua API condivisa. Pertanto, un client inviava una richiesta a un controller API sul proprio sito e tale controller API chiamava il metodo API condiviso. Il controller API del tuo sito può quindi restituire direttamente i risultati al client. Quindi:

Client --> Site API --> Central API
Client <-- Site API <------|

I vantaggi di questo approccio:

  • È possibile proteggere le richieste all'API centrale con un filtro IP in IIS, poiché solo gli indirizzi IP del server dei siti possono utilizzare l'API centrale. Questo è probabilmente meno complesso e più veloce da implementare di OAuth.
  • Non dovrai gestire le richieste cross site nel client, che potrebbero essere bloccate dai browser.
  • È possibile modificare o memorizzare nella cache la risposta dall'API centrale se si desidera farlo. In questo modo puoi avere modifiche site specific senza la necessità di modificare l'API centrale.
risposta data 21.04.2015 - 22:10
fonte
1

Se quello che presumo è corretto, devi imitare ciò che ha facebook / linkedin / twitter e creare qualcosa di simile a:

OAuth ("Il framework di autorizzazione di OAuth 2.0", RFC 6749)

Ciò significa che le applicazioni client devono ottenere le chiavi richieste per poter accedere agli utenti / dati utente dal singolo accesso.

Il problema con questo tipo di scenario è che può diventare piuttosto complesso (quindi spero che tu stia lavorando con un team).

Alcuni dei motivi per cui diventerà complesso:

  • Creazione dell'infrastruttura interna per gestire l'Autorizzazione e il passaggio dei dati alle applicazioni client
  • Sicurezza della funzionalità di accesso (il tuo servizio gestirà tutti gli accessi e avrà almeno una crittografia strong, ecc.)
  • Mantenimento di un'API / documentazione che fornisce tutte le informazioni necessarie per altri sviluppatori per utilizzare l'API per accedere a utenti / dati utente

Un altro suggerimento che potrei considerare è quello di creare una funzionalità di login "sottile" che vive al di sotto di tutte le altre applicazioni (in pratica, si tratta di una singola applicazione strutturata in modo che tutte le altre applicazioni siano costruite su di essa (suona simile a ciò che è un'API, ma è diverso nel senso che l'accesso e l'applicazione client sono più strongmente accoppiati).

Il punto principale che dovresti capire da questo è che qualsiasi soluzione che trovi sarà "un po '" complessa da implementare (in base al tuo exp. e quanti sono nella tua squadra, ecc.).

    
risposta data 23.09.2014 - 13:53
fonte

Leggi altre domande sui tag