添加用于更改密码的常用网址,帮助用户轻松更改密码

将对 /.well-known/change-password 的请求重定向到更改密码网址

设置从 /.well-known/change-password 重定向到您网站上的更改密码页面。这样,密码管理工具便可将用户直接转到该页面。

简介

您可能知道,密码并非管理账号的最佳方式。幸运的是,WebAuthn 等新兴技术和动态密码等技术正在帮助我们更接近无密码的世界。不过,这些技术仍在不断发展,不会快速发生变化。至少在未来几年内,许多开发者仍需要处理密码。在等待新兴技术和方法普及的同时,我们至少可以让密码更易于使用。

为此,一个好方法是更好地支持密码管理工具。

密码管理工具的帮助

密码管理工具可以内置在浏览器中,也可以作为第三方应用提供。 它们可以通过多种方式帮助用户:

为正确的输入字段自动填充密码:即使网站未针对此目的进行优化,某些浏览器也能以启发法找到正确的输入内容。通过正确为 HTML 输入标记添加注释,Web 开发者可以帮助密码管理工具。

防范钓鱼式攻击:由于密码管理工具会记住密码的记录位置,因此密码只能在适当的网址(而非钓鱼式网站)中自动填充。

生成安全系数高且独一无二的密码:由于安全系数高且独一无二的密码由密码管理工具直接生成和存储,因此用户无需记住密码中的任何字符。

使用密码管理工具生成和自动填充密码已经为 Web 提供了良好的服务,但考虑到密码的生命周期,在需要时更新密码与生成和自动填充密码一样重要。为了妥善利用该功能,密码管理工具会添加一项新功能:

检测存在漏洞的密码并建议更新:密码管理工具可以检测重复使用的密码,分析其熵值和安全系数,甚至可以从 Have I Been Pwned 等来源检测可能已泄露的密码或已知不安全的密码。

密码管理工具可以提醒用户密码存在问题,但除了完成实际的密码更改流程(因网站而异)之外,还需要让用户从首页导航到更改密码页面,这会给用户带来诸多不便。如果密码管理工具可以直接将用户定向到更改密码网址,将会更为方便。这时,用于更改密码的知名网址就派上用场了。

通过预留用于将用户重定向到更改密码页面的知名网址路径,网站可以轻松将用户重定向到正确的位置更改密码。

设置“用于更改密码的知名网址”

.well-known/change-password 被提议为用于更改密码的知名网址。您只需将服务器配置为将对 .well-known/change-password 的请求重定向到您网站的更改密码网址即可。

例如,假设您的网站是 https://example.com,而更改密码网址是 https://example.com/settings/password。您只需将服务器设置为将对 https://example.com/.well-known/change-password 的请求重定向到 https://example.com/settings/password 即可。大功告成。对于重定向,请使用 HTTP 状态代码 302 Found303 See Other307 Temporary Redirect

或者,您也可以使用 http-equiv="refresh" 通过 <meta> 标记在 .well-known/change-password 网址上提供 HTML。

<meta http-equiv="refresh" content="0;url=https://example.com/settings/password">

重新查看您的更改密码页面 HTML

此功能旨在帮助用户的密码生命周期更加顺畅。您可以执行以下两项操作,让用户能够顺利更新密码:

  • 如果您的密码更改表单需要当前密码,请将 autocomplete="current-password" 添加到 <input> 标记,以帮助密码管理工具自动填充该字段。
  • 对于新密码字段(在很多情况下,这两个字段是为了确保用户正确输入了新密码),请向 <input> 标记添加 autocomplete="new-password",以帮助密码管理工具建议生成的密码。

如需了解详情,请参阅有关登录表单的最佳做法

在现实世界中的应用

示例

得益于 Apple Safari 的实现/.well-known/change-password 已在一些主要网站上推出一段时间了:

亲自试用这些功能,并为您的应用执行相同的操作!

浏览器兼容性

自 2019 年起,Safari 就支持用于更改密码的知名网址。从版本 86 开始(该版本计划于 2020 年 10 月底发布正式版),Chrome 的密码管理工具将开始支持该功能,其他基于 Chromium 的浏览器也可能会跟进。Firefox 认为值得实现,但截至 2020 年 8 月,尚未表明计划这样做。

Chrome 的密码管理工具行为

我们来看看 Chrome 的密码管理工具如何处理易遭破解的密码。

Chrome 的密码管理工具能够检查是否有密码泄露。前往 about://settings/passwords 后,用户可以针对存储的密码运行检查密码,并查看建议更新的密码列表。

Chrome 的检查密码功能

点击建议更新的密码旁边的更改密码按钮后,浏览器会执行以下操作:

  • 如果 /.well-known/change-password 设置正确,请打开网站的密码更改页面。
  • 如果未设置 /.well-known/change-password 且 Google 不知道回退网址,则打开网站的首页。
如果服务器返回 200 OK,即使 /.well-known/change-password 不存在,该怎么办?

密码管理工具会先向 /.well-known/change-password 发送请求,然后再实际将用户转到此网址,以便确定网站是否支持用于更改密码的知名网址。如果请求返回 404 Not Found,则很明显网址不可用,但 200 OK 响应不一定意味着网址可用,因为存在一些极端情况:

  • 服务器端渲染网站在没有内容但有 200 OK 时会显示“未找到”。
  • 如果服务器端呈现的网站在重定向到“未找到”页面后没有内容,则会返回 200 OK
  • 单页应用会使用 200 OK 响应 shell,并在没有内容时在客户端呈现“未找到”页面。

对于这些极端情况,系统会将用户转到“未找到”页面,这会造成混淆。

因此,建议采用一种标准机制,通过请求随机网页来确定服务器是否配置为在确实没有内容时响应 404 Not Found。实际上,网址也已预订:/.well-known/resource-that-should-not-exist-whose-status-code-should-not-be-200。例如,Chrome 会使用此网址路径来确定是否可以预先从 /.well-known/change-password 获取正确的密码更改网址。

部署 /.well-known/change-password 时,请确保您的服务器针对任何不存在的内容返回 404 Not Found

反馈

如果您对规范有任何反馈,请向规范代码库提交问题。

资源

照片由 Matthew Brodeur 拍摄,选自 Unsplash