Se devi accedere a un account straniero di qualcun altro, hai bisogno del suo nome utente e password. Non c'è modo di aggirarlo. Non puoi hash o crittografarli 1 , hai bisogno dei valori normali.
Ovviamente è un incubo, poiché gli utenti devono rivelarti le loro credenziali. Credono che tu non stia abusando di loro. Supponendo che tu non li stia abusando intenzionalmente (come venderli sul mercato nero come parte del tuo modello di business), devi prevenire le perdite. Ciò include violazioni dei dati nella tua infrastruttura o la possibilità per gli amministratori di database di accedervi. Quindi la best practice qui sarebbe quella di non archiviarli affatto . Il compito della tua azienda è aiutare l'utente a compilare moduli, non fornire un servizio di gestione delle password. " rendere più facile per [gli utenti] ricordare " le proprie credenziali non è compito tuo.
Una soluzione potrebbe essere scrivere un'estensione per il browser che i tuoi utenti possono installare. Accedono a quegli account stranieri da soli, sulla loro macchina, e il tuo plugin fa il suo lavoro lì. Il tuo server non entra nemmeno in contatto con le credenziali. (Ovviamente l'utente deve ancora fidarsi dell'estensione per non spiarlo).
Se questa non è un'opzione e il lavoro, incluso il login, deve essere fatto sul tuo server, allora dovresti comunque non 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'aggressore 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 accedere più volte.
1: Ovviamente dovresti crittografare sempre tutti i dati sensibili quando li memorizzi ovunque, ma alla fine la chiave per farlo deve risiedere da qualche parte sul tuo server, a cui anche un presunto aggressore potrebbe avere accesso.