Ho un'applicazione che in pratica inserisce alcune righe dall'attuale applicazione web front-end.
Tutte le chiamate prima che il livello di servizio verifichi / convalidi se l'utente è autorizzato a inserire dati o meno (questo è il punto in cui sono bloccato con il mio approccio attuale descritto di seguito).
Devo creare un'API REST che permetta ad altri utenti / sviluppatori di terze parti (diciamo Developer A) di inserire alcuni dati automaticamente tramite alcune chiamate HTTP.
Ci sono due scenari per lo scenario sopra.
-
Inserisci dati per conto dell'utente - Utenti sullo sviluppatore Un sistema fa qualcosa. Lo sviluppatore A esegue quindi un endpoint REST HTTP per inserire alcuni dati nel nostro sistema.
-
Inserisci dati per conto del sistema - Lo sviluppatore A vuole inserire alcuni dati direttamente nel nostro sistema senza alcuna interazione da parte dell'utente (come un caricamento in batch di dati in cui non ci sarà interazione dell'utente sul sito dello sviluppatore A).
Ora ho creato un'API REST che utilizza Oauth 2.0 e sto permettendo i tipi di sovvenzione Authorisation Code
e Client Credentials
.
Authorisation Code
risolve il mio primo scenario, in cui lo sviluppatore A reindirizza l'utente al mio sito per l'autenticazione e l'autorizzazione, così quando creo il token di accesso, mantengo il collegamento tra l'utente e il token di accesso (che uso in seguito per stabilire quale l'utente ha creato il token e quindi verifica se l'utente è autorizzato a inserire o meno dati).
Ora per il secondo scenario, sto usando Client Credentials
dove lo sviluppatore A può immediatamente ottenere il token di accesso senza l'interazione dell'utente.
Quindi, in questo scenario, quando il mio codice tenta di convalidare la chiamata da questa chiamata REST, fondamentalmente fallisce perché il token di accesso non viene creato per un particolare utente .
Come dovrei risolvere questo problema? Sto andando in una direzione sbagliata?
Devo ridefinire la logica di convalida, (per ignorare la convalida in quanto il token di accesso da parte delle credenziali del client può essere ottenuto solo da un client fidato)? Oppure creare un utente fittizio / anonimo da associare al token di accesso per le credenziali del cliente?
UPDATE:
Solo qualche altro chiarimento e il mio ulteriore approccio.
La convalida menzionata sopra non è la convalida di nome utente / password, è una logica aziendale personalizzata che dipende dall'ID utente interno per verificare l'autorizzazione per un utente.
Ricevo questo ID utente come quello che ha autorizzato l'utilizzo del tipo di concessione del codice di autorizzazione.
Ma per le credenziali del cliente, il mio soggetto non è un utente, è un'applicazione, che non è la stessa dell'id utente.
Sto pensando di associarmi per affrontare questo come di seguito:
Un utente amministratore diciamo che User1
registrerà l'applicazione (creando ID client / segreto) nel mio sistema per utilizzare l'API. Prenderò nota dell'ID di questo utente nel mio sistema insieme ad altri dettagli relativi a Oauth (ID client / nome segreto / app, ecc.). Pertanto, quando lo sviluppatore utilizza le credenziali del client, che identifica l'applicazione (non un utente specifico), interrogherò il database e otterrò l'id utente del User1
che ha registrato l'applicazione. Quindi userò questo id utente per continuare tutte le convalide della logica aziendale (e passerebbe questa volta, perché questo utente User1
avrà accesso a tutte le risorse nel sistema, poiché è un utente amministratore).
Fammi i tuoi pensieri / commenti con questo mio approccio.