Express SSL身份validationfunction缺失?

我试图在Express中使用SSL身份validation,如http://intown.biz/2016/11/22/node-client-auth/中所述 。

我们使用TypeScript作为我们的服务器代码(除了客户端Angular代码)以获得强大的打字效果。 我们使用Express 4.14.1,@ types / express“:”^ 4.0.36“

上面的链接(与大多数服务器端NodeJS一样)是JavaScript而不是TypeScript。 链接中有一段代码,如下所示:

app.use(function (req, res, next) { if (!req.client.authorized) { return res.status(401).send('User is not authorized'); } #examine the cert itself, and even validate based on that! var cert = req.socket.getPeerCertificate(); if (cert.subject) { console.log(cert.subject.CN); } next(); }); 

链接中讨论的应用程序工作(他有一个链接下载项目)。

我的问题:最新的types(4.0.36)似乎没有req.clientreq.socket.getPeerCertificate() 。 他们不可用在我的TypeScript代码(我们有Express导入/必需)。 另外,我尝试将TypeScript Request对象传递给普通的JavaScript函数,并且req.clientreq.socket.getPeerCertificate()仍然是未定义的。 他们只是不在那里。

注意:我们也有Passport初始化。 我们正在使用它来validation我们的Web应用程序(客户端和内部REST API),但我们有一个外部/单独的REST API,我们希望使用SSL证书进行保护。 我怀疑插入护照会导致req.clientreq.socket.getPeerCertificate()function消失?

任何人都可以告诉我为什么我没有在我的Express代码中看到req.client或req.socket.getPeerCertificate()? 他们被replace了吗?

任何帮助/确认与此将不胜感激。

robertklep是一个巨大的帮助。

对于TypeScript,我需要导入tls.TLSSocket来获得所有的input,并将req.socketTLSSocket

 ((req.socket) as TLSSocket).authorized ((req.socket) as TLSSocket).getPeerCertificate(). 

在一般的旧JavaScript中,它有点复杂。 对于我的开发环境,我正在创build一个httpServer( http.createServer )。 在我的生产环境中,我创build了一个httpsServer( https.createServer )。 因此,如果我不在我的生产环境中工作,因为没有使用JavaScript req.clientreq.socket.getPeerCertificate() ,因为服务器没有使用https.createServer创build。

谢谢robertklep!