Ho alcuni problemi di sicurezza riguardo al primo passaggio dell'autenticazione dell'account nella mia applicazione.
L'autenticazione passa attraverso un provider OpenID . Se la risposta di tale provider mostra che l'utente è già registrato, lo autenticherò, inviando un token di autenticazione che verrà memorizzato in un cookie e inviato come Intestazione bearer . Il token è firmato usando JWT e la sessione viene mantenuta in Mongo . Se è la prima volta che esegue l'autenticazione, creo l'account e faccio lo stesso processo.
Mi sembra insicuro perché non uso il parametro di stato di OpenID poiché non posso generare qualcosa basato su un utente che forse non esiste ancora.
Ho visto più volte che l'uso di tale parametro è stato strongmente raccomandato, ma anche risposte come questo dicendo che questo era inutile.
Dopodiché dovrà autenticarsi anche su un altro provider Oauth , ma poiché questa operazione sarà disponibile solo con gli utenti registrati, posso facilmente generare e inviare il parametro stato al provider utilizzando una sorta di crittografia con l'id utente per aiutarmi a recuperarlo e nessuno può ingannare la sessione.
Ho anche visto che non è una buona pratica controllare l' URL del referrer del callback Oauth , ma mi sembra abbastanza sicuro, dal momento che nega attacchi al client.
Si noti che l'applicazione utilizzerà SSL , quindi non ci saranno preoccupazioni su MITM .
So di poter creare un utente locale utilizzando la classica associazione di email e password e quindi di autenticarmi con i due provider OpenID , ma vorrei saltare tale processo noioso, è possibile, in modo sicuro?