gpt4 book ai didi

wif - MachineKeySessionSecurityTokenHandler 和 session token 在应用程序重新启动之间到期

转载 作者:行者123 更新时间:2023-12-04 12:48:18 26 4
gpt4 key购买 nike

在我的 MVC 应用程序中,我使用表单例份验证对用户进行身份验证,然后 System.IdentityModel.Services.SessionAuthenticationModule保持 session 。

虽然我还没有到必要的时候,但我确实想利用 System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler以便应用程序可以很好地运行在 Web 场上(如 Dominick Baier here 所述)。

我遇到的问题是,鉴于基于 machineKey 的处理,我希望 session 不仅在服务器机器之间有效,而且还应该在应用程序重新启动后继续存在。但是,每当我重新启动或重建应用程序时,在浏览器中点击应用程序时,cookie 显然变得无效并且我被退回到身份验证屏幕。再次通过身份验证后,一切正常, session 保持不变。但是,下次应用程序重新启动或重建时,我不得不重新进行身份验证。

我确定这是我没有得到的 WIF 的一个方面,但我只是不知道从哪里开始。我不怕必须延长 MachineKeySessionSecurityTokenHandler ,但在继续之前,我想确保我了解这里发生的事情。据我所知,默认SessionSecurityTokenHandler将 DPAPI 与应用程序池中的某些标识符结合使用以进行加密,因此在这种情况下会发生这种情况是有道理的,但是 MachineKeySessionSecurityTokenHandler 中的行为让我困惑。应用程序中是否还有一些标识符会在重新启动时重新创建 MachineKeySessionSecurityTokenHandler要看?我只是缺少一个设置吗?

以下是我的 web.config 中的相关部分:

<configSections>
<section name="system.identityModel"
type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</configSections>

...
<system.identityModel>
<identityConfiguration>
<securityTokenHandlers>
<remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</securityTokenHandlers>
</identityConfiguration>
</system.identityModel>

...
<system.web>
<machineKey compatibilityMode="Framework45"
validationKey="E27893..."
decryptionKey="ABC..."
validation="SHA1" decryption="AES" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login"
timeout="10080" />
</authentication>
</system.web>

...
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="SessionAuthenticationModule"
type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</modules>
</system.webServer>

最佳答案

嗯-如果您明确设置机器 key (就像您似乎所做的那样)-我看不出这行不通的原因。也许您正在使用其他触发重新身份验证问题的 cookie、 session 等?

关于wif - MachineKeySessionSecurityTokenHandler 和 session token 在应用程序重新启动之间到期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15981121/

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