当创建一个HttpClient的示例时,你可以传递一个HttpClientHandler的示例来配置你希望客户机如何工作。其中一个选项是UseDefaultCredentials属性,它的目的是控制“默认凭据是否随处理程序的请求一起发送”。此目的通常归结为启用对需要NTLM身份验证的服务的请求,只需将其设置为“true”,它就会为您处理。
我想了解的是底层HTTP处理程序如何能够提供我的凭据(即作为登录用户),而不必通过用户名/密码对显式提供它们。当我查看添加了NTLM身份验证支持的非.NET库时(例如,axios-ntlm用于Node.js,python-ntlm用于Python),我看到他们支持协议本身,但没有做任何事情来获取当前用户的凭据。最终我想要的是神奇的“只是工作”客户端应用程序的NTLM身份验证经验,但不使用. NET。
在看了像我上面提到的库,以及挖掘了.NET runtime source(我的意思是它必须在那里的某个地方,对吗?),我到目前为止还不能理解这种魔力是如何实现的。
1条答案
按热度按时间h7appiyu1#
我想我已经了解了它的基本工作原理。它本质上是Win32 SSPI函数AcquireCredentialsHandle和InitializeSecurityContext的组合,前者可以提供当前登录用户的凭据的句柄,后者提供NTLM身份验证期间基于这些凭据使用的令牌。
我还没有把我的理解付诸实践,但这或多或少为我解开了谜团。