C# 跨多个Windows应用商店应用共享Windows凭据(Win 10)

C# 跨多个Windows应用商店应用共享Windows凭据(Win 10),c#,uwp,windows-10,C#,Uwp,Windows 10,详情: 目标版本:Windows 10 1803 最小版本:Windows 10创建者更新 nuget:Microsoft.NETCore.UniversalWindowsPlatform v6.1.5 我有两个示例Uwp应用程序。两者都使用了休耕法: private string GetPasswordCredential() { PasswordVault passwordVault = new PasswordVault(); PasswordCredential pa

详情:

  • 目标版本:Windows 10 1803
  • 最小版本:Windows 10创建者更新
  • nuget:Microsoft.NETCore.UniversalWindowsPlatform v6.1.5
我有两个示例Uwp应用程序。两者都使用了休耕法:

private string GetPasswordCredential()
{
    PasswordVault passwordVault = new PasswordVault();
    PasswordCredential passwordCredential = null;

    try
    {
        var passwordCredentials = new List<PasswordCredential>(passwordVault.RetrieveAll());
        if (passwordCredentials.Any(c => c.Resource.Equals("testResource") && c.UserName.Equals("testUserName")))
        {
            passwordCredential = passwordVault.Retrieve(resource: "testResource", userName: "testUserName");
        }
    }
    catch (Exception exception)
    {
        var message = exception.Message;
    }

    if (passwordCredential == null)
    {
        // create credential deteils
        passwordCredential = new PasswordCredential(resource: "testResource", userName: "testUserName", password: "testPassword");

        // add credential details to password vault
        passwordVault.Add(passwordCredential);
    }

    return passwordCredential.Password;
}
私有字符串GetPasswordCredential()
{
PasswordVault PasswordVault=新PasswordVault();
PasswordCredential PasswordCredential=null;
尝试
{
var passwordCredentials=新列表(passwordVault.RetrieveAll());
if(passwordCredentials.Any(c=>c.Resource.Equals(“testResource”)&&c.UserName.Equals(“testUserName”))
{
passwordCredential=passwordVault.Retrieve(资源:“testResource”,用户名:“testUserName”);
}
}
捕获(异常)
{
var message=exception.message;
}
if(passwordCredential==null)
{
//创建凭证详细信息
passwordCredential=新的passwordCredential(资源:“testResource”,用户名:“testUserName”,密码:“testPassword”);
//将凭据详细信息添加到密码保险库
passwordVault.Add(passwordCredential);
}
返回passwordCredential.Password;
}
问题在于,该方法为每个应用程序创建唯一的凭据:

我的目标是创建一个凭据详细信息(如果不存在),并在第二个应用运行后由第二个应用使用它。上面的方法逻辑进行检查,但也为每个应用创建全新的凭证。我能看到的唯一区别是“保存人”部分。 如何强制第二个应用程序获取/使用已存在的凭据

如何强制第二个应用程序获取/使用已存在的凭据

你不能。这一点非常清楚,“储物柜的内容[由
密码库
类表示]特定于应用程序或服务。应用程序和服务无权访问与其他应用程序或服务关联的凭据。”


因此
App2
无法访问由
App1
创建的凭据,反之亦然。这是故意的。

我把你的评论标记为答案。然而,你知道有什么替代方案吗?不过,我不想使用代理WinRT组件方法。如果您想在不同的应用程序之间共享数据,则不能使用
PasswordVault
类。您最好将共享数据存储在某个远程位置,例如Azure中的数据库或文件共享。对于多个uwp应用程序(应用程序来自同一发布者)的离线场景,我必须在本地设备内存中共享数据。然后将数据存储在某个共享本地文件夹中。