c++ - Web 服务器端应用程序的 NTLM 身份验证

标签 c++ c ntlm http-authentication

我用 C++ 编写的基于 Windows 的应用程序(基本上是一个 HTTP/1.1 代理服务器)监听来自不同用户的请求。 目前它能够发送 407 Basic Challenge,并处理来自 Headers 的响应。 我知道我必须修改质询 header ,以便客户端浏览器做出基于 NTLM 的响应以进行身份​​验证。但我的问题是 - 如何为 407 身份验证质询生成正确的 token 、随机数等,然后如何验证收到的响应是否正确?最后,如果可能的话,我想记录客户的用户名和其他 LDAP/ADS 属性。

请善待,如果已经有讨论类似内容的主题,请将我重定向到正确的帖子。对 WWW 的大多数研究只将我引向客户端编程,很少或几乎没有 - 对于必须在 HTTP 服务器中完成的编码。

这里所有伟大的黑客,提前非常感谢。

最佳答案

简短的回答是我认为这 Using SSPI with a Windows Sockets Server样本 是您最好的起点,它应该演示您需要的基本 SSPI 调用。它是为普通 TCP 服务器编写的,但挑战/响应数据是通过 HTTP 发送的,没有太多额外的复杂性。

[MS-N2HT]: Negotiate and Nego2 HTTP Authentication Protocol

我支持审查的建议 the mod_auth_sspi for Apache code

就个人而言,我也会尝试将低级调试器附加到 IIS,看看他如何调用 SSPI 函数,但这可能不适合您。

在您对 SSPI 有了一定的了解之后,获取用户名应该是小菜一碟(但询问您是否需要帮助)。可以使用这些 API 查询用户的 LDAP/AD 属性。

长答案涉及少量阅读:

Integrated Windows Authentication in Wikipedia

SPNEGO-based Kerberos and NTLM HTTP Authentication in Microsoft Windows

HTTP-Based Cross-Platform Authentication via the Negotiate Protocol (Part 1 of 3)

第 3 部分也有一些有趣的代码示例。

希望这对您有所帮助!

关于c++ - Web 服务器端应用程序的 NTLM 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1170290/

相关文章:

c++ - 等待 COM 端口上的数据?

c - 处理作为输入接收的数学运算

c - Ubuntu 中的 skbuff.h 文件在哪里?

java - HttpClient 4.1.1 在使用 NTLM 进行身份验证时返回 401,浏览器工作正常

android - 如何在 Android 上永久设置凭据持久性

c++ - 如何处理这些旧式类型转换?

c++ - 为什么library API + compiler ABI就足以保证不同版本gcc对象之间的兼容性?

c++ - 将字符转换为字节 C++

c - 如何使用c找到DFS中的组件数量?

java - 使用 vbscript/java 在 NTLM 身份验证后自动下载动态生成的文件