AD未检查错误的用户/密码

时间:2016-07-11 11:54:49

标签: asp.net-mvc asp.net-mvc-5 active-directory

我使用Windows身份验证创建了一个MVC 5应用程序,

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

我有以下代码来获取用户的显示名称以及我也想进行验证,

protected void Session_Start(object sender, EventArgs e)
    {

        if (Context.User != null)
        {
            MapUserADDetails(Context.User);
        }
    }

    private void MapUserADDetails(IPrincipal user)
    {

        using (HostingEnvironment.Impersonate())
        using (var domain = new PrincipalContext(ContextType.Domain, "test.com"))
        using (var usr = UserPrincipal.FindByIdentity(domain, user.Identity.Name))
        {
            if (usr == null)
            {
                return;
            }

            Session.Add("UserDisplayName", usr.DisplayName);
        }
    }

现在我将此应用程序托管到IIS,仅启用了Windows身份验证。当我浏览它时,会提示输入userName和Password, enter image description here

问题

即使我输入了错误的用户名/密码,甚至没有填写任何内容,也可以获取显示名称。

如何限制?用户/通行证必须针对AD进行验证。请建议。谢谢!

2 个答案:

答案 0 :(得分:0)

您实际上并未验证任何用户名/密码组合。 UserPrincipal.FindByIdentity仅检查用户是否在AD中找到。

要验证用户凭据,您需要检查:

using (var domain = new PrincipalContext(ContextType.Domain, "test.com"))
{
    bool authenticated = domain.ValidateCredentials(user.Identity.Name, password);
    if (!authenticated)
    {
        // Do stuff
    }
}

您可以查看MSDN了解详情。

答案 1 :(得分:0)

听起来像IIS配置问题,而不是代码。

进行问题排查:

  • 检查IE是否表现不同
  • 确保IIS仅启用了Windows身份验证,而不是匿名(见Receiving login prompt using integrated windows authentication
  • 确保该页面没有其他需要身份验证的位置使用的其他资源(例如图片)(可能该提示不是针对该页面而是针对嵌入其中的资源)
  • 检查浏览器设置(例如在IE中可能需要将该网站添加到Intranet区域,或者&#34;使用当前用户名和密码自动登录&#34;未启用)