4

我的项目涉及一个用户从客户端连接到 Web 服务,然后将 Web 服务连接到 SQL Server。Web 服务和 SQL Server 位于不同的计算机上。由于安全要求,我们不能在 SQL Server 中使用混合模式,只能使用 Windows 身份验证。

我们遇到了 Web 服务和 SQL Server 之间的“双跳”问题。我们正在使用 NTLM 身份验证,并且由于开销和学习曲线的原因不想配置 Kerberos 我们也不希望将 Web 服务和 SQL Server 放在同一台机器上。

据我了解,我们所有的要求都使这种情况无法解决。但是,一位开发人员提出了这个建议:

1)在SSL加密下从客户端发送windows用户名和密码到web服务

2) 以某种方式将 Windows 用户名和密码转换为可以由 SQL Server 进行身份验证的安全令牌

打个比方,当连接到 SQL Server 时,听起来我们会在 C# 代码中执行 RUNAS。Web 服务没有身份验证,只能通过 SQL Server。

我的问题:

1)建议的解决方案是否可行?

2)如果是这样,它会怎么做?

3) 有任何网络资源可以帮助我了解如何完成吗?

4

2 回答 2

4

不,这是不可能的。客户端进程无权访问用户密码,因此无法将其发送到 Web 服务层。客户端必须明确地向用户询问其密码。如果客户端进程有密码并愿意将其发送到 Web 服务,那么理论上,WebService 可以为该用户/密码创建一个令牌(使用LogonUser),然后使用该令牌连接到 SQL Server。这个所谓的解决方案充满了不值得讨论的多个安全问题。如果您的团队坚持这样做,请创建一个网络服务,让团队成员连接到它,一旦您掌握了他的凭据(他会将他的密码发送给您的服务,还记得吗?)连接到交换服务器并向 CEO 发送一封带有文本“解雇我,我是白痴”的邮件。或者在 HR 中更改他的直接存款银行和账户。发挥你的想象力......我希望现在更清楚为什么沿着你提议的道路走是一个非常糟糕的主意

只需使用 Kerberos。

顺便说一句,如果由于政府法规您需要对后端进行身份验证,请记住,身份验证和审核始终带有“不可否认”要求,并将密码发送到 Web 服务,以便它公然对您进行身份验证与该要求相矛盾,因为 Web 服务可以执行任何它想要伪装成用户的操作。这就是 Kerberos 委派是受约束的委派。

于 2010-06-25T01:27:22.487 回答
0

这是做不到的。想一想,如果应用程序可以简单地以这种方式生成安全令牌,那会有什么好处?您将需要 Kerberos 来克服这个问题。

编辑:runas 类比也不适用于客户端尝试连续验证到两个系统的情况,因为 runas 只需要一个跃点,即使您切换用户也是如此。

于 2010-06-25T00:39:59.433 回答