以编程方式为 ActiveDirectoryMembershipProvider 设置 connectionString
Posted
技术标签:
【中文标题】以编程方式为 ActiveDirectoryMembershipProvider 设置 connectionString【英文标题】:Programmatically set connectionString for ActiveDirectoryMembershipProvider 【发布时间】:2012-08-10 08:04:49 【问题描述】:可以使用
new PrincipalContext(ContextType.Domain,null)
没有为 Active Directory 提供任何连接字符串。
使用ActiveDirectoryMembershipProvider
时,您必须在web.config
中提供一个LDAP 端点。
我正在处理的站点将部署在多个站点上,我不想在web.config
中为每个部署填写详细信息。
MSDN 上的How To: Use Forms Authentication with Active Directory in Multiple Domains 指定了 3 个(!)会员提供商来处理 3 个域,这并不令人印象深刻。但是,这篇文章来自 2005 年,它处理的任务与我所追求的不同。
问题:
是否可以在 web.config 中不硬编码 LDAP 端点的方式使用 ActiveDirectoryMembershipProvider
?
我更愿意使用ActiveDirectoryMembershipProvider
而不是PrincipalContext
来(可能)能够调用ChangePassword
等。
【问题讨论】:
【参考方案1】:不,如果不指定目标 LDAP 服务器,则无法使用 ActiveDirectoryMembershipProvider
。
必须指定连接字符串,字符串必须包含服务器(包含ADS_FORMAT_SERVER
)
您必须创建一个 connectionStrings 元素(ASP.NET 设置架构) Web.config 文件中标识 Active Directory 的条目 要使用的服务器、Active Directory 域或 ADAM 应用程序分区。 提供者将仅在域范围内运行,或在子范围内 域内。
如果您想支持活动目录林,并且可以选择丢失表单身份验证,请考虑使用 Windows 身份验证。 Windows 身份验证将使用 NTLM 和 Kerberos 来获取用户在森林中的身份,您仍然可以通过模拟更改用户密码。见WindowsIdentity.Impersonate()
。
【讨论】:
"..在 web.config 中没有硬编码 LDAP 端点的方式?" @user2864740,我不确定我是否理解这个问题。 Windows 身份验证不需要在 web.config 中指定 LDAP 端点,我明确表示ActiveDirectoryMembershipProvider
是不可能的。以上是关于以编程方式为 ActiveDirectoryMembershipProvider 设置 connectionString的主要内容,如果未能解决你的问题,请参考以下文章