使用 Active Directory 中的成员资格提供程序进行简单的用户名登录

Mah*_*vej 4 .net asp.net-membership active-directory activedirectorymembership

ActiveDirectoryMembershipProvider在我的 ASP.Net 项目之一中使用 Active Directory 进行身份验证。

我使用此 LDAP 连接字符串成功连接到它:

LDAP://server/DC=mydomain,DC=com
Run Code Online (Sandbox Code Playgroud)

但仍有两个问题:

  1. 调用Membership.GetUser("moravej")返回 Null 而调用Membership.GetUser("moravej@mydomain.com")获取正确的对象。有没有办法解决这个问题?当 AD 对他们透明时,我不想让用户使用他们的全名。此外,我不想更改我的代码以连接@mydomain.com到输入的值(因为我需要进行很多更改)

  2. 我希望会员能够使用所有 AD 用户进行登录。(在这种情况下它会这样做)但我希望将由我的应用程序创建的所有用户转到 CRM OU。如果我将连接字符串设置为LDAP://server/OU=CRM,DC=mydomain,DC=com它在调用Membership.GetUser()不在此 OU 中的用户时返回 null 。

有没有办法解决这些问题?

提前致谢

mar*_*c_s 5

根据这里的这个页面,您可以定义使用SAMAccountName登录 - 使用一些配置:

ActiveDirectoryMembershipProvider 的默认配置使用用户主体名称 (UPN) 进行名称映射,如下例所示。

attributeMapUsername="userPrincipalName"
Run Code Online (Sandbox Code Playgroud)

因此,所有用户名都必须采用 UserName@DomainName 格式;例如:mary@testdomain.com 或 steve@testdomain.com。

但是你可以改变它——见下面的段落:

您可以通过在 Web.config 文件的成员身份提供程序配置中设置以下属性来更改名称映射,使其使用简单的用户名格式。

attributeMapUsername="sAMAccountName"
Run Code Online (Sandbox Code Playgroud)

通过此配置,您可以使用简单的用户名,例如:Mary 或 Steve。

这似乎就是你要找的 - 对吧?

所以在你的web.config, 你应该有一个这样的配置条目(当然 - 使用你的连接字符串名称等 - 这只是一个示例!)

<system.web>
<membership defaultProvider="MyADMembershipProvider">
   <providers>
      <add name="MyADMembershipProvider"
           type="System.Web.Security.ActiveDirectoryMembershipProvider,
                 System.Web, Version=2.0.0.0, Culture=neutral,
                 PublicKeyToken=b03f5f7f11d50a3a"
           connectionStringName="ADConnectionString"
           attributeMapUsername="sAMAccountName"/>  <== this is the magic to turn ON
  </providers>
</membership>
</system.web>
Run Code Online (Sandbox Code Playgroud)

对于问题#2:如果您想要所有用户,则将成员资格提供程序的连接字符串设置为 ,LDAP://server/DC=mydomain,DC=com以便它连接到您的 AD 域的域根。