【发布时间】:2017-11-06 04:08:40
【问题描述】:
我正在尝试设置我的本地 asp.net Web 应用程序以使用 LDAP 连接字符串(活动目录域控制器)进行用户身份验证。
LDAP 连接字符串指向一个活动目录域控制器,可通过我正在使用的 VPN 连接访问。我也在使用一些公共 LDAP 目录进行测试。
我已将 IIS (7) 部署到我的本地工作站。我还按照说明 found here 创建了一个简单的 Active Directory 表单身份验证应用程序。
我正在尝试向 4 个不同的 LDAP 服务器(2 个 AD,2 个非 AD)验证我的用户
这是我web.config的一些部分:
<connectionStrings>
<!--<add name="ADConnectionString1" connectionString="LDAP://x01.x02.x03.x04:389/DC=NPAPAN,DC=local" />--> <!-- Active Directory in VPN1 -->
<add name="ADConnectionString4" connectionString="LDAP://y01.y02.y03.y04:389/DC=corporate,DC=mycompany,DC=com"/> <!-- Active Directory in VPN2 -->
<!--<add name="ADConnectionString2" connectionString="LDAP://ldap.forumsys.com:389/dc=example,dc=com"/>--> <!-- LDAP server 1 public -->
<!--<add name="ADConnectionString3" connectionString="LDAP://zflexldap.com:389/dc=example,dc=com"/>--> <!-- LDAP server 1 public -->
</connectionStrings>
...
<authentication mode="Forms">
<forms
name=".ADAuthCookie"
timeout="10" requireSSL="false" protection="None"/>
</authentication>
....
<membership defaultProvider="MyADMembershipProvider">
<providers>
<!--<add name="MyADMembershipProvider1"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
connectionUsername="NPAPAN\testadmin"
connectionPassword="zzzzzzz"
attributeMapUsername="sAMAccountName"/>-->
<add name="MyADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
connectionUsername="CORPORATE\_ADMIN_USER"
connectionPassword="cccccccc"
attributeMapUsername="sAMAccountName" />
<!--<add name="MyADMembershipProvider2"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
connectionUsername="cn=read-only-admin,dc=example,dc=com"
connectionPassword="password"
attributeMapUsername="uid" />-->
<!--<add name="MyADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString3"
connectionUsername="cn=ro_admin,ou=sysadmins,dc=zflexsoftware,dc=com"
connectionPassword="zflexpass" />-->
</providers>
</membership>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
...
我使用的代码是示例应用程序链接上使用的代码。
A) 如果是 VPN Active Directory 服务器
我可以通过 LDAP 浏览器使用上面代码中列出的信息(LDAP url、端口、基本 DN、connectionUsername、connectionPassword)来浏览 AD。
在 IIS Web 应用程序中,我只能为 VPN 1 Active Directory 绑定和验证用户。
如果是 VPN 2 Active Directory,我会得到:
无法与服务器建立安全连接
B) 如果是公共 LDAP 服务器 (v3)
我无法在这两种情况下绑定 + 验证用户,接收:
无法与服务器建立安全连接
在这两种情况下,LDAP 服务器都使用非 AD 标准对象属性,如下所示:
所以在第一种情况下,我尝试通过以下方式映射用户登录名:
attributeMapUsername="uid"
显然它不起作用。
我的问题如下:
A) 在我无法绑定到 VPN2 AD 的第二种情况下,我可以 ping 和远程登录 AD 控制器。我还可以使用 LDAP 浏览器连接到 AD 控制器。我想知道 AD 控制器或其他东西是否会阻止来自本地 IIS 的请求。发生了什么?
B) 我可以使用ActiveDirectoryMembershipProvider 绑定和使用所有类型的LDAP V3 服务器吗?
如果是这样,我在这里错过了什么?
【问题讨论】:
标签: c# asp.net vb.net authentication active-directory