如何存储附加数据或将附加数据与 PasswordCredential 相关联?

How do I store or associate additional data with a PasswordCredential?

我的 UWP 应用程序使用多个帐户登录到多个 Web 服务。每个都包含一个 URL、密码和用户名以及其他信息,例如开发人员密钥等。我想将它们安全地存储为分配给 Windows 用户帐户的漫游设置。

UWP 的 Credential Locker 似乎可以安全地存储凭据部分、用户名和密码。它还与用户一起漫游,我可以忍受它的 10 个凭据存储限制(Credential Locker)不幸的是,似乎没有明确的方法可以使用唯一 ID 将其包含或关联到我的帐户:

//
//Add a credential to PasswordVault by supplying resource, username, and password
//
Windows.Security.Credentials.PasswordVault vault = new Windows.Security.Credentials.PasswordVault();
PasswordCredential cred = new PasswordCredential(InputResourceValue.Text, InputUserNameValue.Text, InputPasswordValue.Password);
vault.Add(cred);

PasswordVault 需要用户名、资源字符串和密码。虽然我可以使用用户名检索凭据,但不能保证它是唯一的。尽管资源密钥是唯一的,但尚不清楚它是否标识实际凭据或其容器。

关于如何解决这个问题有什么想法吗?

不同的应用程序对此使用不同的方法。有些应用程序有一个单一的资源名称,如AppName,然后使用UserName存储不同种类的"keys",所以它们有AccessKeyPassword

另一种方法是使用不同的 Resource 值,例如,对于 AppName.FacebookAppName.Local 等不同的身份验证提供程序,使用 UserName 作为用户名密码或访问令牌的密码。

最后 - 因为您不受存储在 Password 中的字符串类型的限制,您可以创建一个包含多个属性的复杂类型,例如在存储之前用 JSON 序列化它进入密码库。这样您就可以通过一个条目存储更多信息。