ASP.Net Core 3.1中使用Windows身份验证时的闲置超时时间

4

编辑

让我们简单点。

如何在使用Windows身份验证的.Net Core 3.1应用程序中实现空闲超时?

为什么要使用Windows身份验证:因为当使用Windows(活动目录)进行身份验证时,我们无法注销。

空闲超时:该功能意味着如果屏幕空闲了一段时间(可以在IIS中配置->应用程序池->选择池->高级设置->空闲超时:(默认:20分钟)),则应用程序应注销并再次要求登录,或者它应进入在startup.cs中设置的404页面。

SetIdleTimeout

最好具备以下功能

  1. 使用Windows身份验证
  2. 尝试从IIS应用程序池实现空闲超时。
  3. 在部署到IIS后仍能正常工作。

当前行为

应用程序会在空闲超时后关闭。

The application shutdown after idle-timeout

并且

Event Viewer

在尝试浏览(单击任何链接)时,它会重新启动应用程序。

But it starts again

尝试注销Windows身份验证但没有成功。

期望的行为/输出

  1. 弹出Windows身份验证登录对话框

和/或

  1. 空闲超时后应跳转到404页面

3
IIS工作进程(应用程序池)的空闲超时设置与最终用户是否闲置或Windows身份验证(Kerberos或NTLM)毫无关系。它只关心当应用程序处于非活动状态时(即不处理HTTP请求),减少服务器上的内存负载,而不管最终用户在浏览器窗口中做什么或工作进程内运行的任何后台任务。 - Dai
@Dai:我相信你是正确的,但它还是不起作用。你能再给一些关于功能方面的指导吗? - Mohit S
在页面或服务工作者中使用 AJAX(或 fetch)每隔几分钟发送请求,以保持用户的身份验证令牌有效 - 但我承认我不确定这如何与 Kerberos/NTML 协作。 - Dai
@JeremyLakeman:没问题。我明白了,但是肯定会有一种方法来解决404的问题。这意味着在闲置超时到期后,它会达到404,就这样。 - Mohit S
如果请求是针对某个您认为已过期的登录,则返回401响应,浏览器可能会将任何缓存的凭据视为无效并提示用户。因此,编写自定义中间件以返回401? - Jeremy Lakeman
显示剩余2条评论
1个回答

2
我认为你所要求的并不是直接可以实现的,但是你可以接近实现这个目标。我不会在这里提供任何代码,因为这可能会变得复杂,但我希望可以帮助你思考问题。像@jeremy-lakeman所说,这是一个"反功能",也许你可以重新定义问题。
Windows身份验证
当服务器返回401时,Windows将自动通过kerberos进行身份验证。对于用户来说,这是透明的,没有登录页面。在您的情况下,这由IIS处理。使用Windows身份验证时,不应显示登录页面。
Cookie身份验证
基本上,这是在浏览器上存储用于验证用户的cookie。Asp.Net Core 3.1包含此功能,并且可以轻松支持此功能。该cookie在应用程序级别进行验证。此cookie可以有一个过期时间,并且您可以在页面中嵌入登录表单。在创建新项目时,这是“Individual Accounts”选项。
两者的混合
想象一下以下的世界:
您有两个应用程序。您的主要应用程序配置为Cookie身份验证(我们将其称为"Primary"),而辅助应用程序配置为使用Windows身份验证(称为"Secondary")。您还可以使用IIS并为一个特定路径放置Windows身份验证,但将其视为两个独立的应用程序更容易理解。
当您向Primary发出请求时,您的应用程序会验证cookie。如果不存在cookie或其被拒绝(因为超时),则会将您重定向到Secondary(不是401未经授权,而是302找到),它只进行Windows身份验证。它可以重新生成cookie,然后将您发送回Primary。
但是这不会显示登录页面,我认为这是问题的核心。您想在同一个应用程序中同时拥有自动登录和手动登录。如果您拥有自动登录,过期时间有什么用?他们只会刷新并再次获得身份验证。
如果您放弃自动登录(通过Windows身份验证),则可以仅使用一个具有Cookie身份验证的应用程序。
仅限Cookie 在这种情况下,您仅设置了Primary,并且它只进行cookie身份验证。您可以拥有针对Active Directory进行身份验证的标识提供程序。这是Windows身份验证,但在应用程序级别而不是在IIS级别。
你必须选择自动登录或超时之间。在没有合理的世界中,您不能两者兼备。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接