C++ 允许不带Active Directory信任的winhttp委派

C++ 允许不带Active Directory信任的winhttp委派,c++,delegates,kerberos,delegation,winhttp,kerberos-delegation,active-directory,C++,Delegates,Kerberos,Delegation,Winhttp,Kerberos Delegation,Active Directory,我正在双跳场景中使用kerberos身份验证开发一个应用程序:客户端正在连接到服务器,而服务器需要使用客户端的凭据来连接SQL server 我已经使用kerberos MIT版本中的GSoap和GSS-API完成了这项工作;但是我希望使用winHTTP来处理身份验证 然而,当我尝试将winHTTP与GSOAP winHTTP插件(code.google上的gsoapwinhttp)一起使用时,委派被域控制器阻止。我想保留此Active Directory配置: 当我查看GSS-API ker

我正在双跳场景中使用kerberos身份验证开发一个应用程序:客户端正在连接到服务器,而服务器需要使用客户端的凭据来连接SQL server

我已经使用kerberos MIT版本中的GSoap和GSS-API完成了这项工作;但是我希望使用winHTTP来处理身份验证

然而,当我尝试将winHTTP与GSOAP winHTTP插件(code.google上的gsoapwinhttp)一起使用时,委派被域控制器阻止。我想保留此Active Directory配置:

当我查看GSS-API kerberos票证时,我发现了几个允许委派的标志,如fowardable或deleg_req_标志:

因此,我的问题是:我可以修改winHTTP标志以允许委派而不更改域控制器的配置吗?

编辑:

我正在使用setCredentials中的
WINHTTP\u AUTH\u SCHEME\u congregate
,以及setOption中的
WINHTTP\u AUTOLOGON\u SECURITY\u LEVEL\u LOW
,以确保使用Microsoft网站中指定的Kerberos或NTLM

我使用Fiddler检查了HTTP连接,它使用的是Kerberos,但我仍然无法委托给下一台服务器

我尝试使用几乎所有可能的setOption选项,如
WINHTTP\u ENABLE\u SSL\u REVERT\u IMPERSONATION
或任何看起来像委派的选项,但使用此选项时我出现了一个奇怪的错误:

文件结束或无输入:消息传输中断或超时(629s recv发送延迟)

我试图设置不同的recv_超时,但仍然是相同的错误

.

我对这类问题研究了很多。您遇到了Kerberos双跳问题。在您提供的配置屏幕截图中,您必须配置委派;目前未设置授权。要尝试的第一项是打开委派,为此,请选择单选按钮:信任此计算机以委派给任何服务(仅限Kerberos)。您在AD中需要使用客户端凭据连接SQL server的计算机帐户上设置了此项,而不是在域控制器帐户上。如果您的应用程序实际运行在域控制器上,那么这是一个已知问题,并且不支持的配置将不起作用-请将应用程序移动到域的成员服务器

关于那些允许委托的标志,例如fowardable或deleg_req_标志,显示为在Fiddler跟踪中设置,我不确定为什么它们显示为set,但它们可能是从错误的帐户设置的。从您发布的屏幕截图的帐户中,根本没有配置Kerberos委派

在您的场景中,必须在运行WinHTTP进程的计算机帐户上设置Kerberos委派,在下面的示例中,该帐户将是“Server1”

在该帐户的Kerberos委派属性中,您可以指定开放委派(如上所述的顶部单选按钮)或对Server2上的进程的受约束委派,Server1可以将用户凭据转发到该进程(Kerberos服务票证)