我使用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,
问题,
即使我输入了错误的用户名/密码,甚至没有填写任何内容,也可以获取显示名称。
如何限制?用户/通行证必须针对AD进行验证。请建议。谢谢!
答案 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配置问题,而不是代码。
进行问题排查: