【问题标题】:In ASP.NET, under which credentials does the code run?在 ASP.NET 中,代码在哪些凭据下运行?
【发布时间】:2014-04-15 06:32:39
【问题描述】:

1) 我想知道假设我们在 VS 中以调试模式使用 ASP.NET Web 应用程序,那么代码在哪个用户帐户下运行?

2) 我也想知道,假设我们将它发布到 IIS,然后将其设置为使用 WBA/FBA,然后,登录用户的用户名/密码用于向 ASP.NET 验证用户但是,代码(SQL 查询等) 在 apppool 帐户的凭据下运行。 此外,使用哪种凭据来访问服务器上的资源(如文件)?您对此有何看法?

【问题讨论】:

标签: asp.net .net security authentication credentials


【解决方案1】:

1) 我想知道假设我们正在使用 ASP.NET Web 应用程序 VS中的debug模式,那么代码在哪个用户账号下运行?

这取决于主机。 VS 提供了 4 种方式来托管和调试 Web 应用程序:VS 开发服务器 (VS 2012)、IIS Express、本地 IIS 和自定义主机 (VS 2013)。 Devs 服务器通常在您的 -Administrator- 帐户下运行,可能不适合测试安全性。直接将 IIS 用作开发 Web 服务器使您可以在更接近 IIS 生产 Web 服务器的环境中工作。

这是在您的 Web 项目属性的 Web 选项卡中配置的。

2) 我也想知道,假设我们将它发布到 IIS,然后, 设置为使用WBA/FBA,然后,登录的用户名/密码 user 用于对 ASP.NET 站点的用户进行身份验证,但是, 代码在 apppool 帐户的凭据下运行。你对什么看法 这点?

不是很清楚,但是我认为您对IIS安全性的理解可能不正确。每个网站只有一个应用程序池在特定帐户下运行(默认为 apppool 帐户,但可以是网络服务或本地系统)。当用户登录时,这个过程绝对没有任何改变。用户只是使用身份验证提供程序进行连接:Windows 身份验证或表单身份验证是 2 个常见的提供程序。用户身份保存在 http 上下文中,允许您稍后使用授权规则。因此,每个代码块始终在同一个帐户下运行(除非您启用委托,但这是另一回事)。

我强烈建议您阅读 this complete introduction 关于 asp.net 安全性。

【讨论】:

  • 应用程序池标识用于此目的。
  • 我已经用斜体更新了我的问题,请检查一下。
  • 你的意思是说除非你使用delegation(提升权限),否则使用apppool账号或者登录用户账号来运行代码块?
  • 应用程序池始终在同一帐户下运行。例如,如果您尝试访问 Web 服务器上的文件,它将始终是此帐户。这就是为什么您有时必须将应用程序池标识设置为提升的用户才能访问文件或启动新进程。用户身份(一旦登录)是非常不同的东西。它被各种属性和 asp.net 授权规则使用。
  • “这就是为什么您有时必须将应用程序池标识设置为提升的用户”另一个解决方案是为 apppool 帐户用户授予对文件的写入权限。对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
相关资源
最近更新 更多