c# – 避免从客户端双向跳转> Web服务> SQL Server的解决方案

我的项目调用用户从客户端连接到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.只有通过SQL Server才能对Web服务进行身份验证.

我的问题:

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

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

3)任何网络资源,以帮助我了解如何做到这一点?

最佳答案
不,这是不可能的.客户端进程无权访问用户密码,因此无法将其发送到Web服务层.客户端必须明确询问用户的密码.如果客户端进程具有密码并且愿意将其发送到Web服务,那么理论上,WebService可以为该用户/密码创建令牌(使用LogonUser),然后使用该令牌连接到SQL Server.这个所谓的解决方案充满了多种安全问题,不值得讨论.如果你的团队坚持要求,做一个这样做的网络服务,要求团队成员连接到它,一旦你拿到他的凭据(他会发送你的服务密码,记得吗?)连接到交换服务器和发送邮件给首席执行官,上面写着“火我,我是白痴”.或者在HR中更改他的直接存款银行和帐户.用你的想象力…我希望现在更清楚一点为什么走下你提出的道路是一个非常糟糕的主意.

只需使用Kerberos.

顺便说一句,如果由于政府监管需要对后端进行身份验证,请记住,身份验证和审计总是带有“不可否认性”要求,并将密码发送到Web服务,以便对您进行明确的身份验证与此要求相矛盾,因为Web服务可以执行任何想要伪装成用户的操作.这就是Kerberos委托约束委托的内容.

转载注明原文:c# – 避免从客户端双向跳转> Web服务> SQL Server的解决方案 - 代码日志