HttpContext.Current.User.Identity.Name 如何工作?它有多安全?

Rya*_*n S 6 c# asp.net security iis

我正在使用HttpContext.Current.User.Identity.Name来获取登录用户的用户名。我想知道这是如何工作的(使用 NTLM v2 / Kerberos)以及它的安全性如何?用户可以尝试模仿他是其他人吗?

基本上,从安全的角度来看,有什么我应该担心的,或者我应该如何改进?

blo*_*art 5

如果您使用 Windows 身份验证进行身份验证(鉴于您提到了 NTLM/Kerberos,您似乎是这样)那么会发生什么(大致)如下

  • IE 向您的 Web 服务器发送没有身份验证标头的请求。
  • IIS 用 401 响应代码拒绝请求,并告诉浏览器它想要的身份验证方案(在这种情况下,协商,它首先尝试 Kerberos,然后回退到 NTLM)
  • 遏制握手发生在多个连接上,并且票证针对 AD 进行验证
  • IIS 将票证向下传递给 ASP.NET,ASP.NET 在构建请求对象的过程中使用票证中的身份详细信息填充分配给请求的线程上的主体。
  • 当您访问 HttpContext.User 时,您会看到当前线程的主体。

这是安全的。它基本上与您通过文件共享或其他任何使用 kerberos 连接到 Windows 服务器时使用的身份验证类型相同。实际上大部分工作都是由 IIS 和 Windows 本身完成的,ASP.NET 只是为您提供了一种查询结果的好方法。