Es scheint, dass jede Anwendung, die ich erstelle, in der Lage sein muss, gelegentlich E-Mails zu senden. Z.B. Status E-Mails. Für diese Frage sei angenommen, dass meine Anwendung ein Backup-Tool ist, lokal auf vielen Windows-Clients installiert ist und jede Installation tägliche Status-Mails senden muss. Es könnte auf dem Server einer Organisation oder auf einem privaten Computer installiert werden.Meine Anwendungen müssen E-Mails senden, wo und wie sollte ich das SMTP-Passwort speichern?
Ich bitte den Benutzer, die Zugangsdaten zu einem E-Mail-Konto, das er besitzt (STMP-Host, Port, Benutzername, Passwort, Von-Adresse) anzugeben. Ich kopierte diesen Ansatz von Anwendungen wie Atlassian Jira/Confluence oder JFrog Artifactory. Wo und wie speichern sie die SMTP-Passwörter?
Mein derzeitiges Verständnis ist: Salting/Hashing Ansätze gelten hier nicht, da ich das Klartext-Passwort abrufen müssen, um die E-Mails tatsächlich zu senden. Ich möchte die Passwörter nicht im Klartext speichern, also muss es eine Art Verschlüsselungs-/Entschlüsselungsansatz sein (richtig?).
Ich kann dem Benutzer mitteilen, dass er sein Haupt-E-Mail-Konto nicht verwenden, sondern ein sekundäres Konto verwenden oder, noch besser, ein spezielles E-Mail-Konto einrichten soll, das nur von meiner Anwendung verwendet werden soll. Wenn der Benutzer ein Administrator einer Organisation ist, kann er möglicherweise ein E-Mail-Konto auf seinem Exchange-Server einrichten oder die SMTP-Weiterleitung konfigurieren. Aber ich kenne mich, und ich kenne meine privaten Benutzer, einige von ihnen werden sowieso nur ihren Haupt-E-Mail-Account verwenden, also möchte ich alles tun, um ihre Anmeldeinformationen so sicher wie möglich zu halten (damit meine ich "Best Practices befolgen ").
Vorzugsweise möchte ich das verschlüsselte Passwort in der Datenbank der Anwendung speichern.
Ich habe stundenlang Stunden damit verbracht, Fragen zu stackoverflow durchzulesen, aber ich kann keinen Konsens erkennen (wie es für Anmeldedaten für Benutzerkonten ist). Ich finde das überraschend, da ich davon ausgehe, dass grundsätzlich jeder Entwickler früher oder später mit diesem Problem konfrontiert wird.
Es müssen einige Best Practices zu folgen, einige etablierte Art und Weise zu gehen, aber ich habe es noch nicht gefunden.
Bitte weisen Sie mich auf Ressourcen auf SO/das Web, die erklären, wie Sie dieses Problem angehen. Wenn überhaupt möglich, von einem Spezialisten auf dem Gebiet geschrieben.
Einige SO Fragen, die ich geschaut haben: