了解如何将通行密钥集成到您的服务中。
通行密钥系统剖析
通行密钥系统由以下几个组件组成:
- 依赖方:在通行密钥上下文中,依赖方(简称 RP)负责处理通行密钥的颁发和身份验证。RP 必须运行一个客户端(用于创建通行密钥或使用通行密钥进行身份验证的网站或应用)和一个服务器,用于注册、存储和验证客户端上由通行密钥生成的凭据。通行密钥移动应用必须使用操作系统提供的关联机制(例如数字资产链接)绑定到 RP 服务器网域。
- Authenticator:一种计算设备,例如手机、平板电脑、笔记本电脑或台式机,能够使用操作系统提供的屏锁功能创建和验证通行密钥。
- 密码管理工具:安装在最终用户设备上的软件,用于提供、存储和同步通行密钥,例如 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)
- 适用于 Web 的 Google 登录概览(Web,使用 Google 账号登录)
- Android 上的一键登录概览(Android、一键登录)
“Magic Link”
魔法链接登录是一种身份验证方法,服务通过电子邮件发送登录链接,用户点击该链接即可进行身份验证。虽然这有助于用户在无需记住密码的情况下登录,但用户在浏览器/应用和电子邮件客户端之间切换时会遇到一些不便。此外,由于身份验证机制依赖于电子邮件,因此电子邮件提供商的安全性较弱可能会导致用户账号面临风险。
学习资源
Web
如需在您的网站上集成通行密钥,请使用 Web Authentication API (WebAuthn)。如需了解详情,请查看以下资源:
- 创建通行密钥以实现无密码登录:一篇讨论如何允许用户为网站创建通行密钥的文章。
- 通过表单自动填充功能使用通行密钥登录:本文讨论了如何设计采用通行密钥的无密码登录方式,同时适应现有的密码用户。
- 在 Web 应用中利用表单自动填写功能实现通行密钥:通过此 Codelab,您可以了解如何在 Web 应用中利用表单自动填写功能实现通行密钥,从而创建更简单、更安全的登录方式。
- 帮助用户有效管理通行密钥:为了充分发挥通行密钥的潜力,必须仔细考虑围绕通行密钥管理的用户体验。本文档概述了用于设计直观、安全且强大的通行密钥管理系统的指南和可选功能。
- 安全顺畅的通行密钥:部署核对清单:此核对清单将引导您了解实现通行密钥的关键方面,以实现最佳用户体验 (UX) 效果。
Android
如需将通行密钥集成到 Android 应用中,请使用 Credential Manager 库。如需了解详情,请参阅以下资源:
- 使用 Credential Manager 让用户登录:一篇讨论如何在 Android 上集成 Credential Manager 的文章。Credential Manager 是一种 Jetpack API,它在单个 API 中支持多种登录方法,例如用户名和密码、通行密钥和联合登录解决方案(如“使用 Google 账号登录”)
- 借助 Credential Manager API 让应用可通过通行密钥顺畅地进行身份验证:一篇讨论如何在 Android 上通过 Credential Manager 集成通行密钥的文章。
- 了解如何在 Android 应用中使用 Credential Manager API 简化身份验证流程:了解如何实现 Credential Manager API,以在应用中通过通行密钥或密码提供顺畅安全的身份验证体验。
- Credential Manager 示例应用:运行 Credential Manager 以适应通行密钥的示例代码。
- 将 Credential Manager 与您的凭据提供程序解决方案集成 | Android 开发者
用户体验
了解通行密钥用户体验建议: