資格情報ストア(または金庫Windows 8で呼ばれているように)ログインデータを取得します。この場合、MSDNは本当に役に立ちませんし、C++も必要ありません。P/呼び出しアプローチ。
同様の質問がここで何度かされているのは知っていますが、私のケースではそれらの解決策はどれも機能しません。私は Metro アプリ プログラミングを使用していないので、そのようなものはPasswordVault
(見たところ) 利用できません。私は単純な C# WPF デスクトップ アプリケーションを作成するだけです。
理想的には、複数の Windows バージョンで動作するはずですが、Windows 8 が推奨されます。
具体的には、Outlook 用の CRM プラグインから保存されたデータを照会して、ユーザーに資格情報を尋ねることなく、アプリケーションが CRM サーバーに自動的にログインするようにしたいと考えています。つまり、これが可能であれば...
では、Windows 資格情報ストアにアクセスするにはどうすればよいでしょうか?
ベストアンサー1
私が使用しているNuGetライブラリがあります。資格情報管理。
使い方はとても簡単です。少しラップしましたが、おそらく必要なかったと思います。
public static class CredentialUtil
{
public static UserPass GetCredential(string target)
{
var cm = new Credential {Target = target};
if (!cm.Load())
{
return null;
}
// UserPass is just a class with two string properties for user and pass
return new UserPass(cm.Username, cm.Password);
}
public static bool SetCredentials(
string target, string username, string password, PersistanceType persistenceType)
{
return new Credential {Target = target,
Username = username,
Password = password,
PersistanceType = persistenceType}.Save();
}
public static bool RemoveCredentials(string target)
{
return new Credential { Target = target }.Delete();
}
}
使用例:
CredentialUtil.SetCredentials("FOO", "john", "1234", PersistanceType.LocalComputer);
var userpass = CredentialUtil.GetCredential("FOO");
Console.WriteLine($"User: {userpass.Username} Password: {userpass.Password}");
CredentialUtil.RemoveCredentials("FOO");
Debug.Assert(CredentialUtil.GetCredential("FOO") == null);
自分で実装することに興味がある場合は、ソースを参照してください。http://credentialmanagement.codeplex.com/SourceControl/latest
問題は、資格情報マネージャーに C# API がないことです。このライブラリは、他の .dll エントリ ポイントをうまくラップします。:-)