NodeJS和AngularJS – 使用客户端证书authentication来保护REST API
我目前正在努力使REST Api服务器(NodeJS + Express + Mongoose)安全,除了我的客户端应用程序(AngularJS 1.6)和我的pipe理应用程序(基于AngularJS 1.6)之外,没有人可以访问路由并获取或放置数据到我的数据库。 所有内容都使用有效的SSL证书在https上运行。
我主要想到两种方法:
- 共享密钥在特定路由需要“访问密钥”
- 客户端证书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议么?