语言: HTML | XAML

使用凭据保险箱存储用户凭据 (HTML)

凭据保险箱简化了安全存储和检索用户凭据并允许用户凭据使用用户的 Microsoft 帐户免费漫游的任务。

假设你有一个连接到一项服务以访问受保护的资源(例如媒体文件、社交网络等)的应用。你的服务要求每一个用户的登录信息。因此,你在应用中构建了 UI,此 UI 可获取每位用户的用户名和密码,然后使用这些信息使用户登录到服务中。一切都出色运行。

现在,你希望为用户省下这一操作并安全存储他们的登录信息,以便他们无需在每次使用你的应用时都要登录。输入凭据保险箱。只需一些对凭据保险箱 API 的简单调用,你就可以为用户存储用户名和密码,并在他们下次打开你的应用时轻松地检索它们并使用户登录。

安全存储

凭据保险箱为你的应用带来的巨大优势是,它将用户凭据存储在安全的位置,并且凭据数据加密存储在磁盘上。当然,你可以将用户凭据存储在面向你的应用的本地存储中的文件中,但是以纯文本存储用户凭据存在相当大的安全漏洞。如果用户的系统受到某种方式的损害,用户的用户名和密码很容易被访问和操纵。如果使用凭据保险箱,恶意源能找到的最多只有加密文件。

漫游凭据

作为对用户的附加好处,当你使用凭据保险箱存储他们的用户名和密码时,存储的凭据与他们的 Microsoft 帐户一起漫游至任何他们使用该 Microsoft 帐户的计算机。这使你的安全应用更便于用户使用,因为你的应用可以使他们从任何已安装应用并与他们的 Microsoft 帐户关联的计算机上自动登录,无需重新提示用户给出凭据。

对于域帐户来说,情况有一点不同。如果有凭据与你的 Microsoft 帐户一起存储,并且你将该帐户与域帐户关联(例如你工作时使用的帐户),你的凭据将漫游至该域帐户。但是,任何在使用域帐户登录时添加的新凭据不会漫游。这确保了该域的私有凭据不会暴露在域之外。

技术

说明

步骤 1: 存储用户凭据

将用户凭据存储于凭据保险箱中是一个快捷的两步式过程。

  1. 使用来自 Windows.Security.Credentials 命名空间的 PasswordVault 对象获取对凭据保险箱的引用。
  2. 创建包含你的应用的标识符、用户名和密码的 PasswordCredential 对象,并将该对象传递至 PasswordVault.Add 方法以将凭据添加到保险箱。

var vault = new Windows.Security.Credentials.PasswordVault();
vault.add(new Windows.Security.Credentials.PasswordCredential(
    "My App", username, password));


步骤 2: 检索用户凭据

在你拥有对 PasswordVault 对象的引用之后,你有多个选项从凭据保险箱检索用户凭据。

让我们来查看一个示例,在此示例中我们已在一个应用中全局存储了资源名,并且,如果找到了它们的凭据,我们将使用户自动登录。在我们找到了同一个用户的多个凭据的情况下,我们将要求用户选择一个默认凭据以在登录时使用。


var resourceName = "My App";
var defaultUserName;

function login() {
    var loginCredential = getCredentialFromLocker();

    if (loginCredential != null) {
        // There is a credential stored in the locker.
        // Populate the Password property of the credential
        // for automatic login.
        loginCredential.retrievePassword();
    } else {
        // There is no credential stored in the locker.
        // Display UI to get user credentials.
        loginCredential = getLoginCredentialUI();
    }

    // Log the user in.
    serverLogin(loginCredential.userName, loginCredential.password);
}


function GetCredentialFromLocker() {
    var credential = null;

    var vault = new Windows.Security.Credentials.PasswordVault();
    var credentialList = vault.findAllByResource(resourceName);
    if (credentialList.length > 0) {
        if (credentialList.length == 1) {
            credential = credentialList[0];
        } else {
            // When there are multiple usernames,
            // retrieve the default username. If one doesn’t
            // exist, display UI to have the user select
            // a default username.

            defaultUserName = getDefaultUserNameUI();
            credential = vault.retrieve(resourceName, defaultUserName);
        }
    }

    return credential;
}


步骤 3: 删除用户凭据

在凭据保险箱中删除用户凭据是一个快捷的两步式过程。

  1. 使用来自 Windows.Security.Credentials 命名空间的 PasswordVault 对象获取对凭据保险箱的引用。

  2. 将要删除的凭据传递至 PasswordVault.Remove 方法。


var vault = new Windows.Security.Credentials.PasswordVault();
vault.remove(new Windows.Security.Credentials.PasswordCredential(
    "My App", username, password));


备注

如你所看到的,凭据保险箱是一个易于使用的功能,它可以简化对用户进行身份验证和存储这些用户凭据以便将来使用的任务 - 整个过程采用高度安全的方式。

最佳做法

将凭据保险箱仅用于存储密码,而不要将其用于存储较大的数据 blob。

仅当满足以下条件时才将密码保存在凭据保险箱中:

  • 用户已成功登录。
  • 用户已选择保存密码。

相关主题

凭据保险箱示例
身份验证和用户身份
Windows.Security.Credentials

 

 

显示:
© 2015 Microsoft