Sto lavorando a un'applicazione che comprende WebAI C # (su siti Web di Azure) e un'app mobile nativa. In sostanza, un client crea una serie di messaggi utilizzando un'interfaccia Web e questi possono essere sfogliati nell'app mobile. Al momento, non ci sono restrizioni su questi dati.
Una nuova funzione richiede che alcuni client possano proteggere i loro dati, quindi solo le persone autorizzate possono accedere. Non vogliamo usare un nome utente / password poiché l'overhead sarebbe troppo grande. I nostri clienti potrebbero avere centinaia o migliaia di persone che vogliono sfogliare i loro messaggi.
Il mio approccio sarebbe stato:
- L'utente crea un servizio tramite il nostro portale web.
- L'utente carica una chiave pubblica in questo servizio, che archiviamo.
- L'utente distribuisce la chiave privata corrispondente utilizzando un MDM a tutti i dispositivi che desiderano sfogliare i messaggi.
- Le richieste HTTP per questi messaggi richiedono la presentazione del certificato.
- L'API convalida la richiesta utilizzando la chiave pubblica.
Ci sono due cose che mi infastidiscono.
Non useremo una CA per verificare la catena di certificati. I certificati del cliente potrebbero essere autofirmati. Non vedo questo come un grosso problema dal momento che sappiamo chi sono i nostri clienti.
Avere la chiave privata distribuita su molti dispositivi potrebbe essere considerata una cosa negativa, anche se credo che questo scenario sia piuttosto comune, ad es. autenticazione a MS Exchange. La responsabilità di proteggere la chiave privata risiederà con il cliente.
Quindi, alla mia domanda: Questo approccio sembra valido?
Inoltre, i siti Web di Azure supportano solo una configurazione on / off dei certificati client, rendendo impossibile l'unione di chiamate sia pubbliche che private. Avere due endpoint dovrebbe considerare una buona pratica, ad es.
Richiederebbe informazioni di intelligence nell'app per sapere dove andare, ma renderebbe la configurazione delle app molto più semplice poiché hanno il certificato del client o non lo fanno.
La mia domanda bonus: L'uso di due endpoint è una pratica comune?