C# 允许Membership.ValidateUser验证来自AD的用户名或电子邮件

C# 允许Membership.ValidateUser验证来自AD的用户名或电子邮件,c#,asp.net,active-directory,asp.net-membership,web-config,C#,Asp.net,Active Directory,Asp.net Membership,Web Config,我有一个C#web应用程序,需要接受用户名或电子邮件地址进行登录。目前,使用与完全限定域名相同的电子邮件地址登录工作正常,其中成员身份。如果为变量user和password输入了正确的电子邮件地址和密码,ValidateUser将返回true到isValid bool isValid = Membership.ValidateUser(user, password); 但是,如果仅使用用户的用户名部分而不是完全限定的用户名(电子邮件地址),isValid将返回false 例如,我的用户可能是j

我有一个C#web应用程序,需要接受用户名或电子邮件地址进行登录。目前,使用与完全限定域名相同的电子邮件地址登录工作正常,其中
成员身份。如果为变量user和password输入了正确的电子邮件地址和密码,ValidateUser
将返回true到
isValid

bool isValid = Membership.ValidateUser(user, password);
但是,如果仅使用用户的用户名部分而不是完全限定的用户名(电子邮件地址),isValid将返回false

例如,我的用户可能是johngordon和我的电子邮件johngordon@fullyqualifieddomain. 我的密码是12345。使用

Membership.ValidateUser("johngordon", "12345")
返回false

Membership.ValidateUser("domain\\johngordon", "12345")
Membership.ValidateUser("fullyqualifieddomain\\johngordon", "12345")
Membership.ValidateUser("johngordon@fullyqualifieddomain", "12345")
返回false

Membership.ValidateUser("domain\\johngordon", "12345")
Membership.ValidateUser("fullyqualifieddomain\\johngordon", "12345")
Membership.ValidateUser("johngordon@fullyqualifieddomain", "12345")
返回false

Membership.ValidateUser("domain\\johngordon", "12345")
Membership.ValidateUser("fullyqualifieddomain\\johngordon", "12345")
Membership.ValidateUser("johngordon@fullyqualifieddomain", "12345")
返回true

以下是我认为来自web.config的相关信息。我已经搜索了ValidateUser(),但找不到您如何告诉它使用用户名和电子邮件地址,或者在我的场景中同时使用用户名和电子邮件地址

<membership defaultProvider="MyADMembershipProvider">
      <providers>
          <add name="MyADMembershipProvider"
               type="System.Web.Security.ActiveDirectoryMembershipProvider, 
               System.Web, Version=2.0.0.0, 
               &#xA; &#xA; Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
               connectionStringName="ADConnectionString" enableSearchMethods="true"
               connectionProtection="Secure" connectionUsername="domain\user" 
               connectionPassword="password" />
       </providers>
</membership>

因此,根据用户名检查完整限定名、电子邮件地址或用户名并进行相应验证,我最终会做不同的事情

bool isValid = false;
if(user.Contains("@fullyqualifieddomain"))
{
  isValid = Membership.ValidateUser(user, password)
}
else if(user.Contains("@"))
{
  isValid = Membership.ValidateUser(Membership.GetUserNameByEmail(user),password);
}
else
{
 isValid = Membership.ValidateUser(user+"fullyqualifieddomain");
}

您需要指定
domain\username
@ErikFunkenbusch我在Membership.ValidateUser中尝试了domain\username,并且返回false。您是否跳过反斜杠?使用@“域\用户名”或“域\\用户名”?或者您是在文本框中键入的?@ErikFunkenbusch在文本框中键入,并尝试硬编码为domain\\username。两者都不起作用。我问的原因是因为我觉得这很奇怪jg@domain.com可以,因为这表明jg是用户名。这不是一个电子邮件地址,也可能是一个电子邮件地址,但就广告而言,它只是一个完全限定的用户名。您是否尝试过使用“域\jg”?