H6.03.4single-use magic link设计研究

免密登录链接一次性使用后应立即失效,防止链接被转发滥用

别名: 魔法链接一次性 · magic link replay · 登录链接转发

概念解释

魔法链接(magic link)是一封带签名令牌的邮件或消息,点开即建立会话,不必输入密码或短码。一次性使用后立即失效指令牌在第一次成功兑换后作废,同一 URL 再打开不能登录。这条针对的滥用是转发与重放:人把邮件转给同事、截图进群、或邮件副本被后来打开。它不比较链接与短码谁更强,也不要求必须在原设备上二次确认。

机制

链接把完整的登录能力编码进 URL。URL 的自然命运是被复制:转发、同步到另一台电脑、出现在邮件全文搜索、被安全网关改写后再访问。若令牌在成功兑换后仍有效,第二次打开就是第二次登录,会话落到不确定的人手里。一次性作废把「证明持有收件箱」收成「第一次点击」,后续副本变成死链。需要区分成功兑换打开失败:预取机器人、链接扫描器、邮件客户端的「安全浏览」会先撞一次 URL;若扫描即作废,真人点开时已经失效。正确的一次性以认证成功为界,而不是以 HTTP 第一次 GET 为界。人看到的应是「此链接已使用」,而不是「登录失败」这种像密码错了的句子。

怎么研究

构造「首次兑换成功后再打开同一 URL」以及「扫描器先 GET、人再点」两种序列,看第二次是否成会话。

自变量:作废触发点(任意 GET、仅成功建立会话后、仅 POST 兑换接口)、是否把预取与兑换分成不同端点。 因变量:二次打开是否登录、扫描器预取后真人能否登录、转发后第二人是否获得会话、误报「已使用」的比例。

不要在实验室用同一浏览器连续点两次代替「转发」——转发涉及不同浏览器、不同 IP、有时不同人。邮件安全网关的预取行为随供应商而变,测试矩阵要包含至少一种会打开链接的网关或企业扫描。次数限制与一次性不是同一变量:短码才主要靠猜测上限。

边界

有人会在手机点开链接、希望桌面继续会话;一次性作废后,桌面那次必须通过已登录的会话同步或重新申请链接,而不是靠同一 URL。团队共用收件箱的工作场景里,谁先点谁登录,一次性会把后点的人锁在门外——这是共享身份的问题,不是该把令牌改成多次有效。仅把链接当「打开应用」的深链、登录态来自别处时,作废规则跟会话令牌走,不跟这条。密码重置链接虽然也常一次性,但其目标是改密而不是建立登录会话,失效语义属于找回流程。

怎么落地

  • 令牌只在认证成功(会话已建立或一次性票据已换成会话)后作废;把预取用的 HEAD/落地页与兑换用的一次性端点分开。
  • 第二次打开展示「链接已使用,若不是你本人请改密或退出其他会话」,并提供申请新链接,不显示「账号或密码错误」。
  • 记录兑换的设备与大致位置,供本人在「不是我点的」时对照;这不是设备二次确认,只是事后审计。
  • 验证:用浏览器 A 成功登录后,把同一 URL 在浏览器 B 打开,B 不得得到会话。再用会预取链接的邮件扫描器走一遍,真人随后仍应能成功兑换一次。

延伸

  • 同组H6.03.1 验证码需支持粘贴与自动填充 · H6.03.2 验证码有效期与重发间隔需明示 · H6.03.3 短信通道失败需有备用方式 · H6.03.5 验证码尝试次数需要限制,防止被暴力枚举 · H6.03.6 魔法链接与验证码两种免密方式的安全强度并不等同 · H6.03.7 免密登录仍需要设备层面的二次确认以防止链接被截获后滥用
  • 相邻H6.11 密码找回与重置 · H6.06 多设备会话
  • 站内检索magic link · single-use token · email link replay

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/H6.03.4