Windows 中的凭据提供程序

凭据提供程序是用户身份验证的主要机制。 它们目前是用户在登录时以及其他系统身份验证场景中需要证明其身份时用于证明身份的唯一方法。 自 Windows 10 和引入 Microsoft Passport 以来,凭据提供程序比以往更重要了。 它们用于对应用、网站等进行身份验证。

Microsoft 在 Windows 中提供了各种凭据提供程序,例如密码、PIN、智能卡和 Windows Hello(指纹、人脸和 Iris 识别)。 本文中将这些提供程序称为“系统凭据提供程序”。 OEM、Enterprise 和其他实体可以编写自己的凭据提供程序并将其轻松集成到 Windows 中。 本文中将这些提供程序称为“第三方凭据提供程序”。 注意,Windows 同时支持 V1 和 V2 凭据提供程序。 对于第三方凭据提供程序的创建者和管理者来说,了解以下建议非常重要。

系统凭据提供程序

强烈建议除了任何第三方凭据提供程序之外,设备上每个用户都至少还要有一个可用的系统凭据提供程序。 此外,在设置第三方凭据提供程序期间,应提示设备上的每个用户至少配置一个系统凭据提供程序(如果没有其他可用的恢复选项;请参阅下面的方案 A)。

方案 A

一个本地帐户用户设置了第三方凭据提供程序,并定期使用它登录到设备。 有一天,用户在设备上安装了一些导致第三方凭据提供程序中断的更新,而用户在重新启动机器之前并不知道发生了此情况。

在下次重新启动时,用户进入登录屏幕,而无法使用预期的第三方凭据提供程序。 如果用户之前设置了系统凭据提供程序,便能够使用它登录到计算机。 否则,用户无法恢复计算机上的帐户。

方案 B

一个 Microsoft 帐户 (MSA)、Active Directory (AD) 或 Microsoft Entra ID 帐户用户设置了第三方凭据提供程序,并定期使用它登录设备。 有一天,用户在设备上安装了一些导致第三方凭据提供程序中断的更新,而用户在重新启动机器之前并不知道发生了此情况。

在下次重新启动时,用户进入登录屏幕,而无法使用预期的第三方凭据提供程序。 如果用户配置了系统凭据提供程序,便能够使用该提供程序登录到计算机。 或如果系统的密码凭据提供程序可用,用户可以远程请求/重置密码,并使用该密码登录到计算机。 如果两种情况都不符合,则用户无法恢复计算机上的帐户。

结论

总之,不鼓励禁用设备上的所有系统凭据提供程序。 虽然第三方凭据提供程序可能可满足某些用户群的额外身份验证要求,但很重要的一点是要确保用户在发生中断性变化时始终能够重新获得对其计算机的访问权限。 系统凭据提供程序可保障此需求。

自定义凭据提供程序

Windows 凭据提供程序框架使开发人员能够创建自定义凭据提供程序。 当 Winlogon 需要收集凭据时,登录 UI 会向每个凭据提供程序查询其需要枚举的凭据数。 所有提供程序都枚举其磁贴后,登录 UI 会向用户显示这些磁贴。 然后,用户与磁贴交互以提供所需的凭据。 登录 UI 提交这些凭据进行身份验证。 在需要凭据的情况下,凭据 UI 也可以使用凭据提供程序。 有关支持凭据提供程序的方案的列表,请参阅 CREDENTIAL_PROVIDER_USAGE_SCENARIO

得益于此系统,创建凭据提供程序比以往要容易得多。 大部分工作均可通过结合应用 Winlogon、登录 UI 和凭据 UI 来处理。 为此,需要创建自己的 ICredentialProviderICredentialProviderCredential 实现。 如果要实现建议的 V2 凭据提供程序,还需要实现 ICredentialProviderCredential2

请注意,凭据提供程序不是一种强制措施机制。 它们用于收集和序列化凭据,并提交凭据以进行授权。 将由地方机构和身份验证包处理任何必要的安全强制措施。

通过将凭据提供程序与支持的硬件相结合,可以扩展 Windows 以支持使用生物识别信息、密码、PIN、智能卡证书或任何选择创建的自定义身份验证包进行登录。 还可以通过多种方式自定义用户的登录体验。 例如,当登录 UI 向凭据提供程序查询凭据磁贴时,可以指定默认磁贴,从而为用户提供自定义体验。 凭据提供程序甚至可以设计为支持单一登录 (SSO),针对安全接入点以及在计算机登录时对用户进行身份验证。

凭据提供程序在 Windows 计算机上注册,并负责以下事项。

  • 描述身份验证所需的凭据信息。
  • 处理与外部身份验证机构的通信和逻辑。
  • 打包用于交互式登录和网络登录的凭据。

提示

请记住,可以在一台计算机上安装多个凭据提供程序。

包装凭据提供程序

可以包装系统凭据提供程序,从而将功能添加到本机不支持的凭据提供程序。 但不建议这样做,因为这可能会导致存在问题的行为。 可以对凭据提供程序进行更改,这可能会导致与包装器的冲突,从而导致用户体验不佳,甚至阻止用户访问其设备。 在 Windows 频繁更新时尤其如此。

如果需要的凭据提供程序功能是本机不包含的,建议创建自定义凭据提供程序。 这是一种更稳定的方法,它不依赖于系统提供程序。

另请参阅