http - Go HTTP NTLM 请求中的 Windows 系统凭据

标签 http go ntlm

我正在寻找使用调用应用程序的 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 身份验证并手动提供用户名/密码,但这里的目标是避免将它们放入。

最佳答案

进一步深入研究后,看起来 go-ole 可以用来利用 WinHTTPRequest与问题中的 Python 示例相同。忽略所有错误捕获,

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

关于http - Go HTTP NTLM 请求中的 Windows 系统凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42816600/

相关文章:

forms - 从 HTTP POST 调用下载 PDF

json - Golang UnmarshalTypeError 缺少偏移量

go - 发送带有请求正文的 POST 请求,就像字符串一样

.net - 如何将 .NET WebSocket 客户端与 NTLM 代理结合使用?

java - 使用 SSL 加密和 NTLM 身份验证的 HttpClient 失败

authentication - 将 Tomcat NTLM 与 Spring Security 结合使用

sockets - 301 与 socket.http 永久移动

javascript - window.opener.document.getElementById ("parentId1").value = myvalue 不起作用

iphone - NSURLConnection 和 "chunked"传输编码

map - 无法从 map 分配给结构成员