Go HTTP 请求中使用系统凭证进行 NTLM 身份验证
作为开发者,您可能会遇到需要发出 HTTP 请求并进行身份验证的场景使用运行应用程序的用户的系统凭据。在 Windows 环境中,这可以使用 NTLM(协商令牌级别消息)身份验证来完成。虽然 C# 和 Python 都有可用的解决方案,但 Go 中的实现不太简单。
Go-ole 解决方案
经过研究,我们发现go-ole 库提供对 WinHTTPRequest 接口的访问,该接口可用于使用系统凭据执行 NTLM 身份验证。实现此目的的方法如下:
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())
}
此代码初始化 ole 库并创建一个 WinHTTPRequest 实例。调用 SetAutoLogonPolicy 方法以启用系统凭据的使用。然后,使用 Open 和 Send 方法发送请求。最后,使用 ResponseText 属性获取响应文本。
结论
使用 go-ole 库,您可以利用 WinHTTPRequest 接口与系统执行 NTLM 身份验证Go 中的凭据,为 Windows 环境中的 HTTP 请求提供无缝方法。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3