【问题标题】:Windows system credentials in Go HTTP NTLM requestsGo HTTP NTLM 请求中的 Windows 系统凭据
【发布时间】:2017-03-15 17:20:46
【问题描述】:

我正在寻找使用调用应用程序的 Windows 用户的系统凭据在 Go HTTP 请求中进行 NTLM 身份验证阻力最小的路径。

在 C#/.NET 中,我可以通过

WebRequest request = WebRequest.Create(url);
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response = request.GetResponse();
Stream receiveStream = response.GetResponseStream();

而在Python中,可以通过

得到等价的结果
import win32com.client
h = win32com.client.Dispatch('WinHTTP.WinHTTPRequest.5.1')
h.SetAutoLogonPolicy(0)
h.Open('GET', url, False)
h.Send()

但是我还没有找到任何关于如何在 Go 中做同样事情的资源。我当然可以使用一个库进行 NTLM 身份验证并手动提供用户名/密码,但这里的目标是避免将它们放入。

【问题讨论】:

    标签: http go ntlm


    【解决方案1】:

    在深入研究之后,看起来go-ole 可以像问题中的 Python 示例一样用于使用WinHTTPRequest。忽略所有错误捕获,

    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())
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 2021-04-28
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多