gpt4 book ai didi

c++ - 将 Windows 身份验证与 cpprestsdk 一起使用?

转载 作者:行者123 更新时间:2023-12-01 14:58:28 25 4
gpt4 key购买 nike

现在正在使用 WinHTTP,并希望切换到 cpprestsdk。我正在查看文档,但没有看到任何关于支持 NTLM/Negotiate/Kerberos 支持的信息。我错过了什么吗?我很难相信 MS 不会支持它,但我没有看到任何关于如何使用它的示例代码。

我们需要 NTLM/Negotiate/Kerberos 支持的原因是我们通过 RemoteApp 运行我们的客户端,并希望我们的用户在启动应用程序时只需使用他们的域凭据登录一次,而不是让用户提示输入密码第二次。

最佳答案

Windows 身份验证似乎很容易内置到 Casablanca 中(在 Windows 机器上使用时)。查看 src/http/client/http_client_winhttp.cpp。在那里你会找到一个函数“ChooseAuthScheme”。据我了解,这将选择服务器提供的“最安全”的身份验证方案。如果服务器 e。 G。声称同时支持“BASIC”和“NEGOTIATE”,它会更喜欢并选择后者作为更安全的方案。因此,使用 Widows 身份验证应该非常容易使用,只是不要设置任何凭据(用户名/密码)并尝试连接到支持 Windows 身份验证的服务器,并在 http“Authenticate” header 中宣布这一点(否则卡萨布兰卡将当然不要尝试使用 Windows 身份验证)。

但是我也在卡萨布兰卡尝试使用 Windows 身份验证,目前我面临两个问题:

  • 在我的场景中,Windows 身份验证的工作原理如上文所述。令人困惑的是,有时却并非如此。到目前为止,我可以在用户 Foo 登录的情况下从机器 A 连接到服务器,而我不能在用户 Bar 登录的情况下从机器 B 连接在在同一时间,所有机器都在同一个网段中,中间没有任何路由器或代理。从 Fiddler 日志我可以看到,如果发生故障,卡萨布兰卡会尝试在没有任何身份验证的情况下进行连接,然后从服务器接收到未经授权的 http 403(这是可以预料的并且完全没问题)但之后无法通过 NEGOTIATE 重新发送请求在标题中,它只是中止。相反,在成功的案例中, 重新发送凭据是 base64 编码的 blob(实际上具有二进制内容,大概只有 MS 知道它的含义)。我目前不清楚是什么触发了这种情况,为什么会发生这种情况以及如何解决这种情况。这很可能是卡萨布兰卡中的一个错误。
  • 我有一个特殊的场景,服务器具有混合操作模式,用户应该能够通过 BASIC 或 Windows 身份验证进行连接。让我们不要对以下场景和最佳实践的基本原理进行推理,我正在处理 IBM 的 TM1 数据库,这正是他们实现的。因此,基本身份验证和 Windows 身份验证允许的用户不一定重叠,一组必须通过 Windows 集成(比方说域用户)进行身份验证,而另一组必须使用基本身份验证(比方说外部用户)。到目前为止,我发现没有办法(不修补 Casablanca)将 SDK 限制在某种模式。如果服务器宣布 BASIC 和 NEGOTIATE,它将始终将 NEGOTIATE 切换为更安全的模式,使基本身份验证无法访问并有效地锁定 BASIC 组。因此,如果您有类似的情况,这对您来说同样可能是个问题,ChooseAuthScheme() 测试了几种不同的身份验证方法,NEGOTIATE、NTLM、PASSPORT、DIGEST,最后是 BASIC,并会顽固地选择第一个支持的方法客户端和服务器,丢弃所有其他选项。

关于c++ - 将 Windows 身份验证与 cpprestsdk 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58888391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com