2015-10-13 17 views
9

Ho delle API. Alcuni di essi sono limitati all'accesso da applicazioni di terze parti da parte di OAuth.Come accedere in modo sicuro alla mia API dalla mia applicazione web?

Ho anche un'applicazione web. Gli utenti possono accedere e vedere le loro informazioni private.

L'API viene chiamata anche dall'applicazione Web. La mia domanda è qual è il modo migliore per accedere all'API con misure di sicurezza.

1. Third party applications -> OAuth 

2. My own web application -> ??? 

La mia applicazione web utilizza l'id di sessione per l'autenticazione. Immagino che il trasferimento dell'ID di sessione con l'intestazione HTTP possa essere un buon modo, ma non ho fiducia.

Per exmaple ...

$ curl -X PUT \ 
     -H "X-Sample-Application-Id: "My own web application's ID" \ 
     -H "X-Sample-Session-Token: yeoql2dvn7whpm4tbe61viscv" \ 

Se API riceve questa richiesta, utilizzare la sessione per l'autenticazione, invece di OAuth e identificare l'utente ....

Qualsiasi aiuto sarà apprezzato.

Grazie,

.. Ho trovato domande simili

Questions About Consuming Your Own API with OAuth


Update1

Alcuni dicono JWT (JSON Web Token) è buono.

https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/

http://blog.mitsuruog.info/2014/08/jwtjson-web-tokenwebapicredential.html


Update2

io possa essere in grado di utilizzare "credenziali di password Resource proprietario" di OAuth

https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/709.html

Oppure ... "Client Crede conferisce "sembra molto meglio.

risposta

9

Ho intenzione di elaborare un po 'su questo, perché è una buona domanda, e c'è molta confusione intorno ad esso - così nudo con me qui.

Se l'API che si sta tentando di proteggere verrà utilizzata esclusivamente da privati ​​per le app lato server e non da sviluppatori di terze parti, mi raccomando, ALTAMENTE, di utilizzare l'autenticazione di base HTTP per proteggere il proprio servizio API .

Il modo in cui funziona è super dritto in avanti:

  • per l'utente (s), coppia di generare API Key (s) che consistono di un ID e segreto. Le chiavi API sono sinonimi di username/password. Basta generare valori ID/segreti casuali usando una libreria UUID.
  • Quando si effettua l'autenticazione con il proprio servizio API, fornire tali credenziali API nell'intestazione Autorizzazione HTTP per identificarsi.Ecco come appare con curl:

    $ ricciolo --user my-api-keyid: my-api-chiave segreta https://api.myservice.com/blah

La cosa fantastica di Auth di base è che:

  • È molto semplice da implementare.
  • È uno standard ben definito.
  • Finché si fanno richieste su HTTPS e non si pubblicizzano le proprie chiavi API, si dovrebbe essere sicuri.

Ora, se si sta creando un servizio API in cui si desidera autenticare gli utenti da una varietà di ambienti (non solo da applicazioni lato server), è necessario utilizzare il protocollo OAuth2.

Questo è ciò per cui è stato progettato.

Il protocollo OAuth2 può autenticare gli utenti in vari modi, ma di conseguenza è piuttosto complicato. L'aggiunta di OAuth per il vostro sito può essere una sfida, anche se si sta utilizzando biblioteche popolari/ecc

Ecco come funziona OAuth (una rapida ripartizione):

La password di Grant

La password flusso in OAuth è dove si scambiano un nome utente/password per un token di accesso (di solito un JWT). Quindi si utilizza il token di accesso nell'intestazione dell'autorizzazione HTTP per identificarsi con il proprio servizio API.

Questo è quello che fa la maggior parte delle persone quando costruisce SPA con Angular/React, così come le app mobili.

Le credenziali client Sovvenzione

Il Cliente flusso Credenziali è dove si scambiano una chiave API (proprio come autenticazione di base) per un token di accesso. Quindi si utilizza il token di accesso nell'intestazione dell'autorizzazione HTTP per identificarsi con il proprio servizio API.

Questo è ciò che le persone fanno quando costruiscono app lato server con OAuth.

The Grant implicito

Questo flusso è ciò che si vede quando si accede in qualche posto come Facebook. Si fa clic su un pulsante, si viene reindirizzati su un altro sito per autenticare/accettare le autorizzazioni e infine si ritorna al sito principale con un token Acccess che si utilizza per identificarsi. Questo NON è l'ideale per i servizi API.

L'autorizzazione Codice di Grant

Questo flusso è esattamente come il flusso implicita, ad eccezione di ottenere di nuovo un codice di autorizzazione che poi cambio di un token di accesso che si utilizza per identificarsi. Questo NON è l'ideale per i servizi API. È leggermente più sicuro.

Se stai pensando di utilizzare OAuth a causa del tuo caso d'uso, ti consiglio vivamente di verificare un provider di autenticazione come Stormpath.Automatizzano molte di queste cose e risolvono molte complessità attorno a OAuth.

Altrimenti, invia Autentica base!

+1

Mi dispiace per la mia risposta in ritardo. Il tuo suggerimento è ottimo e non ho mai pensato ad un'idea così eccellente. Alla fine ho scelto il tipo di concessione della password perché devo implementare anche la nostra app mobile. (forniremo le nostre API agli sviluppatori di app per dispositivi mobili di terze parti) Inoltre, anche OAuth è complicato, ma posso trovare alcune librerie. Questo è anche un bene per me. L'uso dell'autenticazione di base potrebbe richiedere l'implementazione personalizzata, non è sicuro, ma come creare una tabella per il salvataggio di chiavi e segreti generati. – zono

+0

Grazie per la spiegazione, ho alcune domande sulla concessione della password. Ho creato un server di autorizzazione che protegge l'oauth/token con un'autenticazione di base che ha bisogno di client_id e client_secret per accettare le richieste. Ma come posso proteggere il client_secret? Il client è un'app Angular 2. È necessario proteggere oauth/token uri con l'autenticazione di base? – Paolo

Problemi correlati