Se hai bisogno di accedere a un account straniero di qualcun altro, hai bisogno del suo nome utente e password. Non c'è modo di aggirare questo. Non puoi hash o criptare 1 , hai bisogno dei valori semplici.
Ovviamente è un incubo, poiché gli utenti devono rivelare le proprie credenziali. Si fidano che non li stai abusando. Supponendo che non li stai intenzionalmente abusando (come venderli sul mercato nero come parte del tuo modello di business), devi evitare la perdita. Ciò include le violazioni dei dati nell'infrastruttura o gli amministratori del database che possono accedervi. Pertanto, la best practice qui dovrebbe non memorizzarli affatto . Il business delle aziende è di aiutare l'utente a compilare moduli, non fornendo un servizio di gestione password. Per " rendere più facile per [gli utenti] ricordare " le loro credenziali non è il tuo lavoro.
Una soluzione potrebbe essere quella di scrivere un'estensione del browser per l'installazione da parte degli utenti. Accedono a questi account stranieri da soli, sulla loro macchina, e il tuo plugin fa il suo lavoro lì. Il tuo server non entra mai in contatto con le credenziali. (Ovviamente l'utente deve ancora fidarsi dell'estensione per non spiarli).
Se questa non è un'opzione e il lavoro, incluso il login, deve essere fatto sul tuo server, allora non dovresti ancora memorizzare le credenziali dell'utente. Basta inoltrarli al servizio di accesso esterno e quindi memorizzare solo il token di sessione che deve essere utilizzato con l'API nel database per tutto il tempo necessario. Se il database viene violato, l'autore dell'attacco potrebbe essere in grado di dirottare le sessioni (peggio ancora), ma non ottiene la password in chiaro. Chiedi all'utente di fornire nuovamente le credenziali se il tuo server deve effettuare il login più volte.
1: Naturalmente dovresti criptare sempre tutti i dati sensibili quando li memorizzi ovunque, ma alla fine la chiave deve risiedere da qualche parte sul tuo server, a cui un presunto hacker potrebbe guadagnare accesso pure.