了解如何将通行密钥集成到您的服务中。
通行密钥系统详解
通行密钥系统由下面几个组件组成:
- 依赖方:在通行密钥上下文中,依赖方(简称 RP)负责处理通行密钥的颁发和身份验证。RP 必须运行客户端(用于创建通行密钥或使用通行密钥进行身份验证的网站或应用)以及用于注册、存储和验证客户端上通行密钥生成的凭据的服务器。通行密钥移动应用必须使用操作系统提供的关联机制(例如数字资产链接)绑定到 RP 服务器网域。
- 身份验证器:一种计算设备,例如手机、平板电脑、笔记本电脑或桌面设备,可以使用操作系统提供的屏幕锁定功能来创建和验证通行密钥。
- 密码管理工具:安装在最终用户设备上的软件,用于提供、存储和同步通行密钥,例如 Google 密码管理工具。
注册流程
在网站上使用 WebAuthn API 或 Android 应用中的凭据管理器库来创建和注册新的通行密钥。
若要创建新通行密钥,您需要提供以下关键组件:
- RP ID:以网域的形式提供依赖方的 ID。
- 用户信息:用户的 ID、用户名和显示名。
- 要排除的凭据:与之前存储的通行密钥相关的信息,以防止重复注册。
- 通行密钥类型:将设备本身(“平台身份验证器”)用作身份验证器,还是可分离的安全密钥(“跨平台 / 漫游身份验证器”)。此外,调用方可以指定是否使凭据可被检测到,以便用户可以选择用于登录的帐号。
一旦 RP 请求创建通行密钥,并且用户通过屏幕解锁对其进行了验证,则系统会创建新的通行密钥并返回公钥凭据。将其发送到服务器,并存储凭据 ID 和公钥,以供将来进行身份验证。
详细了解如何创建和注册通行密钥:
- 在 Web 上:创建通行密钥以实现无密码登录
- 在 Android 设备上:使用 Credential Manager API 通过通行密钥为应用提供无缝身份验证
身份验证流程
在网站上使用 WebAuthn API 或 Android 应用中的凭据管理器库,以通过已注册的通行密钥进行身份验证。
如需使用通行密钥进行身份验证,您需要提供以下两个关键组件:
- RP ID:以网域的形式提供依赖方的 ID。
- 质询:服务器生成的质询,用于防范重放攻击。
一旦 RP 请求使用通行密钥进行身份验证,并且用户通过屏幕解锁对其进行验证,系统会返回公钥凭据。将其发送到服务器并使用存储的公钥验证签名。
详细了解如何使用通行密钥进行身份验证:
- 在 Web 上:通过表单自动填充功能使用通行密钥登录
- 在 Android 设备上:使用 Credential Manager API 通过通行密钥为应用提供无缝身份验证
服务器端集成
创建通行密钥时,服务器需要提供关键参数,例如质询、用户信息、要排除的凭据 ID 等。然后验证从客户端发送的已创建的公钥凭据,并将公钥存储在数据库中。对于使用通行密钥进行身份验证,服务器需要仔细验证凭据并验证签名,才能让用户登录。
但是,独自构建通行密钥服务器的做法效率不高,并且可能会产生 bug,进而导致严重的安全事件。我们建议您使用可用的开源库之一或可帮助您加快通行密钥集成速度的解决方案。
如需查找开源库的列表,请查看 passkeys.dev 的“库”部分或 WebAuthn 库众包列表。为了找到解决方案,FIDO 联盟拥有经过认证的 FIDO2 服务器名单。
现有(旧版)身份验证机制
如果您在现有服务上支持通行密钥,从旧版的身份验证机制(例如密码)转换为通行密钥就不会在一天之内完成。我们知道,建议您尽快停用安全系数较低的身份验证方法,但这可能会导致用户困惑或留下一些用户。我们建议您暂时保留现有的身份验证方法。
原因有以下几种:
- 有用户处于与通行密钥不兼容的环境:通行密钥支持正在多种操作系统和浏览器中得到广泛扩展,但使用旧版本的用户尚无法使用通行密钥。
- 通行密钥生态系统尚未成熟:通行密钥生态系统不断发展演变。这样可以改善不同环境之间的用户体验细节和技术兼容性。
- 用户可能还没有准备好使用通行密钥:有些用户犹豫是否要开发新事物。随着通行密钥生态系统日趋成熟,他们将了解通行密钥的工作原理,以及通行密钥对其有何用处。
重新审视您现有的身份验证机制
虽然通行密钥可让您的身份验证更简单且更安全,但保留旧机制就像留一个漏洞。我们建议您重新审视并改进您现有的身份验证机制。
密码
对用户来说,创建安全系数高的密码并为每个网站管理密码是一项具有挑战性的任务。强烈建议您使用系统中内置的密码管理工具或独立的密码管理工具。通过对登录表单进行细微的调整,网站和应用可以对其安全性和登录体验产生巨大影响。了解如何进行这些更改:
- 登录表单最佳实践(Web)
- 注册表单最佳实践(网站)
- 使用凭据管理器让用户登录 (Android)
双重验证
虽然使用密码管理工具可以帮助用户处理密码,但并非所有用户都会使用密码。要求提供称为动态密码 (OTP) 的额外凭据是保护此类用户的一种常见做法。动态密码通常通过电子邮件、短信或身份验证器应用(如 Google 身份验证器)提供。由于动态密码通常是动态生成的短文本,仅在有限的时间范围内有效,因此它可以降低帐号被盗用的概率。这些方法不如通行密钥可靠,但比让用户只留下密码要好得多。
如果您选择短信作为动态密码的接收方式,请查看以下最佳实践,以简化输入动态密码的用户体验。
- 短信动态密码表单最佳实践(网站)
- 使用 SMS Retriever API 进行自动短信验证 (Android)
身份联合
身份验证联合是另一种可让用户安全轻松地登录的方式。 借助身份联合,网站和应用可让用户使用来自第三方身份提供方的用户身份登录。例如,使用 Google 帐号登录可为开发者带来出色的转化效果,而用户则发现它比基于密码的身份验证更简单、更首选。身份联合是对通行密钥的补充。这种注册方式非常适合网站或应用,因为网站或应用只需一步即可获取用户的基本个人资料信息,而通行密钥则非常适合简化重新进行身份验证流程。
请注意,在 Chrome 于 2024 年逐步淘汰第三方 Cookie 后,某些身份联合系统可能会受到影响,具体取决于其构建方式。为了减轻这种影响,我们正在开发一个新的浏览器 API,称为 Federated Credential Management API(简称 FedCM)。如果您运行身份提供方,请查看详细信息,看看是否需要采用 FedCM。
- Federated Credential Management API(Web、FedCM)
- 网页版 Google 帐号登录概览(网页版、使用 Google 帐号登录)
- Android 上的一键登录概览(Android,一键登录)
“Magic Links”
魔法链接登录是一种身份验证方法,采用这种方法时,服务会通过电子邮件传送登录链接,以便用户点击该链接以自行进行身份验证。虽然这有助于用户在不记住密码的情况下登录,但会在浏览器/应用和电子邮件客户端之间切换。此外,由于身份验证机制依赖于电子邮件,因此电子邮件服务提供商的安全系数较低,可能会使用户的帐号面临风险。
学习资源
Web
如需将通行密钥集成到您的网站中,请使用 Web Authentication API (WebAuthn)。如需了解详情,请查看以下资源:
- 为无密码登录创建通行密钥:本文讨论了如何允许用户为网站创建通行密钥。
- 通过表单自动填充功能使用通行密钥登录:这篇文章讨论了应如何设计通行密钥实现无密码登录,同时为现有密码用户提供支持。
- 在 Web 应用中通过表单自动填充功能实现通行密钥:此 Codelab 将帮助您了解如何在 Web 应用中通过表单自动填充功能实现通行密钥,从而创建更简单、更安全的登录方式。
- 了解如何在 Web 应用中通过表单自动填充功能实现通行密钥:一个研讨会视频,介绍了以下 Codelab:在 Web 应用中实现表单自动填充功能的通行密钥,以在 Web 应用中通过表单自动填充功能实现通行密钥,从而创建更简单、更安全的登录方式。
- 构建您的首个 WebAuthn 应用:一个 Codelab,让您了解如何在网站上使用通行密钥构建简单的身份验证功能。
Android
如需将通行密钥集成到您的 Android 应用中,请使用凭据管理器库。如需了解详情,请查看以下资源:
- 让用户使用凭据管理器登录:一篇介绍如何在 Android 上集成凭据管理器的文章。凭据管理器是一个 Jetpack API,它在单个 API 中支持多种登录方法,例如用户名和密码、通行密钥和联合登录解决方案(如“使用 Google 帐号登录”)。
- 利用 Credential Manager API 为应用提供无缝身份验证体验:本文介绍了如何在 Android 上通过凭据管理器集成通行密钥。
- 了解如何在 Android 应用中使用 Credential Manager API 简化身份验证流程:了解如何实现 Credential Manager API,以使用通行密钥或密码在应用中提供安全顺畅的身份验证功能。
- 凭据管理器示例应用:运行包含通行密钥的凭据管理器的示例代码。
- 将凭据管理器与凭据提供程序解决方案集成 | Android 开发者
用户体验
了解通行密钥用户体验建议: