以编程方式为 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的主要内容,如果未能解决你的问题,请参考以下文章

无法以编程方式将样式设置为 LinearLayout

如何以编程方式将 Google Sheet 脚本发布/部署为 API 可执行文件?

以编程方式为 uiview 设置约束以支持纵向/横向

以编程方式为视频加水印

Joomla 3以编程方式为组件设置默认模板

以编程方式创建的 UIView 的框架为 0