Ho un sito intranet, ospitato localmente all'interno della mia organizzazione. Lo stesso sito espone alcuni dati attraverso vari servizi web. È scritto utilizzando ASP.NET MVC 5 e WebAPI 2.
Al momento gli utenti possono accedere al sito Web utilizzando l'autenticazione di Windows e, una volta autenticati, possono accedere alle API. Tuttavia, ho anche bisogno di consentire l'accesso alle API utilizzando i token in modo che possano essere interrogati da processi automatizzati. Il processo che sto considerando di implementare è il seguente:
- Un utente autorizzato ad accedere al sito Intranet accede e passa a una nuova pagina. Creerò dove possono richiedere un token. Un token verrà generato e visualizzato sullo schermo per essere annotato.
- Vengono effettuate chiamate all'API, incluso il token nell'intestazione HTTP, che il server verificherà prima di restituire i dati.
Nota che:
- Ho bisogno della possibilità di revocare i token, quindi i JWT non sono adatti.
- L'utilizzo di OAuth non è un'opzione.
- L'accesso alle API avviene tramite HTTPS (e sto esaminando anche la crittografia dei dati restituiti).
Penso di essermi aggrovigliato nei nodi implementando questo, però. Dato che la possibilità di revocare i token significa che dovrò perseverare qualcosa nel database e che essenzialmente utilizzo i token di accesso personale che rappresentano le credenziali dell'utente, piuttosto che chiedere loro di generare i propri token utilizzando un privato condiviso chiave, sto lottando per giustificare a me stesso perché non dovrei solo generare una chiave vecchia (potrebbe anche essere solo un GUID) memorizzarla nel database insieme a una data di scadenza e un nome utente associato e forse una sorta di ambito per limitare le API a cui è possibile accedere e utilizzarle.
Ho scritto codice per creare HMAC e simili, ma nella soluzione che ho proposto non c'è alcuna verifica sull'origine della chiamata all'API, sto solo accettando che se il token corrisponde a quello che è stato un problema e non revocato, va bene.
Penso che il modello che sto suggerendo sia simile a quelli usati da GitHub e Microsoft Visual Studio Team Services I PAT per l'accesso alle loro API, ma non posso fare a meno di pensare il mio suggerimento, hanno alcuni difetti fondamentali. Qualcuno potrebbe forse indicare come la mia proposta potrebbe essere migliorata e / o suggerire un modello adatto per il mio scenario?