我正在嘗試在Express中使用SSL身份驗證,如http://intown.biz/2016/11/22/node-client-auth/中所述。缺少Express SSL身份驗證功能?
我們使用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();
});
在鏈接的作品(他有一個鏈接,下載項目)
我的問題討論中的應用:最新的典型es(4.0.36)似乎沒有req.client或req.socket.getPeerCertificate()。它們在我的TypeScript代碼中不可用(我們有Express導入/必需)。此外,我嘗試 將TypeScript請求對象傳遞到普通的JavaScript函數中,並且req.client和req.socket.getPeerCertificate()仍未定義。他們只是 不存在。
注:我們也有Passport初始化。我們正在使用它來驗證我們的Web應用程序(客戶端和內部REST API),但我們有一個我們希望通過SSL證書保護的外部/單獨REST API。我懷疑插入Passport會導致req.client和req.socket.getPeerCertificate()功能消失嗎?
誰能告訴我爲什麼我在Express代碼中看不到req.client或req.socket.getPeerCertificate()?他們被替換了什麼?
任何幫助/確認與此將不勝感激。
不確定'req.client',但應該定義'req.socket',因爲Express'req'對象是內置'http.ClientRequest'的「增強版本」,它具有一個['.socket '](https://nodejs.org/api/http.html#http_request_socket)屬性。在TLS連接的情況下,這是['tls.TLSSocket'](https://nodejs.org/api/tls.html#tls_class_tls_tlssocket)的實例,它具有['.authorized'](https:// nodejs .ORG/API/TLS。html#tls_tlssocket_authorized)和['.getPeerCertificate'](https://nodejs.org/api/tls.html#tls_tlssocket_getpeercertificate_detailed)屬性。 – robertklep
哦,'req.client'和'req.socket'([here](https://github.com/nodejs/node/blob/ae4fde8bc883686def5badfb324236320669e8f4/lib/_http_incoming.js#L71))是一樣的)。 – robertklep