将对 /.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 Found
、303 See
Other
或 307
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
后,用户可以针对存储的密码运行检查密码,并查看建议更新的密码列表。
点击建议更新的密码旁边的更改密码按钮,浏览器将执行以下操作:
- 如果
/.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