首页 >后端开发 >Golang >如何在 Go HTTP 请求中使用系统凭证实现 NTLM 身份验证?

如何在 Go HTTP 请求中使用系统凭证实现 NTLM 身份验证?

Barbara Streisand
Barbara Streisand原创
2024-10-30 02:43:291080浏览

How to Achieve NTLM Authentication with System Credentials in Go HTTP Requests?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn