允许会员.ValidateUser验证来自AD的用户名或电子邮件

本文关键字:用户 电子邮件 AD 许会员 ValidateUser 验证 | 更新日期: 2023-09-27 18:08:33

我有一个c# web应用程序,需要接受用户名或电子邮件地址登录。目前,使用电子邮件地址也恰好与完全限定域名相同,如果为变量user和password输入正确的电子邮件地址和密码,则Membership.ValidateUser返回true到isValid

bool isValid = Membership.ValidateUser(user, password);

但是,如果只使用user的用户名部分而不是完全限定的用户名(电子邮件地址),isValid返回false。

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

Membership.ValidateUser("johngordon", "12345")

返回false

Membership.ValidateUser("domain''johngordon", "12345")

返回false

Membership.ValidateUser("fullyqualifieddomain''johngordon", "12345")

返回false

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>

允许会员.ValidateUser验证来自AD的用户名或电子邮件

所以我最终做了不同的事情,这取决于我得到的用户名检查一个完全限定的名字,一个电子邮件地址,或者只是一个用户名,并相应地验证它们。

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");
}