【问题标题】:Pass current user credentials to remote server将当前用户凭据传递给远程服务器
【发布时间】:2010-01-21 04:59:36
【问题描述】:

我在远程机器上有一个应用程序服务器(Web 服务或远程处理,尚未决定),并且在同一个域上有一个客户端。我想将用户认证为服务器上的域用户。

我可以要求用户输入他们的 Windows 用户名/密码并将其发送到服务器并让服务器根据 Active Directory 检查它们,但我不想这样做。有什么方法可以让客户端发送某种令牌,然后服务器可以使用该令牌来识别哪个域用户正在向它发送请求?显然,我想保护服务器免受发送虚假用户 ID 和冒充其他用户的攻击。

澄清

计算机 A 上的客户端将与计算机 B 上的服务器通信。我想我可能会使用 .NET 远程处理进行这种通信。在服务器上,我只需要知道计算机 A 上用户的 ID;如果计算机 A 上的应用必须发送 ID,我需要确保它没有发送其他用户的 ID。

我不需要冒充其他用户,我只需要(确定地)知道它是谁。

【问题讨论】:

    标签: windows


    【解决方案1】:

    您是说客户端与您的服务器进行通信,并且您需要在第三台服务器上使用客户端的权限吗?该场景描述了The Double-Hop Problem。该博客最详细地描述了它,以及可以采取哪些措施来规避它(域修改)。

    [...] 如果您将网络设置为使用 Kerberos 并将有问题的 Web 服务器设置为受信任的委派,则您可以绕过该问题并使用适当的委派。

    添加:

    我知道您无法识别计算机 A 上的用户。如果只是执行您的程序的用户就足够了吗?您可以在域场景中使用 windows 身份验证,但这只会为您提供程序用于身份验证的权限,这可能与键盘前的实际邪恶用户不同。

    添加:

    您对这篇文章的 cmets 表明带有模拟的 Windows 身份验证对您有用。查看http://community.bartdesmet.net/blogs/bart/archive/2006/08/26/4277.aspx 获取代码示例。

    【讨论】:

    • 如果您选择使用 Kerberos 路线,请参阅 geeks.netindonesia.net/blogs/jimmy/archive/2008/02/29/… 以获取有关故障排除的提示。相信我,这有时会让人头疼:)。
    • 嗨,Simon,我只需要知道计算机 A 的登录信息,公司的政策是在您不坐在电脑前时锁定您的电脑,因此如果其他人使用它,那就另当别论了。我不想做的是像 ISession StartSession(string userName) 这样向服务器发送请求,因为任何人都可以编写一个简单的应用程序来发送他们喜欢的任何内容。我想要的是 ISession StartSession(SomeLoginToken user);我知道的东西不能伪造——只是想知道这是否可以做到? WPF 做到了我认为,但这是远程处理。
    猜你喜欢
    • 2015-11-15
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多