gpt4 book ai didi

wif - Windows Identity Foundation - FedAuth cookie 过期

转载 作者:行者123 更新时间:2023-12-04 05:31:13 27 4
gpt4 key购买 nike

我们正在使用 Windows Identity Foundation 为我们的应用程序实现单一登录解决方案。我遇到的问题是 FedAuth cookie 在我认为应该在依赖方方面过期时没有过期。

FedAuth cookie 直到其 ValidTo 时间后大约五分钟才会被销毁。出于测试目的,我将 token 生存期和 session 设置为十分钟后超时。

<sessionState timeout="10" mode="SQLServer" sqlConnectionString="..." />

<securityTokenHandlers>
<add type="Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<sessionTokenRequirement lifetime="00:10" />
</add>
</securityTokenHandlers>

我们已经实现了我们自己的 SessionAuthenticationModule,因为我们使用的是滑动 session 。该代码几乎逐字取自 Programming Windows Identity Foundation但我认为这不是问题,因为我已经尝试注释掉 SessionSecurityTokenReceived 事件中的代码并且我看到了相同的行为,但只是为了完整性。
DateTime now = DateTime.UtcNow;
DateTime validFrom = e.SessionToken.ValidFrom;
DateTime validTo = e.SessionToken.ValidTo;

double tokenLifetime = (validTo - validFrom).TotalMinutes;

if( now < validTo && now > validFrom.AddMinutes( tokenLifetime / 2 ) )
{
SessionAuthenticationModule sam = sender as SessionAuthenticationModule;
e.SessionToken = sam.CreateSessionSecurityToken(
e.SessionToken.ClaimsPrincipal, e.SessionToken.Context,
now, now.AddMinutes( tokenLifetime ), e.SessionToken.IsPersistent );
e.ReissueCookie = true;
}

如果我在上午 10:00 在调试上述代码时登录应用程序,我可以看到 validTo 值为上午 10:10。然后我让应用程序静置 11 分钟,然后单击另一个链接。在调试上述内容时,我看到 now (10:11am) 的值确实 > validTo (10:10am) 所以 token 过期时间没有更新。在这一点上,我希望 SAM 销毁 FedAuth cookie。但是,FedAuth cookie 没有被销毁,Request.IsAuthenticated 的值仍然为真(由于我假设存在 cookie)并且用户继续访问应用程序。直到上午 10 点 15 分,我才真正看到 cookie 已过期(使用 Fiddler)。

我不知道为什么在 validTo 时间到期后第一次访问时 FedAuth cookie 没有被销毁。我可以通过将到期时间设置为比我真正希望的时间少五分钟来捏造它,但我更愿意了解为什么我会看到这种行为。

最佳答案

发生这种情况是因为存在时钟偏差,默认情况下 I 设置为 5 分钟。通常,时钟偏差用于缓解服务器之间的时钟同步(在这种情况下,同一群的服务器)。如果您想禁用或减少该值,您可以通过设置(从我的头顶)来实现
FederatedAuthentication.ServiceConfiuration.MaxClockSkew = TimeSpan.FromSeconds(10);
只需确保服务器时钟 100% 同步

关于wif - Windows Identity Foundation - FedAuth cookie 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12611654/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com