我只想查询凭证存储(或Windows 8中称为Vault)并获取登录数据。在这种情况下,MSDN确实无济于事,而且我也不希望任何C++ P/Invoke方法。
我知道在这里曾多次问过类似的问题,但是在我看来,这些解决方案都不起作用。我不使用Metro App编程,因此PasswordVault
之类的东西(看起来)不可用。我只是创建一个简单的C#WPF桌面应用程序。
理想情况下,它应该可以在多个Windows版本中运行,但是Windows 8是首选。
更具体地说,我想从CRM插件中查询Outlook中存储的数据,以使我的应用程序自动登录到CRM服务器,而无需用户要求他/她的凭据。这意味着,即使有可能...
那么,如何访问Windows凭据存储?
最佳答案
我一直在使用一个NuGet库,称为CredentialManagement。
用法很简单。我包装了一下,但可能不需要:
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入口点。 :-)
关于c# - 使用C#从Windows凭据存储中检索凭据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17741424/