Sto cercando di capire come l'autenticazione e l'autorizzazione dovrebbero funzionare con un'API REST dato che l'API sarà disponibile per essere utilizzata da applicazioni di terze parti.
Mi rendo conto che se consentiamo ad altre applicazioni di utilizzare la nostra API, dobbiamo autenticare le applicazioni e l'utente.
Ho due modi per pensare a come dovrebbe funzionare l'autenticazione:
-
In ogni luogo in cui è richiesta un'autenticazione dell'utente, chiediamo anche l'autenticazione dell'applicazione e l'utente ha concesso autorizzazioni sufficienti all'applicazione.
Professionisti Abbiamo il controllo e i dati su quali applicazioni stanno accedendo alle nostre API?
Contro - Non c'è modo di sapere sulle applicazioni di frontend per mantenere il
client_secret
in sicurezza che impedirebbe agli altri di prenderlo e di posare come nostra applicazione quando accedono aAPI
. -
Emettiamo due tipi di
access_token
. Quando ci vengono fornite le credenziali, restituiamo unaccess_token
che non richiede l'autenticazione dell'applicazione sulle richieste. Ma quando un'applicazione vuole accedere senza credenziali (usando la concessione del codice di autorizzazione), restituiamo un token di accesso che richiederebbe l'autenticazione dell'applicazione sulle richieste.
Il secondo modo mi attrae di più. Ma se quello era il modo giusto, suppongo che sarebbe possibile accedere alle principali API usando solo le credenziali e senza autenticazione dell'applicazione. Anche se non sono riuscito a trovare un modo per farlo. E ho scoperto che la maggior parte delle volte, solo le applicazioni ufficiali possono accedere utilizzando le credenziali.
Il problema comune sembra che non sia possibile memorizzare client_secret
privatamente sulle applicazioni di frontend. In che modo queste API identificano le applicazioni ufficiali da altre applicazioni di terze parti e impediscono loro di accedere utilizzando le credenziali?
E quale dei modi di cui sopra è il modo corretto di fare l'autenticazione dell'applicazione?