2012-11-16 52 views
3

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

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

+0

你可以绝对肯定它!一旦用户通过身份验证(并且它可能是安全问题),那么该属性是完全安全的。你可以改进/选择的是认证方法,密码强度,http(非 - )嗅探和类似的东西。 –

+0

@Adriano - 我的应用程序正在使用HTTPS。身份验证方法仅在Windows登录时完成,而不是与应用程序有关,这是正确的吗? 有没有关于这个问题的任何微软引用? –

+2

你使用Windows身份验证?那么它应该足够安全(而弱部分是Windows用户用来登录的密码)。根本不用担心User.Identity,它很安全。安全问题将更容易来自我们编写的代码(以及用户将选择的密码),而不是来自“基础架构”和经过良好测试的代码。 –

回答

3

如果您使用的是Windows身份验证(假定你的NTLM/Kerberos的提及看来你是),那么会发生什么情况(大致)如下

  • IE认证发送没有认证头的请求你的网络服务器。
  • IIS拒绝与401响应码的请求,并告诉浏览器,它希望认证方案(在这种情况下协商,它首先尝试的Kerberos,然后回落到NTLM)
  • 路边握手发生在多个连接,并根据公告验证该票据
  • IIS将票证传递给ASP.NET,该票据在构建Request对象的过程中使用票证中的身份详细信息填充分配给该请求的线程上的主体。
  • 当您访问HttpContext.User时,您会看到当前线程的主体。

它很安全。它基本上与通过文件共享或其他使用kerberos的其他任何服务器连接到Windows服务器时使用的身份验证类型基本相同。实际上,IIS和Windows本身是做大部分工作的,ASP.NET只是给你一个查询结果的好方法。

+0

User.Identity.Name与使用Forms Authentication时一样安全吗? –