想要使用 NodeJS 作为另一台服务器的反向代理。
我的场景是对所有请求进行身份验证(每个请求都会有jwt token),在nodejs中使用jwt进行身份验证就可以了。
身份验证成功后,应将相同的请求发送到另一台服务器,并将响应发送回客户端。
研究了 redbird、node-http-proxy 和其他现成的 Nodejs 代理模块。没有什么具体的方法来验证 jwt 并重定向到目标。
有可以使用的模块吗?如果没有任何想法/我可以采取哪些步骤来实现这一目标?我还将添加 tls 终止。
最佳答案
我能够得到一些东西,但这可能不是最佳解决方案。这是一个http代理服务器。下一个任务是修改它以用作带有 tls 终止的 https 服务器(这至少不是这个问题的范围)
let http = require('http')
let httpProxy = require('http-proxy')
let jwt = require('jsonwebtoken')
let token = require('./token.json')
let proxy = httpProxy.createProxyServer({})
let server = http.createServer(function(req, res) {
jwt.verify(req.headers["authorization"], token.secret, { issuer:'IssuerName' }, function(err, decoded) {
if(err){
console.log("Error: " + err)
res.setHeader('Content-Type','application/json')
res.write(JSON.stringify({"statusCode":401, "message":err}))
res.end()
return
}
proxy.web(req, res, {
changeOrigin: true,
target: 'https://some_url'
})
})
})
proxy.on('proxyReq', function(proxyReq, req, res, options) {
proxyReq.removeHeader('authorization')
})
proxy.on('error', function (err, req, res) {
res.setHeader('Content-Type','application/json')
res.write(JSON.stringify({"statusCode":500, "message":err}))
res.end()
})
let port = process.env.PORT || 9200
server.listen(port)
console.log('HTTP Proxy server is running on port: ' + port)
关于node.js - 使用 Node JS 验证 jwt token 和代理到另一台服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51127012/