应用程序池标识,匿名标识,进程模型标识,模拟标识和线程标识之间的区别

时间:2011-07-18 07:44:59

标签: asp.net security iis identity

我对ASP.NET和IIS中的各种不同身份有点困惑。可以告诉我应用程序池标识,匿名身份,ProcessModel标识,模拟身份和线程标识之间的确切区别吗?请告诉我asp.net何时使用哪个身份?

2 个答案:

答案 0 :(得分:3)

IIS是可以托管ASP.NET以外的主动/被动内容的Web服务器(例如,经典的asp,php,静态文件等)。应用程序池标识决定从IIS透视图运行请求的用户。因此,当提供静态文件(html / image)时,该用户将用于从磁盘访问文件。很多时候,IIS会将请求的实际执行移交给不同的处理程序(例如,php-cgi或ASP.NET运行时等)。该运行时可以使用不同的标识来运行请求。在Windows身份验证的情况下,IIS会将Windows用户令牌传递给特定处理程序,并且处理程序可以模拟当前请求以在该经过身份验证的用户身份下运行。经典ASP就是这样一个系统。在这些情况下,当用户未经过身份验证(即匿名)时,将使用匿名用户的身份。

如果是ASP.NET,默认配置将在Application Pool的标识下运行请求。但是,使用配置,您可以指示ASP.NET运行时模拟当前用户的标识。您还可以通过配置来配置在特定身份下模拟请求 - 典型情况下,应用程序代码需要具有特定访问权限,例如访问文件共享,网络资源等。

答案 1 :(得分:2)

进程模型标识仅适用于IIS 5. *。在IIS 6+中,它的等价物是应用程序池标识。

创建工作进程时,将使用进程模型/应用程序池标识作为进程标识。

当允许匿名访问时,匿名身份将用作处理工作进程内传入请求的所有线程的线程标识。其他线程的身份取决于它们的创建方式,并且对开发人员/最终用户是透明的。

当使用其他身份验证方法(如Windows身份验证)时,工作线程标识使用经过身份验证的用户标识(每个传入请求可能来自经过身份验证的用户,然后此用户的标识用于处理请求的线程)。

模仿要复杂得多,如

中所述

http://msdn.microsoft.com/en-us/library/aa376391(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/ff647404.aspx

它改变了安全上下文,这不是一个易于理解的Windows概念,您可以从优秀书籍或实验中学习。