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

标签 asp.net web-services active-directory

我有一些工作网站位于公司 LAN 之外——因此,超出了 Active Directory (A/D) 的直接通信范围——但我希望能够针对这些网站对用户进行身份验证公司 A/D 服务器以及用户/角色的辅助存储库***。这个事件的伪代码是这样的:

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

  • *** 我们的想法是,我们不希望将数十个(可能是数百个)承包商和附属公司放入 Active Directory,因为他们只会登录到我们的外部 Web 服务器。因此,二级身份验证方案。

    最佳答案

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

    如何从 DMZ 访问 LAN 内的 Web 服务?
    这是一个艰难的过程,因为它确实打破了 DMZ/LAN 分离的概念。通常 LAN 和 DMZ 之间的连接只允许(并且在有限的基础上)从 LAN 端 - 这样一个受损的 DMZ 无法启动与 LAN 的联系,并且它可以做的事情受到极大限制(它不能发出任意请求,只响应来自局域网的请求)。

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

    以我自己的经验,这些问题导致局域网外的 AD 无法完成。公司选择使用通过 RSA key (显示一组不断变化的数字的小 key 链)进行身份验证的 VPN 让 LAN 上的外部人员,或者他们为 DMZ 区域服务使用一组完全独立的登录名。

    关于asp.net - 如何从 ASP.NET Web 服务代码对 Active Directory 进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1212138/

    相关文章:

    c# - .NET Core Razor C# 函数

    java - Tomcat 设置问题

    web-services - 绑定(bind)和代理 IIS 和 Tomcat 参数不起作用

    active-directory - UserPrincipal 相当于 DirectoryEntry.Invoke?

    c# - 将 C# 与 Active Directory 教程结合使用

    c# - 将 DocumentDB 与表单例份验证和角色结合使用

    javascript - 使用 jquery/js 将 html 元素显示为带有暂停的序列

    web-services - 如何改进 Perl Dancer 应用程序中的身份验证

    php - 为什么 (mono) asp.net 比 php 慢?

    c# - SOAP 扩展实现