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

时间:2009-07-31 11:57:24

标签: asp.net web-services active-directory

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

  1. 用户在外部网站的登录表单中输入用户名/密码。
  2. 外部网站调用局域网内可与A / D通信的网络服务。
  3. webservice检查是否可以将用户名/密码映射到A / D中的用户。如果是,请返回用户所属的A / D角色列表。
  4. 如果无法通过A / D找到/验证用户名/密码,请检查作为用户/角色信息的辅助存储库的数据库/服务。如果他们针对辅助身份验证服务器进行身份验证,则返回其使用的所有角色。
  5. 将用户所在角色列表返回给主叫网站。
  6. ***我们的想法是,当他们只登录我们的外部Web服务器时,我们不希望将数十个(可能是数百个)承包商和附属公司放入Active Directory。因此,二次授权计划。

3 个答案:

答案 0 :(得分:1)

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

如何从DMZ进入局域网内的Web服务?  这是一个艰难的,因为它真的打破了DMZ / LAN分离的概念。通常LAN和DMZ之间的连接只允许(并且在有限的基础上)从LAN侧 - 这样一个被压缩的DMZ不能启动与LAN的联系,并且它的功能受到极大的限制(它不能发布)任意请求,仅响应来自LAN的请求。)

如何在另一台计算机上使用服务来验证用户名/密码?
同样,这是一个棘手的问题 - 您通过网络传递密码 - 它们是否可能被截获。使用AD,这可以通过kerberos解决 - 这是一个挑战/响应系统,可确保密码永远不会实际传输。当然kerberos和类似的protocals是相当复杂的 - 你永远不应该尝试自己动手,因为它可能不那么安全,然后使用现有的东西 - 例如你的web服务可以在https上运行,所以至少密码只是明文密码两台服务器,而不是中间的通信链路。证书还可用于防止用于LAN Web服务的流量被重新路由到已编译的DMZ计算机(被压缩的DMZ计算机将无法伪造证书,因此您的系统可以确定它之前已连接到虚假服务器发送身份验证的详细信息)

根据我自己的经验,这些问题会导致局域网外的AD无法完成。公司选择使用通过RSA密钥验证的VPN(那些显示不断变化的数字的小钥匙链)来获取LAN上的外部人员,或者他们使用完全独立的登录集来进行DMZ区域服务。

答案 1 :(得分:1)

你可能想看看这两个资源。第一个将为您提供有关活动目录的所有信息,第二个将向您展示如何连接。

但是,您可能遇到连接到远程AD服务器的挑战。因此,作为潜在的解决方案,我会考虑让Web应用程序调用驻留在公司网络上的身份验证Web服务。

答案 2 :(得分:0)

您可以通过为承包商/附属机构提供不同的登录门户来简化此操作。