【问题标题】:Windows authentication in MVCMVC 中的 Windows 身份验证
【发布时间】:2012-09-23 13:59:47
【问题描述】:

我想使用 Windows 身份验证检查用户的登录名。 我有这个作为我的控制器的构造函数:

public class HomeController : BaseController
{
    public string UserIdentityName;

    public HomeController()
    {
        UserIdentityName = System.Web.HttpContext.Current.User.Identity.Name;// HttpContext.Current.User.Identity.Name;
    }
}

但 UserIdentityName 返回空字符串...

我的 web.config 中也有这个:

<authentication mode="Windows" />   

有什么想法吗?

【问题讨论】:

    标签: asp.net-mvc authentication asp.net-mvc-4 windows-authentication


    【解决方案1】:

    在解决方案资源管理器窗格中选择 Web 项目并按 F4。 (不是右键+属性,那不一样)

    在属性窗格中设置:
    Windows 身份验证:启用
    匿名身份验证:禁用

    在 Web.config 中:&lt;authentication mode="Windows"&gt;&lt;/authentication&gt;

    获取用户名:

    HttpContext.Current.User.Identity.Name OR User.Identity.Name
    

    运行您的项目,Happy Days!

    【讨论】:

    • 双重检查。我犯了这个错误 - 顶部有两个设置匿名身份验证,项目属性底部有 Windows 身份验证。我创建了一个虚拟的 Intranet MVC 应用程序并阅读了 readme.txt 来实现。
    【解决方案2】:

    不要尝试在控制器的构造函数中访问任何与 HttpContext 相关的内容。您应该访问它的最早阶段是 Initialize 方法或控制器操作内部。

    例如:

    [Authorize]
    public ActionResult Index()
    {
        string user = User.Identity.Name;
        ...
    }
    

    还要确保您已在 Web 服务器上启用 Windows 身份验证 (NTLM)。

    【讨论】:

    • 您可能尚未将 Web 服务器配置为需要 Windows 身份验证。
    • 项目属性的Web 选项卡中有一个复选框可让您在Cassini 中启用Windows 身份验证。你启用了吗?至少在 VS2012 中有这样的复选框。我不记得旧版本的 Cassini 是否支持 Windows 身份验证。我强烈建议您改用 IIS Express。
    • 我发布到 IIS(在我的情况下为 6.5)未经检查的匿名访问并选择了 windows 身份验证。还是没有运气
    • 所以你有一个控制器动作用[Authorize] 属性装饰,你得到User.Identity.Name 的null 假设你有未经检查的匿名访问和检查Windows 身份验证?现在这很奇怪,因为这应该可以工作。
    • @DarinDimitrov 这很重要,因为我有一个场景,即 IE 在我的控制器操作中获取了 User.Identity.Name 但 Chrome 没有,并且在操作被击中时丢失了 User.Identity 信息! ([Authorize] 属性不存在)。添加后,问题就解决了(所以我现在可以亲吻你了!)!我正在使用 Windows 身份验证,我正在尝试找出为什么会这样以及为什么(如果用户经过身份验证)信息会在控制器操作中丢失?
    【解决方案3】:

    章节,

    如果您在 IISExpress 中运行。请确保以下设置:

    在 web.config 中

    <authentication mode="Windows"/>
    <authorization>
      <deny users="?"/>
    </authorization>   
    

    在记事本中打开 projectName.csproj 并更正以下设置:

    <IISExpressAnonymousAuthentication>disabled</IISExpressAnonymousAuthentication>
    <IISExpressWindowsAuthentication>enabled</IISExpressWindowsAuthentication>
    
    <UseIIS>True</UseIIS>
    

    【讨论】:

    • 以上答案编辑文件 .csproj 对我有用。谢谢@Radim
    【解决方案4】:

    尝试添加:

    <authorization>
      <deny users="?" />
    </authorization>
    

    拒绝匿名用户访问。

    【讨论】:

      猜你喜欢
      • 2015-07-18
      • 2023-03-22
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多