NodeJS和AngularJS – 使用客户端证书authentication来保护REST API

我目前正在努力使REST Api服务器(NodeJS + Express + Mongoose)安全,除了我的客户端应用程序(AngularJS 1.6)和我的pipe理应用程序(基于AngularJS 1.6)之外,没有人可以访问路由并获取或放置数据到我的数据库。 所有内容都使用有效的SSL证书在https上运行。

我主要想到两种方法:

  1. 共享密钥在特定路由需要“访问密钥”
  2. 客户端证书authentication

我没有去。 2,因为在我的想法这是最安全的(请纠正,如果我错了:))

所以我设置我的API服务器在https上运行,并请求一个有效的客户端证书:

var options = { ca: fs.readFileSync(__dirname + "/cert/server.ca"), key: fs.readFileSync(__dirname + "/cert/server.key"), cert: fs.readFileSync(__dirname + "/cert/server.crt"), requestCert: true, rejectUnauthorized: false }; https.createServer(options, app) .listen(PORT, () => { console.log(`up and running @: ${os.hostname()} on port: ${PORT}`); console.log(`enviroment: ${process.env.NODE_ENV}`); }); 

我通过以下方式直接在应用程序中处理未经使用的用户的拒绝:

 if (!req.client.authorized) { var cert = req.socket.getPeerCertificate(); console.log("unauthorized: ", cert); return res.status(401).send('Not authorized!'); } 

这里的问题开始:)。 在我的客户端应用程序的每个请求都会收到错误:

401 – 未经授权

我认为,客户端应用程序发送SSL证书与每个请求(或者如果nodejs请求)通过“requestCert”,一切正常工作。 但似乎有点复杂。

在我的server.ca文件中,我目前拥有从CA获得的证书链。

console.log中请求中传送的证书,但其始终为空。

我究竟做错了什么? 是否必须configurationAngular以将其与每个请求一起发送? 有什么build议么?