Go HTTP 请求中使用系统凭证进行 NTLM 身份验证
作为开发者,您可能会遇到需要发出 HTTP 请求并进行身份验证的场景使用运行应用程序的用户的系统凭据。在 Windows 环境中,这可以使用 NTLM(协商令牌级别消息)身份验证来完成。虽然 C# 和 Python 都有可用的解决方案,但 Go 中的实现不太简单。
使用 Go-ole 的解决方案
经过研究,我们发现go-ole 库提供对 WinHTTPRequest 接口的访问,该接口可用于使用系统凭据执行 NTLM 身份验证。以下是实现此目的的方法:
<code class="go">package main import ( "fmt" ole "github.com/go-ole/go-ole" "github.com/go-ole/go-ole/oleutil" ) func main() { ole.CoInitialize(0) defer ole.CoUninitialize() unknown, _ := oleutil.CreateObject("WinHTTP.WinHTTPRequest.5.1") request, _ := unknown.QueryInterface(ole.IID_IDispatch) oleutil.CallMethod(request, "SetAutoLogonPolicy", 0) oleutil.CallMethod(request, "Open", "GET", "http://example.com", false) oleutil.CallMethod(request, "Send") resp := oleutil.MustGetProperty(request, "ResponseText") fmt.Println(resp.ToString()) }</code>
此代码初始化 ole 库并创建一个 WinHTTPRequest 实例。调用 SetAutoLogonPolicy 方法以启用系统凭据的使用。然后,使用 Open 和 Send 方法发送请求。最后,使用 ResponseText 属性获取响应文本。
结论
使用 go-ole 库,您可以利用 WinHTTPRequest 接口与系统执行 NTLM 身份验证Go 中的凭据,为 Windows 环境中的 HTTP 请求提供无缝方法。
以上是如何在 Go HTTP 请求中使用系统凭证实现 NTLM 身份验证?的详细内容。更多信息请关注PHP中文网其他相关文章!