繁体   English   中英

在 UWP 应用程序中安全存储访问令牌的位置?

[英]Where to store access token securely in UWP application?

本地存储不是存储令牌的正确位置。 但是这篇博文说 LocalCache 通常是正确的位置。 如果我使用 DPAPI 存储在 LocalCache 中,这是否足够安全?

PasswordVault 是存储它的好地方吗?

我怎样才能安全地存储令牌,以便在这个应用程序之外无法访问令牌?

我肯定会建议在PasswordVault中存储访问令牌等机密信息,因为LocalSettings未加密,并且可以从AppData中应用程序的 package 文件夹轻松访问。

尽管PasswordVault的 API 有点奇怪,但您仍然可以轻松地使用它来存储令牌:

var passwordVault = new PasswordVault();
passwordVault.Add(new PasswordCredential("Resource", "UserName", accessToken));

在您的情况下,您很可能只关心访问令牌,因此“资源”和“用户名”可能只是任意常量。 检索令牌也很容易:

//find credentials in the store            
PasswordCredential? credential = null;

try
{
   // Try to get an existing credential from the vault.
   credential = _passwordVault.Retrieve("Resource", "UserName");
}
catch (Exception)
{
   // When there is no matching resource an error occurs, which we ignore.
}
credential?.RetrievePassword();
return credential?.Password;

注意try..catch的使用。 这是因为如果找不到给定的资源/用户名组合,保险库就会抛出(当用户手动删除系统凭据管理器中的条目时甚至可能发生这种情况。

PasswordVault的另一个优点是凭据在设备之间同步(尽管此功能可能会在未来版本中消失)。

在 UWP 应用程序中安全存储访问令牌的位置?

通常,我们经常使用ApplicationData.LocalSettings class 存储访问令牌,将设置容器放置在本地应用程序数据存储中。 您可以像下面这样使用它。

var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;

// Create a simple setting.
localSettings.Values["accesstoken"] = token;

// Read data from a simple setting.
Object value = localSettings.Values["accesstoken"];

if (value == null)
{
    // No data.
}
else
{
    // Access data in value.
}

如果您想安全地存储访问令牌。 Windows 运行时提供PasswordVault class 来安全地存储凭据。 有关更多信息,请参阅此文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM