如何从ASP.NET Web服务代码对Active Directory进行身份验证?

Mik*_* C. 9 asp.net web-services active-directory

我有几个网站用于公司局域网以外的工作 - 因此,在直接通信范围的Active Directory(A/D)之外 - 但我希望能够针对该网站对用户进行身份验证.企业A/D服务器以及用户/角色的辅助存储库***.此活动的伪代码是:

  1. 用户在外部网站的登录表单中输入用户名/密码.
  2. 外部网站在局域网内调用可与A/D通信的Web服务.
  3. Web服务检查是否可以将用户名/密码映射到A/D中的用户.如果是,则返回用户所属的A/D角色列表.
  4. 如果无法根据A/D找到/验证用户名/密码,请检查作为用户/角色信息的辅助存储库的数据库/服务.如果它们针对辅助身份验证服务器进行身份验证,则返回其使用的所有角色.
  5. 将用户所在角色列表返回给调用网站.

***我们的想法是,当他们只登录我们的外部Web服务器时,我们不希望将数十个(可能是数百个)承包商和附属公司放入Active Directory.因此,二次授权方案.

Dav*_*vid 1

我认为这里有几个层次,每一层都有自己的问题:

如何从 DMZ 访问 LAN 内的 Web 服务?
这是一项艰巨的任务,因为它确实打破了 DMZ/LAN 分离的概念。一般来说,LAN 和 DMZ 之间的连接只允许(并且在有限的基础上)从 LAN 端进行 - 这样,受损的 DMZ 就无法发起与 LAN 的联系,并且它可以执行的操作受到极大限制(它无法发出请求)任意请求,只响应来自局域网的请求)。

如何使用另一台计算机上的服务来验证用户名/密码?
这又是一个棘手的问题 - 您正在通过网络传递密码 - 它们是否有可能被拦截。对于 AD,这个问题可以通过 kerberos 来解决 - 一种质询/响应系统,可确保密码永远不会被实际传输。当然,kerberos 和类似的协议非常复杂 - 您永远不应该尝试自己构建,因为它可能不如使用现有的协议安全 - 例如您的 Web 服务可以在 https 上运行,因此至少密码只是明文两台服务器,而不是其间的通信链路。证书还可以用于防止用于 LAN Web 服务的流量被重新路由到受损的 DMZ 计算机(受损的 DMZ 计算机无法伪造证书,因此您的系统可以确定它在连接到伪造的服务器之前)发送详细信息以进行身份​​验证)

根据我自己的经验,这些问题会导致 LAN 之外的 AD 无法完成。公司选择要么让外部人员使用通过 RSA 密钥(那些显示一组不断变化的数字的小钥匙串)进行身份验证的 VPN,要么使用一组完全独立的登录名来访问 DMZ 区域服务。