gpt4 book ai didi

c++ - 允许在没有 Active Directory 信任的情况下进行 winhttp 委派

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:10 28 4
gpt4 key购买 nike

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

我已经使用 kerberos MIT 版本的 GSoap 和 GSS-API 完成了它;但我希望使用 winHTTP 来处理身份验证。

但是,当我尝试将 winHTTP 与 GSOAP WINHTTP PLUGIN(code.google 上的 gsoapwinhttp)一起使用时,委托(delegate)被域 Controller 阻止。我想保留此 Active Directory 配置:

Active Directory configuration picture

当我查看 GSS-API kerberos 票证时,我发现了几个允许委托(delegate)的标志,例如 fowardable 或 deleg_req_flag:

Wireshark forwadable flag

所以我的问题是:我可以在不更改域 Controller 配置的情况下修改 winHTTP 标志以允许委派吗?

编辑:

我在 setCredentials 中使用选项 WINHTTP_AUTH_SCHEME_NEGOTIATE 并在 setOption 中使用 WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW 以确保使用 Microsoft 网站中指定的 Kerberos 或 NTLM WinHttpSetCredentials .

我使用 Fiddler 检查了 HTTP 连接,它正在使用 Kerberos,但我仍然无法委托(delegate)给我的下一个服务器。

我尝试使用 setOption 的几乎所有可能选项,例如 WINHTTP_ENABLE_SSL_REVERT_IMPERSONATION 或所有看起来像委托(delegate)的选项,但在使用此选项时出现奇怪的错误:

End of file or no input: message transfer interrupted or timed out (629s recv send delay)

我尝试设置不同的 recv_timeout 但仍然是同样的错误。

.

最佳答案

我研究过这种 问题很多。您遇到了 Kerberos 双跃点问题。在那您提供的配置屏幕截图,您必须配置委派;现在委托(delegate)还没有设置。要尝试的第一项是开放委派,为此选择单选按钮:信任这台计算机以委派任何服务(仅限 Kerberos)。您在需要使用客户端凭据连接 SQL 服务器的 AD 中的计算机帐户上设置此项 - 而不是在域 Controller 帐户上。如果您的应用程序实际上在域 Controller 上运行,那么这是一个已知问题和不受支持的配置,将无法正常工作 - 请将应用程序移动到域的成员服务器。

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

在您的方案中,您必须在运行 WinHTTP 进程的计算机帐户上设置 Kerberos 委托(delegate),在下面显示的示例中,这将是“Server1”。

Simple Kerberos delegation scenario

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

关于c++ - 允许在没有 Active Directory 信任的情况下进行 winhttp 委派,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45298143/

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