将对 /.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