gpt4 book ai didi

c# webclient NetworkCredentials 在 Nodejs 中

转载 作者:行者123 更新时间:2023-11-30 17:25:16 25 4
gpt4 key购买 nike

我有一个带有此代码的 c# .net 客户端:

using(WebClient client = new WebClient())
{
string serialisedData = "";
serialisedData = JsonConvert.SerializeObject(myData);
client.Credentials = new NetworkCredential(config.UserData.Username, config.UserData.Password);
byte[] responsebyte = client.UploadData(config.ServerAddress, System.Text.Encoding.UTF8.GetBytes(serialisedData));
}

该客户端将数据发送到我的 nodejs 服务器。 Node 代码:

var http = require('http');

var _server = http.createServer(_listener);
_server.listen(1234);

console.log( 'started' );

function _listener(req, res) {
let data = []
req.on('data', chunk => {
data.push(chunk)
})
req.on('end', () => {
data = Buffer.concat(data);
var dataString = new Buffer.from(data).toString("utf-8");
const data = JSON.parse(dataString);
// data has all the data from the c# object "myData"
res.write('response')
res.end()
})
}

但是我怎样才能访问此连接的凭据?


这是我在 C# 中访问凭据的方式:

HttpListener listener = new HttpListener();
listener.Prefixes.Add($"https://+:{Config.Port}/");
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
listener.Start();
for (; ; )
{
Console.WriteLine("Listening...");
IAsyncResult result = listener.BeginGetContext(new AsyncCallback(DoWork), listener);
result.AsyncWaitHandle.WaitOne();
result = null;
}

private void DoWork(IAsyncResult asyncResult)
{
HttpListener listener = (HttpListener)asyncResult.AsyncState;
HttpListenerContext context = listener.EndGetContext(asyncResult);
HttpListenerBasicIdentity identity = (HttpListenerBasicIdentity)context.User.Identity;
// identity has the credentials

}

编辑:我不能再更改 C# 代码了。所以只需要nodejs解决方案

Edit2: header 也没有 Auth 或 Authentification 属性......

Edit3:我什至找不到除了凭据/身份验证 header 之外是否存在其他位置。但这一定是可能的吧?我的意思是 C# 可以从某个地方以某种方式读取这些东西……

知道我可以尝试找到凭据吗?

最佳答案

让您的 C# 客户端将其 networkCredentials 作为 HTTP 基本身份验证发送到您的 Nodejs 服务器;服务器 should return a response whose header contains a HTTP 401 Unauthorized status and a WWW-Authenticate field如果请求不包含授权 header 。这将导致您的 C# 客户端重试带有授权 header 的 POST。

这个过程叫做Authentication challenge如果您想搜索更多信息。

有几个软件包可以为您做到这一点;喜欢http-auth或者您可以手动编码(这不是很难,因为这只是检查请求中是否存在 Authorization header 的问题,如果没有或不正确的凭据,请使用 WWW-Authenticate 字段进行 401 响应)

即从我的头顶:

var http = require('http');

var _server = http.createServer(listener);
_server.listen(1234);

console.log('started');

function listener(req, res) {

if (!req.headers.authorization) {
res.statusCode = 401;
res.statusMessage = 'Unauthorized';
res.setHeader('WWW-Authenticate', 'Basic');
res.end();
}
}

关于c# webclient NetworkCredentials 在 Nodejs 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58854754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com