Windows 10で実行するC#プログラムを作成しました。ボタンを押すだけで、このプログラム(計算結果)からメールを送信します。 from:
電子メールアドレスとsubject:
などをC#のプロパティで使用しますが、クリアテキストのパスワードをプログラムのどこにも配置したくありません。また、メールを送信するたびにサーバーのパスワードを入力する必要はありません。
それはできますか?
もしそうなら、どのように(一般的に)?
サーバーの暗号化されたパスワードを含むすべての電子メール情報を、プログラムの起動時に読み取られるデータファイルに入れることを考えていました。
または、Windows 10にはそのための機能があるのかもしれません...
Windows資格情報管理APIを使用できます。この方法では、ユーザーにパスワードを1回だけ要求し、そのパスワードをWindows資格情報マネージャーに保存します。
次回アプリケーションが起動し、パスワードを使用する必要がある場合は、Windows資格情報マネージャーから読み取られます。 P/Invoke ( credwrite 、 CredRead 、 ここの例 )を使用して、Windows Credential Management APIを直接使用できます。またはC#ラッパー CredentialManagement を介して。
NuGet CredentialManagementパッケージを使用した使用例:
public class PasswordRepository
{
private const string PasswordName = "ServerPassword";
public void SavePassword(string password)
{
using (var cred = new Credential())
{
cred.Password = password;
cred.Target = PasswordName;
cred.Type = CredentialType.Generic;
cred.PersistanceType = PersistanceType.LocalComputer;
cred.Save();
}
}
public string GetPassword()
{
using (var cred = new Credential())
{
cred.Target = PasswordName;
cred.Load();
return cred.Password;
}
}
}
クライアントマシンのファイルにパスワードを保存することはお勧めしません。パスワードを暗号化したとしても、おそらく解読キーをアプリケーションコードに埋め込むでしょうが、これは良い考えではありません。