代码之家  ›  专栏  ›  技术社区  ›  user1609085

使用节点JS对另一台服务器的JWT令牌和代理进行身份验证

  •  1
  • user1609085  · 技术社区  · 8 年前

    希望使用nodejs作为另一个服务器的反向代理。

    我的方案是对所有请求进行身份验证(每个请求都有JWT令牌),在nodejs中使用JWT进行身份验证是可以的。

    验证成功后,应将相同的请求发送到另一个服务器,并将响应发送回客户端。

    查看Redbird、节点HTTP代理和其他随时可用的nodejs代理模块。没有具体的方法来验证JWT和重定向到目标。

    有没有可以使用的模块?如果不知道/我可以采取什么步骤来实现这一点?另外,我将添加TLS终止。

    1 回复  |  直到 8 年前
        1
  •  0
  •   user1609085    8 年前

    我能得到一些有用的东西,这可能不是一个最佳的解决方案。这是一个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)
    
    推荐文章