繁体   English   中英

用于 Windows 窗体应用程序的基于 VPN 的 Windows 身份验证

[英]Windows Authentication over VPN for Windows Form Application

我为客户端创建了一个 WinForms 应用程序,它使用集成安全性连接到 SQL Server。 客户抱怨他们收到错误 - “无法生成 SSPI 上下文。” 事实证明,他们试图通过不属于域的计算机上的 VPN 连接到 WinForms 应用程序。 如果我将连接字符串更改为使用 SQL 用户,则该程序可以运行,但我会丢失可以从 Windows 身份获取的信息。 我的问题是,我是否能够使此设置正常工作,或者我是否需要找到其他方法来使程序通过 VPN 工作。 谢谢。

韦德

正如您所说,计算机不是 AD 域的一部分。 如果您的计算机不是域的一部分,则本地用户帐户是唯一可用于登录的帐户。 (登录到本地系统)。 并且您不能被授权使用具有这些本地凭据的域资源。 当您的计算机是域的一部分时,您可以使用域帐户或本地用户帐户登录。 所以问题不太可能是 VPN:通常 VPN 可以配置为客户端成为远程子网的一部分。 “由于两个网络之间的 OpenVPN 隧道连接,坐在子公司办公室计算机前的用户可以访问总部的服务器,就像他在那里一样。” 假设如上所述配置了网络 - 当您的计算机被添加到 AD 域时,您将能够使用集成的 SQL Server 身份验证方法进行身份验证。 否则,只有 SQL Server 身份验证可用。 如果客户端机器是另一个域的一部分,那么管理员可以配置两个域之间的“信任关系”。 此处讨论此问题: 从非域计算机连接到域 SQL Server 2005

如果客户端属于一个 AD 域并且 SQL Server 实例使用来自另一个域的帐户运行,那么(我相信)最安全的解决方案是在域之间建立信任关系 - 可以像此处讨论的“跨域使用 Windows 身份验证的 SQL Server 登录”

将客户端机器添加到域或建立信任关系是简单的解决方案。 但有时解决问题需要大型(跨国)公司的太多批准。 如果客户端机器的用户使用来自其他域的帐户(或使用本地帐户)登录到他的机器,那么您仍然可以使用模拟解决解决方案 - 客户端进程应该使用来自 SQL Server 域的帐户进行身份验证/连接到 SQL Server。 查找详细信息: 您如何在 .NET 中进行模拟?

例如,假设 SQL Server 服务使用域 S 的帐户登录,并且授予域 S 用户的权限。但是由于某些原因,客户端无法使用域 S 的帐户登录本地操作系统,而使用域 C 的帐户登录操作系统(也许客户端主要使用域 C 中的资源)。 然后 WinForms 进程拥有来自域 C 的用户帐户的安全上下文。这个进程应该模拟自己并将安全上下文从域 S 切换到用户,然后使用集成身份验证连接到 SQL Server。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM