swagger 2.0中的自定义授权标题头痛

时间:2017-04-05 01:40:47

标签: node.js security swagger-2.0

我正在使用Authorization标头参数接收我的API安全令牌,如下所示:

Authorization: Bearer <SomeVeryLongTokenThatALegitLoginBegat>

好消息是我的节点服务器接收了param allright;我在args.Authorization.originalValue中生成的服务器存根中的每个服务的每个方法中都以/controllers的形式收到它。坏消息是我有大量的API端点,我想在请求被路由到控制器之前对请求进行授权。

从我读到的内容来看,swagger-security中间件应该是这样做的,但我无法让它工作(似乎根本没有进入该代码流;请参阅下面的内容试过$SWAGGER_API_HOME/index.js)。

// code snippet from $SWAGGER_API_HOME/index.js
app.use(middleware.swaggerSecurity({
    Authorization: function (req, def, scopes, callback) {
        console.log ('INDEX.JS RECEIVED SOMETHING', req);
        callback();
    }
}));

对于/controllers/中文件中的每个方法,我现在这样做很烦人;这种重复方式的一个例子如下:

exports.userSomethingDELETE = function(args, res, next) {
     /**
     * Do something for user
     * authorization String
     * something SomethingDetails
     * no response value expected for this operation
     **/
    console.log (args.Authorization.originalValue.substring(7));
    var promiseOfAuthentication = performMyOwnAuthentication (args.Authorization.originalValue.substring(7));
    promiseOfAuthentication.then (...)
    ...
}  

我有很多方法(总共约500个),所以做上述操作非常糟糕。我希望req对象由一个auth方法解析,并在它被路由到正确的控制器之前批准。有没有办法做到这一点?任何帮助表示赞赏。

谢谢!

1 个答案:

答案 0 :(得分:0)

我最初用swagger-codegen和provided an answer there提出了这个问题。希望我的回答有帮助。