首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs中的c# webclient NetworkCredentials

Nodejs中的c# webclient NetworkCredentials
EN

Stack Overflow用户
提问于 2019-11-14 10:37:25
回答 1查看 448关注 0票数 3

我有一个具有以下代码的c# .net客户端:

代码语言:javascript
复制
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服务器发送数据。Nodejs代码:

代码语言:javascript
复制
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#中的凭据:

代码语言:javascript
复制
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:标头也没有Auth或身份验证属性…

Edit3:除了凭据/身份验证头之外,我甚至找不到其他位置。但这一定是可能的,对吧?我的意思是c#可以从…的某个地方读到这些东西

知道我能找到什么证件吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-20 10:32:16

若要使C#客户端将其networkCredentials作为发送到Nodejs服务器;如果请求不包含授权头,则为服务器应该返回其报头包含HTTP 401未经授权状态和WWW-身份验证字段的响应。。这将导致C#客户端重试带有授权头的POST。

这个过程叫做认证质疑,如果你想要搜索更多的信息。

有一些服务器包可以为您做到这一点;就像http-auth或者您可以手工编写它(这并不难,因为这只是检查请求中授权头是否存在的问题,如果没有或不正确的凭据,则使用WWW身份验证字段进行401响应)

也就是说,从我的头顶:

代码语言:javascript
复制
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();
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58854754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档