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)
但仍有两个问题:
调用Membership.GetUser("moravej")返回 Null 而调用Membership.GetUser("moravej@mydomain.com")获取正确的对象。有没有办法解决这个问题?当 AD 对他们透明时,我不想让用户使用他们的全名。此外,我不想更改我的代码以连接@mydomain.com到输入的值(因为我需要进行很多更改)
我希望会员能够使用所有 AD 用户进行登录。(在这种情况下它会这样做)但我希望将由我的应用程序创建的所有用户转到 CRM OU。如果我将连接字符串设置为LDAP://server/OU=CRM,DC=mydomain,DC=com它在调用Membership.GetUser()不在此 OU 中的用户时返回 null 。
有没有办法解决这些问题?
提前致谢
根据这里的这个页面,您可以定义使用SAMAccountName登录 - 使用一些配置:
ActiveDirectoryMembershipProvider 的默认配置使用用户主体名称 (UPN) 进行名称映射,如下例所示。
Run Code Online (Sandbox Code Playgroud)attributeMapUsername="userPrincipalName"因此,所有用户名都必须采用 UserName@DomainName 格式;例如:mary@testdomain.com 或 steve@testdomain.com。
但是你可以改变它——见下面的段落:
您可以通过在 Web.config 文件的成员身份提供程序配置中设置以下属性来更改名称映射,使其使用简单的用户名格式。
Run Code Online (Sandbox Code Playgroud)attributeMapUsername="sAMAccountName"通过此配置,您可以使用简单的用户名,例如: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 域的域根。
| 归档时间: |
|
| 查看次数: |
5439 次 |
| 最近记录: |