我们有时会收到 Azure AD B2C 用户的投诉,称在成功登录之前需要两次 MFA 验证。不幸的是,我们不知道如何重现这种情况,因此很难对这里出现的问题提出假设。问题似乎并不特定于浏览器或设备。
当我在 Azure 门户中查看 Azure AD B2C 租户的审核日志时,我看到以下用户报告他需要输入 MFA 两次才能进行从 09:54:54 开始的登录尝试。同一用户在 13:50:51 登录,然后登录按预期工作。
查看第一个流程,我发现 Azure AD B2C 在 09:55:19 向应用程序发出了授权代码,但奇怪的是,此后立即又生成了一次密码。用户输入的值与第一次验证时使用的值相同,但这次失败了。因此,我们知道 Azure AD B2C 生成了一个新的一次性密码并将其发送给用户。
是否可以确定问题的原因很可能是在调用登录流程的应用程序中找到的?我的猜测是,它可能在处理授权代码时出现问题并触发新的登录尝试。有没有人以前见过这种行为,也许有什么建议可能导致这种行为?
日期(UTC) | 相关 ID | 服务 | 类别 | 活动 | 结果 | 结果原因 |
---|---|---|---|---|---|---|
2024/04/23 13:51:14 | [correlationId_555] | B2C | 认证 | 兑换代币 | 成功 | 不适用 |
2024/04/23 13:51:14 | [correlationId_444] | B2C | 认证 | 向应用程序发出授权码 | 成功 | 不适用 |
2024/04/23 13:51:12 | [correlationId_444] | B2C | 其他 | 验证一次性密码 | 成功 | 不适用 |
2024/04/23 13:50:51 | [correlationId_444] | B2C | 其他 | 生成一次性密码 | 成功 | 不适用 |
2024/04/23 13:50:50 | [correlationId_444] | B2C | 认证 | 验证本地帐户凭据 | 成功 | 不适用 |
2024/04/23 09:55:42 | [correlationId_333] | B2C | 认证 | 兑换代币 | 成功 | 不适用 |
2024/04/23 09:55:41 | [correlationId_222] | B2C | 认证 | 向应用程序发出授权码 | 成功 | 不适用 |
2024/04/23 09:55:41 | [correlationId_222] | B2C | 其他 | 验证一次性密码 | 成功 | 不适用 |
2024/04/23 09:55:24 | [correlationId_222] | B2C | 其他 | 验证一次性密码 | 客户端错误 | 提供的用于验证的一次性密码不正确 |
2024/04/23 09:55:20 | [correlationId_222] | B2C | 其他 | 生成一次性密码 | 成功 | 不适用 |
2024/04/23 09:55:19 | [correlationId_111] | B2C | 认证 | 向应用程序发出授权码 | 成功 | 不适用 |
2024/04/23 09:55:17 | [correlationId_111] | B2C | 其他 | 验证一次性密码 | 成功 | 不适用 |
2024/04/23 09:54:55 | [correlationId_111] | B2C | 其他 | 生成一次性密码 | 成功 | 不适用 |
2024/04/23 09:54:54 | [correlationId_111] | B2C | 认证 | 验证本地帐户凭据 | 成功 | 不适用 |
不确定为什么人们对我的问题投了反对票,但尽管如此,我想回答我自己的问题,希望能帮助面临类似问题的其他人。
我们已经确定了导致观察到的审核日志的原因,即在发出授权后立即生成另一次密码。在我们的示例中,用户已将 B2C 租户的 URL 添加为书签,其中重定向 URL 中包含 state 和 nonce 参数。用户导航到添加书签的 URL,输入凭据,然后输入一次性密码。 Azure AD B2C 向应用程序发出授权代码,然后该应用程序根据 state 和 nonce 值检测到应启动新登录,因为书签值已过期且不再有效。
因此,观察到的行为实际上是您想要看到的,我们只是没有意识到如果书签包含状态和随机数,就会发生这种情况。