MVC中的Windows身份验证

时间:2012-09-23 13:59:47

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

我想使用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" />   

任何想法?

4 个答案:

答案 0 :(得分:12)

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

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

在Web.config中:<authentication mode="Windows"></authentication>

获取用户名:

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

运行你的项目,Happy Days!

答案 1 :(得分:5)

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

例如:

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

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

答案 2 :(得分:2)

CHAPS,

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

在web.config中

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

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

<IISExpressAnonymousAuthentication>disabled</IISExpressAnonymousAuthentication>
<IISExpressWindowsAuthentication>enabled</IISExpressWindowsAuthentication>

<UseIIS>True</UseIIS>

答案 3 :(得分:1)

尝试添加:

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

拒绝匿名用户访问。