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