MFA 受信任设备
MFA 受信任设备允许用户在他们信任的浏览器上跳过重复的 MFA 提示。在合格的 MFA 验证或设置后,用户可以在登录或注册流程结束时,在单独的 信任此设备 页面选择信任该浏览器。Logto 随后会在一方 Cookie 中存储一个有时效的凭证。在后续登录时,有效的凭证可以在无需用户交互的情况下完成 MFA 验证步骤。
受信任设备不是新的 MFA 因子,也不会改变 Logto 何时要求 MFA。它只能满足登录流程中的 MFA 步骤。它无法满足身份验证、近期验证、账户恢复、MFA 因子管理或其他敏感账户操作。
受信任设备的工作原理
当登录流程进入 MFA 验证步骤时,Logto 会:
- 评估现有的 MFA 策略,以决定是否需要 MFA。
- 检查租户是否启用了受信任设备,并且用户所属的每个组织 (Organization) 是否允许使用受信任设备。
- 针对已识别用户,验证浏览器 Cookie 是否与服务器端的活动记录匹配。
- 当凭证有效时自动完成 MFA。否则,Logto 会清除无效凭证,并继续常规的 MFA 流程。
在登录或注册时信任设备
内置登录体验会在合格的登录或注册流程结束时,在必需的资料完善和 MFA 步骤之后,单独展示 信任此设备 页面。在此页面上信任浏览器是一个明确的选择,与 MFA 验证或设置分开。
仅当租户启用了受信任设备、用户所属的每个组织 (Organization) 允许使用受信任设备,并且当前交互包含合格的 MFA 证明时,页面才会出现:
- 使用已启用的身份验证器应用 OTP、密钥 (WebAuthn)、邮箱验证码或短信验证码成功完成 MFA 验证。
- 在 MFA 设置期间成功绑定身份验证器应用或密钥,包括注册期间的设置。
在重置密码期间或交互没有合格的 MFA 证明时,页面不会显示。仅使用备份码验证或已有受信任设备凭证并不符合条件,因此页面不会在每次登录或注册时都显示。之前选择 跳过 也会抑制该页面,详见下文。
在该页面,用户可以选择:
- 信任此设备 N 天:选择配置的信任时长。Logto 仅在整个交互成功后才创建受信任设备记录和 Cookie 凭证。
- 跳过:继续而不创建受信任设备。跳过此页面不会跳过任何必需的 MFA 验证或设置。
当用户选择 跳过 时,Logto 会在当前浏览器中为该租户和用户存储一个单独的退出 Cookie。其有效期为跳过时配置的信任时长。在浏览器保留此 Cookie 期间,后续登录不会再次显示该页面。Cookie 过期或被清除后,后续合格流程可以再次显示该页面。退出 Cookie 不授予设备信任,也不能满足 MFA。
如果用户选择了 跳过,之后又想信任当前浏览器,推荐的方法是通过浏览器的 Cookie 设置或开发者工具删除 Logto 域下对应的退出 Cookie。其名称以 __Host-logto-device-trust-opt-out- 开头。
或者,清除 Logto 域下的所有 Cookie。
完成上述操作后,重新登录,完成合格的 MFA 验证或设置,并在页面出现时选择 信任此设备 N 天。
受信任设备的创建和登录后元数据更新是尽力而为,因此失败不会导致本应成功的认证 (Authentication) 交互失败。
配置受信任设备策略
全局策略
进入 控制台 > 多因素认证 (MFA) 并配置 受信任设备:
- 为租户启用或禁用受信任设备。默认情况下策略是禁用的。
- 设置 1 到 365 天的整数信任时长。默认值为 30 天。
受信任设备创建时信任时长即被固定。使用该设备不会延长其过期时间,修改时长只影响之后新创建的设备。
禁用全局策略会阻止现有受信任设备满足 MFA,但不会删除它们。如果你再次启用策略,未过期或未被移除的记录可以再次使用。
组织级限制
组织 (Organization) 可以允许或禁止其成员使用受信任设备。此设置只能收紧租户级策略:
- 当全局策略被禁用时,组织 (Organization) 不能启用受信任设备。
- 如果用户所属的任何组织 (Organization) 禁止受信任设备,则该用户的受信任设备凭证无法满足 MFA,无论该组织 (Organization) 是否要求 MFA。
- 组织 (Organization) 没有单独的信任时长。全局时长适用。
禁止组织 (Organization) 使用受信任设备会暂停受影响成员的使用,但不会删除其记录,也不会阻止用户或管理员列出或移除它们。
浏览器和 Cookie 限制
复用受信任设备要求浏览器环境为同一 Logto 端点保留并返回持久性一方 Cookie。它代表的是浏览器配置文件,而不是物理设备。
WebView、系统浏览器、自定义标签页、隐私模式、禁用 Cookie 的浏览器及其他临时环境,仅当其 Cookie 存储持久保存凭证时才能使用受信任设备。如果后续登录时 Cookie 不可用,Logto 会继续常规 MFA 流程,而不会导致认证 (Authentication) 失败。不同浏览器、浏览器配置文件、Logto 域、租户和用户之间不会共享受信任设备凭证。
Logto 不使用浏览器指纹,也不会预先检测客户端是否会持久保存 Cookie。原生应用和自定义登录流程应将受信任设备的创建视为尽力而为,并始终保留常规 MFA 流程。
管理受信任设备
仅会列出 expiresAt 在未来的活动记录。设备名称取自最新的 User Agent,国家和城市为最新可用请求上下文的近似元数据。原始 IP 地址不会在 UI 或公开 API 中显示或返回。
管理员管理
在 控制台 > 用户管理 中,打开某个用户以查看和移除其受信任设备。移除受信任设备仅影响后续登录,不会终止用户的活动会话。
你也可以使用 Management API:
GET /api/users/{userId}/trusted-devices列出用户所有活动的受信任设备。DELETE /api/users/{userId}/trusted-devices/{trustedDeviceId}移除用户拥有的某个受信任设备。
列表响应包含 id、userAgent、country、city、createdAt、lastUsedAt 和 expiresAt。
curl https://[tenant-id].logto.app/api/users/[user-id]/trusted-devices \
-H "Authorization: Bearer [management-api-access-token]"
curl -X DELETE \
https://[tenant-id].logto.app/api/users/[user-id]/trusted-devices/[trusted-device-id] \
-H "Authorization: Bearer [management-api-access-token]"
了解如何通过 Management API 认证 (Authentication)。
账户中心自助管理
在 控制台 > 登录与账户 > 账户中心,配置 受信任设备 字段:
- 关闭:用户无法列出或移除受信任设备。
- 只读:用户可以列出受信任设备,但无法移除。
- 可编辑:用户可以列出和移除受信任设备。
预置账户中心会在安全页面显示活动的受信任设备,并在当前浏览器的完整 Cookie 凭证有效时标记该浏览器。移除当前浏览器会清除其受信任设备 Cookie,但会保持当前登录会话。移除其他浏览器的记录无法立即清除该浏览器的 Cookie;陈旧 Cookie 会在下次被提交时被拒绝并清除。
对于自定义账户中心,请请求 urn:logto:scope:trusted_devices 权限 (Scope),并在拥有有效身份验证记录时使用 Account API:
GET /api/my-account/trusted-devices列出已登录用户的活动受信任设备,并为每项添加isCurrent。DELETE /api/my-account/trusted-devices/{trustedDeviceId}移除已登录用户拥有的某个受信任设备。删除操作仅对一方应用可用。
curl https://[tenant-id].logto.app/api/my-account/trusted-devices \
-H "Authorization: Bearer [account-api-access-token]" \
-H "logto-verification-id: [verification-record-id]"
curl -X DELETE \
https://[tenant-id].logto.app/api/my-account/trusted-devices/[trusted-device-id] \
-H "Authorization: Bearer [account-api-access-token]" \
-H "logto-verification-id: [verification-record-id]"
参见 Account API 参考 和 安全验证指南 了解授权 (Authorization) 和验证流程。
安全模型
受信任设备凭证是不透明令牌 (Opaque token) 持有者凭证,由两部分组成:记录 ID 和加密随机的 32 字节密钥。
- 在生产环境中,Logto 将其存储在仅主机可见的 Cookie 中,带有
__Host-前缀、HttpOnly、Secure、SameSite=Lax和Path=/属性。应用程序 JavaScript 无法读取。 - 服务器仅存储密钥的 SHA-256 哈希值,并使用安全的时间比较进行凭证校验。
- 每次凭证查找都限定在租户和用户范围内,并要求
expiresAt在未来。 - 过期时间在创建时固定。机会性清理可在稍后删除过期行,但清理时机绝不会作为安全控制手段。
- 显式移除会立即删除服务器端记录。被复制或陈旧的 Cookie 在记录被移除后无法通过验证。
凭证密钥和哈希值绝不会通过 UI、公开 API、审计日志或 Webhook 公开。公开的设备 ID 不是物理设备标识符,也不足以用于认证 (Authentication)。由于 Cookie 是持有者凭证,复制完整 Cookie 可以在记录过期或被移除前,为同一租户和用户重放信任;受信任设备不提供硬件级设备认证。
审计日志与 Webhook
受信任设备相关的审计日志包括:
TrustedDevice.Created:在成功交互后创建了受信任设备记录和 Cookie 凭证。TrustedDevice.Used:受信任设备凭证满足了 MFA,且登录成功完成。
你可以订阅以下数据变更 Webhook:
TrustedDevice.Created:创建了受信任设备记录。TrustedDevice.Deleted:用户或管理员移除了受信任设备记录。
事件数据包含受信任设备的 id、userId 和 expiresAt。不包含 Cookie 凭证、密钥哈希和请求 IP。为避免事件量过大,成功使用不会触发 Webhook,策略变更也不会触发受信任设备生命周期事件,因为它们不会变更记录。
自然过期不会有 TrustedDevice.Expired Webhook。过期发生在时间流逝时,而不是应用变更操作时,物理清理可能稍后进行。如果你的集成需要推导预期过期时间,请使用 TrustedDevice.Created 的 expiresAt 值。
自然过期也不会生成受信任设备相关的审计日志。
参见 审计日志事件类型 和 Webhook 事件 获取事件目录。
生命周期说明
- 正常登出不会移除受信任设备。
- 添加、移除或重置 MFA 因子不会移除受信任设备。
- 移除受信任设备不会终止活动会话。
- 删除用户会通过用户数据生命周期删除其受信任设备记录。
- 没有受信任设备数量限制或自动驱逐机制。