我正在使用HttpContext.Current.User.Identity.Name来获取已登录用户的用户名。我想知道它是如何工作的(使用NTLM v2 / Kerberos),以及它有多安全?用户是否可以尝试模仿成别人?从安全角度来看,基本上有没有什么需要担心的问题,或者我应该如何改进它?
如果您正在使用Windows身份验证进行身份验证(根据您提到的NTLM / Kerberos,似乎是这样),那么大致的过程如下: IE向您的Web服务器发送没有身份验证标头的请求。 IIS以401响应代码拒绝请求,并告诉浏览器要求的身份验证方案(在此情况下为Negotiate,它首先尝试Kerberos,然后回退到NTLM) Kerb握手在多个连接上进行,并且票证针对AD进行验证 IIS将票证传递给ASP.NET,在构建请求对象的过程中,使用票证中的标识详细信息将主体分配给分配给请求的线程。 当您访问HttpContext.User时,您会看到当前线程的主体。 它是安全的。它基本上是通过文件共享或任何其他使用kerberos的方式连接到Windows服务器时使用的相同身份验证类型。实际上,IIS和Windows自身完成了绝大部分工作,ASP.NET只是提供了一种查询结果的简单方法。