我正在使用 HttpContext.Current.User.Identity.Name 获取已登录用户的用户名。我想知道这是如何工作的(使用 NTLM v2/Kerberos)以及它的安全性如何?用户可以尝试模仿他是其他人吗?
基本上,从安全的角度来看,我应该担心什么,或者我应该如何改进它?
最佳答案
如果您正在使用 Windows 身份验证进行身份验证(考虑到您提到的 NTLM/Kerberos,您似乎是这样做的)那么会发生(大致)如下
- IE 向您的 Web 服务器发送不带身份验证 header 的请求。
- IIS 使用 401 响应代码拒绝请求并告诉浏览器它想要的身份验证方案(在本例中为协商,它首先尝试 Kerberos,然后回退到 NTLM)
- 遏制握手发生在多个连接上,并且根据 AD 验证票证
- IIS 将票证向下传递给 ASP.NET,ASP.NET 在构建请求对象的过程中使用票证中的身份详细信息填充分配给请求的线程上的主体。
- 当您访问 HttpContext.User 时,您会看到当前线程的主体。
它是安全的。它基本上与您通过文件共享或任何其他使用 kerberos 连接到 Windows 服务器时使用的身份验证类型相同。实际上,大部分工作是由 IIS 和 Windows 本身完成的,ASP.NET 只是为您提供了一种查询结果的好方法。
关于c# - HttpContext.Current.User.Identity.Name 是如何工作的?它有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13414338/