【问题标题】:Where to store access token securely in UWP application?在 UWP 应用程序中安全地存储访问令牌的位置?
【发布时间】:2021-04-02 16:45:44
【问题描述】:

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

PasswordVault 是存储它的好地方吗?

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

【问题讨论】:

  • 如果你用LocalSettings存储token,它会存储在app的本地数据中,外部无法访问。
  • 如果答案已经解决了您的问题,请mark它被接受

标签: security uwp access-token desktop-application


【解决方案1】:

我绝对建议在PasswordVault 中存储诸如访问令牌之类的机密信息,因为LocalSettings 未加密,并且可以从AppData 中的应用程序包文件夹中轻松访问。

虽然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 的另一个优点是凭据可以跨设备同步(尽管此功能可能会在未来的版本中消失)。

【讨论】:

    【解决方案2】:

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

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

    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 类来安全地存储凭据。更多信息请参考document

    【讨论】:

      猜你喜欢
      • 2012-09-11
      • 2012-10-03
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 2018-08-05
      相关资源
      最近更新 更多