Autenticazione delle richieste tra API

1

Sto costruendo un'applicazione ("A") che può interfacciarsi con un'API di dati di terze parti ("B"). A è commissionato dall'Organizzazione "X", che ha dati su B. Gli utenti di A hanno bisogno di accedere ai dati di Org X su B. Tuttavia, B non ha alcuna registrazione degli utenti di A.

A e B vivono su server diversi e comunicano attraverso internet pubblico. Utente di Un accesso con nome utente e password e viene emesso un token di accesso in scadenza che autentica le richieste HTTP all'API dati di A. La mia domanda è come proteggere al meglio le comunicazioni dall'API dati di A all'API dati di B.

In altre parole, qual è il modo migliore per garantire che le richieste per B provengano davvero da A? Si dovrebbe memorizzare una specie di token Bearer non scadente che B può autenticare?

Si noti che gli sviluppatori di B hanno accettato di apportare alcune modifiche a B in uno sforzo fornendo A i dati di cui ha bisogno, ma le modifiche dovrebbero mirare ad essere minori.

    
posta Rich 21.04.2017 - 17:53
fonte

1 risposta

1

Poiché si tratta di chiamate di back-end, ci sono alcune opzioni che puoi fare:

  • Certificati : SSL / TLS consente l'autenticazione reciproca in base alla quale è possibile eseguire contemporaneamente la crittografia e l'autenticazione end-to-end. Se abiliti i certificati client sull'API A (e lo controlli su B), e viceversa, hai un tunnel strong. Inoltre, è possibile utilizzare il blocco dei certificati, nel qual caso potrebbe essere opportuno utilizzare certificati autofirmati. Finché Api B può verificare che la chiave privata di A sia stata utilizzata per firmare il traffico inviato, hai questo affidamento.

  • Segreto condiviso : puoi crittografare il traffico con un segreto condiviso tra entrambe le parti (A e B), questo ovviamente richiederebbe avere segreti forti e una buona politica di rotazione delle chiavi . Il segreto condiviso fungerà da autenticazione (es .: se conosci il segreto, sei la persona giusta). Questo potrebbe essere visto come una chiave API o qualcosa che è noto a entrambe le parti, ma nessun altro.

  • basato sul token : puoi ottenere token al portatore da un provider di identità generale (IdP); quale Api A avrà una combinazione appID / segreta. L'IdP (fidato) creerà un token firmato che l'APi B può validare e, d'ora in poi, si fida che la richiesta provenga da "A", come verificato da una terza parte fidata, vale a dire l'IdP.

Inutile dire che Api B dovrebbe essere accessibile tramite una connessione HTTPS, e come difesa in dettaglio è possibile inserire dispositivi di rete ACL in mezzo.

    
risposta data 21.04.2017 - 22:28
fonte

Leggi altre domande sui tag