7

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

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

4

1 回答 1

5

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

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

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

于 2012-12-30T05:26:40.617 回答