Sto provando a progettare un'app basata sull'architettura dei microservizi. Il backend è scritto in JavaEE (micro profilo, non Spring Boot), mentre per front end vorrei usare Angular5.
Ora mi chiedo come implementare un'autenticazione che richiederebbe all'utente di presentare un certificato X.509 valido (file .p12) firmato con la mia CA autofirmata. Dopo che l'utente ha presentato il suo certificato, gli avrei chiesto la sua password (memorizzata nel database), mentre leggevo la sua e-mail dal certificato e lo registrava in base a quei due input. Se l'utente è autenticato correttamente, gli invierò il token JWT, con il quale accederà ai dati delle mie pagine angolari.
Non so come iniziare con un'implementazione di questo tipo, è una cosa fatta dal lato client, o è gestita da un lato server e, in caso affermativo, da quando il mio back-end è solo API REST.
Sto cercando un'idea generale su come implementare questo e, se possibile, una letteratura che sta affrontando questo tipo di requisito.
Ho vari micro servizi che eseguono la logica della mia applicazione e vorrei supportare diversi tipi di utenti: utenti regolari, moderatori e amministratori. Ogni microservizio può avere diverse regole di accesso. (ad esempio, l'opzione per recuperare tutti i dati è disponibile per tutti, l'opzione per recuperare un particolare dato è riservata agli utenti registrati, mentre l'opzione per creare nuovi dati è disponibile solo per mod e amministratori). Voglio che gli utenti normali effettuino il login solo usando la loro email e password (entrambi memorizzati nel DB), non ho problemi con questo, tuttavia vorrei che mod e amministratori debbano presentare il certificato x509 per poter accedere. In entrambi i casi, avrei quindi generato un token JWT e inviato all'utente (in token scriverei il loro ruolo, che determinerebbe se è possibile eseguire un'azione o meno).
Non sono interessato all'implementazione come lo sono io nel flusso di lavoro generale che la mia app dovrebbe supportare per implementare questa cosa. Posso capire ogni dettaglio in seguito, tuttavia non sono sicuro di come procedere in REST / Angular way. Ho idea di come farlo con l'app di rendering del server, ma ora voglio migrare al rendering client.