在分布式应用程序体系结构中使用集成 Windows 身份验证 (IWA)






4.65/5 (6投票s)
本文解释了如何使用 IWA 来改善您的用户体验,并阐述了它如何使您的 IT 支持团队受益。
引言
我从事企业级应用程序工作多年,一直惊讶于用户在同一域中经常被迫多次登录不同的应用程序。
从用户体验的角度来看,这是一个令人烦恼的情况。使用集成 Windows 身份验证 (IWA) 可以避免此问题并实现单点登录。
仅此一点就足以成为使用 IWA 的理由,但从 IT 支持的角度来看,您还可以获得以下好处:
- 它可以避免在数据库、注册表设置、配置文件中,甚至应用程序代码中硬编码管理员密码!
- 它可以避免维护多个用户表的噩梦
此外,它还可以避免限制对 Web 服务的访问 – 责任在于用户对数据的访问,而不是对 Web 服务的访问。Web 服务仍会从数据层返回访问异常。这基于 Web 服务纯粹是数据传输机制(如在 SOA 中经常出现的情况),并且不实现任何业务规则的场景,因此访问变得无关紧要。
本文的重点是解决在涉及至少一个服务器“跳”(即服务器到服务器通信)的架构中使用 IWA 时出现的“双跳”问题。
此解决方案假定每个应用程序都有自己的 AD 组。每个应用程序 AD 组将包含允许访问该应用程序的用户。在此示例中,我们使用一个名为 Domain\ClearAppMapping 的 AD 组的映射应用程序。
目前适用于以下架构:
- Windows 客户端应用程序 [客户端] --> ASP Web 服务 [服务器 1] --> SQL Server 数据库 [服务器 2]
将来会包含一个非常相似的更新,适用于以下架构:
- ASP.NET 网站 [服务器 1] --> ASP Web 服务 [服务器 2] --> SQL Server 数据库 [服务器 3]
- Silverlight [客户端 1] --> WCF [服务器 2] --> SQL Server 数据库 [服务器 3]
访问 Active Directory(AD) 和 IIS 需要管理权限。
Windows 客户端应用程序 [客户端]
流程的第一阶段是从客户端应用程序传递凭据。
 
 
客户端应用程序需要一个 Web 引用作为相应 Web 服务的代理。在此示例中,我们有一个控制器项目来控制数据的检索 [如模型-视图-控制器模式]。如果您不以这种方式拆分代码,那么您将在 EXE 项目中执行此操作。
在相应的控制器中,我们需要添加一行代码来告诉 Web 服务使用默认凭据,即当前用户。这是下面示例中的 UseDefaultCredentials = true; 行
 
 
ASP Web 服务 [服务器 1]
流程的第二阶段是确保客户端凭据在第一个服务器上收到。为此,我们需要对 Web 服务的配置文件进行一些更改
 
 
我们告诉 Web 服务使用 Windows 身份验证模式,这是默认设置。
我们还必须告诉 Web 服务使用模拟。这会告诉 Web 服务使用它已传递的凭据,而不是默认的 IIS 用户,进行通信的下一部分。
Web 服务服务器需要能够与数据库服务器通信。为此,我们需要使此服务器可信,即允许它请求来自另一台计算机的服务。为此,我们需要在 AD 中找到相应的服务器并设置以下属性
 
 
在 IIS 中,我们需要从安全设置中删除匿名访问。为此,请在 IIS 中选择 Web 服务。
 
 
右键单击,选择属性并选择“目录安全”选项卡。
 
 
单击“匿名访问和身份验证控制”组框上的“编辑”,并取消选中“匿名访问”复选框,确保只选择了 IWA。
 
 
注意
值得注意的是,通过使用模拟,我们限制了应用程序连接池的优势,因为每个连接字符串都将不同。如果我们为每个调用使用相同的凭据,即相同的连接字符串,那么将实现池化,并且(理论上)只使用一个连接。
我的 DBA 告诉我这不是问题,因为 SQL 连接是无限的,并且您只受数据库所在服务器上的资源限制。
因此,这种架构的可伸缩性较低,在处理高用户、高事务应用程序时,可能值得考虑采用不同的机制——您可能需要考虑使用服务帐户来为您管理服务器跳。这可能涉及硬编码用户帐户和密码,如下所示:
 
 
SQL Server 数据库 [服务器 2]
流程的第三阶段是接收凭据,然后允许用户访问底层数据。
我们编写的任何应用程序都不应直接访问数据。所有数据访问都应通过存储过程进行。这使我们的数据能够得到适当的保护。
在设置 SQL Server 方面,我们需要根据应用程序的 AD 组创建一个用户
 
 
我们还需要为这个应用程序创建一个数据库角色
 
 
此角色将包含 AD 组作为其成员
 
 
然后,您将此角色应用于用于应用程序的存储过程。切勿直接授予用户对数据库的访问权限!
就是这样。您的用户应该只需要登录操作系统即可(安全地)使用其应用程序。
关注点
注意:当您在多个 AD 林中有用户,且这些林的版本不同时,IWA 可能无法正常工作。我已经使用 Server 2000 林和 Server 2003 林测试了这一点。
一个例子是如果您以不同的速率将用户移植到新的 AD。这意味着您可能有 10 个来自 2003 林的用户和 10 个来自 2000 林的用户。新林中的用户将无法访问数据,因为他们的凭据不会从服务器传输到服务器。
历史
- 2011 年 10 月 11 日:初次发布

