AD FS 故障排除 - 循环检测

当信赖方持续拒绝有效的安全令牌并重定向回 AD FS 时,将发生 AD FS 中的循环。

为了防止这种情况发生,AD FS 实现了所谓的循环检测 Cookie。 默认情况下,AD FS 将 Cookie 写入名为 MSISLoopDetectionCookie 的 Web 被动客户端。 此 Cookie 包含时间戳值和多个已发出的令牌值。 这样,AD FS 就可以跟踪客户端在特定时间跨度内访问联合身份验证服务的频率和次数。

如果被动客户端在 20 秒内为一个令牌访问联合服务五 (5) 次,AD FS 会引发以下错误:

MSIS7042:同一客户端浏览器会话在 '{1}' 秒内发起过 '{0}' 请求。 请联系管理员获取详细信息。

进入无限循环通常是由行为异常的信赖方应用程序导致:该应用程序未成功使用 AD FS 发出的令牌,并且应用程序重复地将被动客户端发送回 AD FS 以获取新令牌。 只要被动客户端在 20 秒内的请求不超过 5 次,AD FS 就每次都会向被动客户端发出新令牌。

可以使用 PowerShell 更改发出的令牌数值和时间跨度值。

Set-AdfsProperties -LoopDetectionMaximumTokensIssuedInterval 5  -LoopDetectionTimeIntervalInSeconds 20

LoopDetectionMaximumTokensIssuedInterval 的最小值是 1

LoopDetectionTimeIntervalInSeconds 的最小值是 5

你还可以在执行性能测试时禁用循环检测。

Set-AdfsProperties -EnableLoopDetection $false

重要

不建议永久禁用循环检测,因为它能防止用户进入无限循环状态。

后续步骤