如何使快速路线私人访问

时间:2017-06-18 02:12:29

标签: node.js express authorization jwt

我正在运行nodejs / express应用程序作为我当前项目的后端解决方案。该应用程序正在使用passport-jwt来保护使用JWT的某些路由作为路由的标头授权,让我们将此路由称为 secure-route 。现在,我正在运行第二个应用程序,该应用程序需要访问安全路由而没有必要的授权标头。在用户成功授权后,登录路由生成必要的Authorization标头。

问题是,我不想提供(假的)jwt授权标题(不应该过期)。第二个应用程序/服务器应该使用更合适的授权策略访问我的第一个应用程序,如basic-auth

我考虑在另一个路由器模块中进行安全路由私有,以便我可以通过重新路由来访问此私有路由。

那么我怎样才能使快速路线成为私人通道?或者是否有用于在不影响当前身份验证策略的情况下验证后端/服务器的解决方案?

编辑: 两个后端都在AWS上的无服务器结构上运行

2 个答案:

答案 0 :(得分:0)

假设您提到的第二个应用程序在同一服务器或同一网络中的另一台服务器上运行,那么您可以执行以下操作:

  1. 在非标准端口上创建一个新的Web服务器,该端口无法从一般互联网访问(只需几行Express代码)。
  2. 在运行安全路由的现有服务器的同一nodejs进程中运行该新Web服务器。
  3. 在该新服务器中,为私人访问创建路由。在该私有路由中,不要实现任何访问​​控制。
  4. 将路由的代码放入可单独调用的函数中。
  5. 当新的服务器路由被命中时,请调用您在其他服务器中实现安全路由所使用的相同功能。
  6. 确认无法从互联网访问您的第二台服务器端口(防火墙设置)。
  7. 只有从运行其他应用的特定IP地址访问时,您也可以只使用现有的一台服务器并路由并允许在没有授权标头的情况下进行访问。

    如果您无法使用有关服务器网络拓扑的任何内容来在发出请求时安全地识别您的第二个应用,那么您必须为其创建一个秘密凭据并使用该凭据(类似于管理员)密码或管理员证书)。或者,切换到可以使用网络拓扑识别第二个应用程序的体系结构。

答案 1 :(得分:0)

你应该制作一个中间件并像这样使用它

/ 项目的起点 /

let CONGIG = require('./config');
let middleware = require('./middleware');

let app = express();

app.use(middleware.testFunction);
require('./route')(app);


'use strict';
let middleware = {
    testFunction : function(req,res,next){
        var condition = ''; /* now here you can write your logic on condition that when should be the condition be true and when it shoudld not be true based on the req.url , if the user is trying to access any public url you can simply allow the true part of the condition to run and if the person is accessing a private part of route then you can check for additional parameters in header and then set the condition true and if not you must send an error msg or a simple message as you are not allowed to access the private parts of the web application.   */


        if(condtion){
            next();
        } else {
            res.send('error');
        }
    }
}

因此,通过设计一个middlware你基本上可以分离私有和公共路由的逻辑,以及在一个单独的模块中处理它的公共或私有路由的条件,它有点难以理解,但它更好首先过滤公共和私人路线,而不是后者检查。通过这种方式,在最初的命中,我们可以区分私人和公共路线。