AD FS 故障排除:循环检测

在 Active Directory 联合身份验证服务(AD FS)中,当信赖方持续拒绝有效的安全令牌并重定向回 AD FS 时,会出现循环。

为防止此问题发生,AD FS 实现了循环检测 Cookie。 默认情况下,AD FS 将 Cookie 写入名为 MSISLoopDetectionCookieWeb 被动客户端。 此 Cookie 保存时间戳值和颁发的令牌数的值。 此信息允许 AD FS 跟踪客户端在特定时间跨度内访问联合身份验证服务的频率和次数。

如果被动客户端在 20 秒内访问联合身份验证服务五次,AD FS 将引发以下错误:

MSIS7042: The same client browser session has made '{0}' requests in the last '{1}' seconds. Contact your administrator for details.

进入无限循环通常是由于行为不当的信赖方应用程序未能成功使用 AD FS 颁发的令牌造成的。 然后,应用程序会反复将被动客户端发送回 AD FS 以获取新令牌。 AD FS 每次向被动客户端颁发一个新令牌,限制为 20 秒内 5 个请求。

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

Set-AdfsProperties -LoopDetectionMaximumTokensIssuedInterval 5  -LoopDetectionTimeIntervalInSeconds 20

最小值 LoopDetectionMaximumTokensIssuedInterval 为 1。

最小值 LoopDetectionTimeIntervalInSeconds 为 5。

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

Set-AdfsProperties -EnableLoopDetection $false

重要

不要永久禁用循环检测,因为它会阻止用户进入无限循环状态。