在我们的项目中,有一个C#ASP.NET后端和一个单页Web应用程序。 我们刚刚部署了具有ADFS身份验证的应用程序,并且用户注意到,一段时间后,他们必须重新加载我们的应用程序才能使用它(经过我的测试,我得出的结论是,这需要1个小时的时间)。 (用户无需再次输入凭据)。
我注意到,当发生这种情况时,所有ajax请求都会以某种方式失败-生成ajax请求,服务器将请求重定向到ADFS服务器进行身份验证,它会失败,并且不会将其重定向回原始端点请求。
在开发者工具中看起来像这样
https://<FEDERATION SERVER>?wtrealm=<APP_REALM>&wctx=WsFedOwinState%3Dmu0Ic7SbHueJsXe4JU9boNFrew3OeM1F9NUP8HEXcG562zuad0UWj8SaJ1uFkn0WWm10Xm1SHph6Z_bnOQC8-ZpH_EyLgxzMJPGVaeK8-BwglW5gvJerWfJHQk36H6rV4wdIPWOqr2fOv7OnErt7gEpnlzRmxTVibqVQ3XQ3O8stggteue_L5zpUr88ks27oJ7XNtZM2eabQ2065nYUutQ&wa=wsignin1.0
如果我们不使用SPA,则当用户在站点中导航时,cookie将在每个站点上更新/刷新,这不会成为问题。
我应该怎么做才能解决此问题?一个会话增加的时间可以由ADFS服务器来解决,但是我认为这只是暂时的解决办法,并且会在不同的时间再次出现。
如何保持Cookie的新鲜度?
用于ADFS的ASP.NET身份验证代码非常简单: app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata,
AuthenticationMode = AuthenticationMode.Passive
});