node.js - 使用 Node JS 验证 jwt token 和代理到另一台服务器

标签 node.js

想要使用 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/

相关文章:

c# - 在 Windows 8.1 channel 上使用相同的推送通知 channel

javascript - 如何根据 Mongoose 中的对象ID列表删除数组项?

node.js - Node/Express API 上的连接之间的数据持续存在

javascript - 在 node.js 中协调并行执行

javascript - Node gzip 将文件解压缩到变量中

node.js - 为什么我不能让单个 Redis 客户端在同一连接中充当 PUB 和 Sub?

node.js - 设置与 Express 服务器的 react

javascript - 无法将 javascript 从 index.html 移至外部文件

javascript - npm start 上出现意外 token 错误的模块构建失败 - React/webpack

javascript - Mongoose 里面的 promise 改变发生得很晚