对不起我的英语很差。
可以从ASP.NET应用程序获取所有线程请求吗? 如果同时使用相同的用户名对另一个客户端进行身份验证,我不需要执行当前用户的完全注销。也许我可以查询另一个请求线程,知道我是否需要这样做。
我将尝试简化问题...我可以在C#代码的IIS服务器中了解ASP.NET应用程序的所有活动请求吗? 现在我尝试获取WebDev.WebServer40.EXE进程的线程,但似乎没有请求线程。
答案 0 :(得分:1)
我认为你正在接近这个错误。您无法在会话过程中注销用户,因为http是无状态的,并且用户凭据始终作为请求的一部分发送,无论是cookie,承载令牌还是Authorization
标头中的某个值。 / p>
因此,作为单个请求的一部分执行注销并不可行。
对我而言,您似乎想要取消对用户的授权,而无需取消用户身份验证。也就是说,用户ID仍然连接到请求,但您不再希望授予用户访问刚刚用户可用的任何资源的权限。
此决定是在一个独特的时间点做出的,因此所有请求与您决定用户现在未经授权的时间同时发生的行为会有所不同,具体取决于在取消授权之前或之后是否检查了授权。但是肯定会拒绝新的请求。
http请求的时间不应超过毫秒或有时秒。您保护的任何资源都非常重要,以至于它不能与这个不一致的窗口一起存在,您可能不应该通过http公开它。
但是如果你想使这个相当(也许是不必要的)复杂的机制来取消授权已经授权的请求,你应该将它作为一个http处理程序,作为aspx管道的最后一部分执行。它应该查看用户ID和授权系统维护的某种共享黑名单。
我认为你应该忍受不一致。但请确保将身份验证(who)与授权(用户可以执行的操作)分开。
答案 1 :(得分:0)
我确实看到了不同的可能性。最好的选择可能是使用System.Web.Administration dll和WorkerProcess.GetRequests方法。主要问题是dll只适用于IIS7版本的上级。在IIS6中存在一些类似的东西?对我来说,最重要的是获取服务器管理的当前请求,并了解每个线程和内部信息的凭据。