Vercel无服务器功能中的NTLM身份验证

TL; DR-我需要在Vercel无服务器功能中获取请求的连接ID,并且expressrequest.connection.id)使用的常规值未在Vercel中定义。作为一种解决方法,我可以创建一个随机的int客户端,并将其用作连接ID,这似乎很麻烦

我正在尝试在部署到Vercel的无服务器功能(以前为ZEIT / now.sh)中设置NTLM身份验证。我已经使用以下命令在Node中正常工作了

const express = require('express');
const ntlm = require('express-ntlm');

var app = express();

app.use(ntlm({
  domain: 'MyDomain',domaincontroller: 'ldap://MyDomain.com'
}));

app.get('/',(req,res) => {
  res.end(JSON.stringify(req.ntlm))
});

app.listen(8080);

现在我正在尝试做同样的事情,但是是从Vercel serverless function开始的。我有一个简单的index.html文件,其中脚本标记调用fetch('/api/auth'),此请求由文件/api/auth.js处理。 Vercel希望脚本不使用express,而是在每个脚本中导出(request,response)处理程序以处理对该路由的请求。

我正在尝试通过在request对象需要的express-ntlm对象上添加一些额外的属性来使用快速中间件

const ntlm = require('express-ntlm');

const ntlmMiddleware = ntlm({
  domain: 'MyDomain',domaincontroller: 'ldap://MyDomain.com'
})

module.exports = (req,res) => {
  // recreate express stuff used in the middleware
  res.sendStatus = statusCode => res.status(statusCode).send();
  req.protocol = req.headers['x-forwarded-proto']
  req.originalUrl = req.url
  req.get = property => req.headers[property];

  ntlmMiddleware(req,res,() => {
    console.log({source: 'ntlm',args: arguments,ntlm: req.ntlm});
    res.status(200).send('Success');
  })
}

运行此命令时,我收到express-ntlm的{​​{1}}记录的错误

我找到了the line where this log comes from,并因此而失去了Unexpected NTLM message Type 3 in new connection for URI http://localhost:3000/api/auth参数上的另一个属性-request,并验证了该值当前为request.connection.id

如果为undefined提供了一个硬编码的值,那么我就可以进行身份​​验证,但是在实际部署时这将不起作用。 有人知道我在Vercel中可以从哪里获得该请求的连接ID吗?我尝试进行随机int运算,但是,按预期,这是行不通的。

我猜我需要的东西埋在request.connection.id参数的某个地方。如果此功能不可用,那么看来我可以创建一个随机的int客户端,并通过请求查询发送它,但这感觉很hacky。

非常感谢您的帮助/指导!

skymiandu02 回答:Vercel无服务器功能中的NTLM身份验证

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2307794.html

大家都在问