Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 用于多个域的Active Directory身份验证WCF服务-如何?_.net_Wcf_Active Directory - Fatal编程技术网

.net 用于多个域的Active Directory身份验证WCF服务-如何?

.net 用于多个域的Active Directory身份验证WCF服务-如何?,.net,wcf,active-directory,.net,Wcf,Active Directory,我正在开发一个WCF服务(外部不可用),该服务将针对.NET 2.0 WinForm应用程序用户的两个域中的Active Directory对用户进行身份验证。身份验证部分大部分工作正常,但我在修改Active Directory时遇到了一些问题。以下是有关情况和要求的基本信息 我们应用程序的一些外部用户将登录到DMZ内不同域上的Citrix服务器。这是他们唯一一次必须输入凭据。因此,必须将该域中经过身份验证的用户视为已通过身份验证,并根据用户ID加载应用程序权限 DMZ域和我们的内部域之间建立

我正在开发一个WCF服务(外部不可用),该服务将针对.NET 2.0 WinForm应用程序用户的两个域中的Active Directory对用户进行身份验证。身份验证部分大部分工作正常,但我在修改Active Directory时遇到了一些问题。以下是有关情况和要求的基本信息

  • 我们应用程序的一些外部用户将登录到DMZ内不同域上的Citrix服务器。这是他们唯一一次必须输入凭据。因此,必须将该域中经过身份验证的用户视为已通过身份验证,并根据用户ID加载应用程序权限
  • DMZ域和我们的内部域之间建立了单向信任关系
  • 大多数外部用户在其计算机上安装应用程序。我们使用.NET远程处理从应用程序连接到服务器。身份验证是通过远程处理存储在域上的SQL Server中的信息来验证用户ID/密码
  • 在我们的领域中,内部用户也会遇到类似的情况。他们将启动应用程序,不需要输入任何凭据,前提是他们已登录
  • 所有用户(无论是否为Active Directory)仍然设置在我们的表中,这是存储权限管理信息的地方。用户表上有一个标志,指示用户是否为AD用户,字段指示其域和AD用户ID(如果不同于原始ID)
  • 如果用户在外部域或内部域的Active Directory中设置,如果他们运行安装在当前不在域中的计算机上的应用程序(即,从路上的笔记本电脑),他们将根据Active Directory进行身份验证。#2中处理身份验证的远程对象连接到WCF服务以获得身份验证
  • 这同样适用于我们网站(使用相同凭据)的用户。如果他们被标记为Active Directory用户,他们将根据Active Directory进行身份验证,而不是我们的正常系统
  • 某些具有正确权限的内部用户需要能够在Active Directory中设置用户、修改用户、解锁用户以及启用/禁用用户-仅在外部域中
  • 我的主要问题是:

  • WCF服务应该位于哪个域:外部还是内部
  • 该服务应该在哪个用户下运行才能完成上述所有操作,即外部\SVC-ADAuthentication、内部\SVC-ADAuthentication或其他操作
  • 根据我的测试:

  • 当我在External as External\SVC ADAuthentication上运行服务时,我可以修改AD信息并针对外部域进行身份验证。针对内部域的身份验证失败,原因是“从服务器返回了引用”
  • 外部作为内部\SVC ADAuthentication:我可以对两个域进行身份验证,但不能修改外部域上的用户
  • 内部作为内部\SVC ADAuthentication:我只能对内部域进行身份验证
  • 内部作为外部\SVC ADAuthentication:不会运行(我假设是因为单向信任关系)

  • 如果你从原则的角度看问题

    • 您不希望外部域能够访问内部域
    • 内部域可以访问外部域
    因此,您需要在内部域和外部域之间创建单向信任


    将外部用户可以访问的所有服务放在外部域上。

    为什么不使用WIF?我不太熟悉这一点,但它看起来需要一个额外的服务器来承载安全令牌服务,并且还需要.NET3.5。我们的应用程序仍然是.NET2.0,这意味着我必须使用basicHttpBinding从远程数据对象连接到WCF服务。要正确地实现这一点,还需要对我们的身份验证/安全例程进行大量的重写,这在目前是不可能的。这基本上就是我所拥有的。我们在内部和外部域之间建立了单向信任。我在外部域中运行该服务最为成功。但是,1)如果我在外部域中的外部域帐户下运行服务,我无法针对内部域进行身份验证2)如果我在外部域中的内部域帐户下运行服务,我无法修改外部域中的Active Directory