2016-08-22 14 views
0

Swagger(express swagger)に基本的なAPIキー認証を追加する方法をいくつか試しました。以下は私のマニフェストの関連情報です。SwaggerにAPIキーを追加するにはどうすればいいですか

{ 
    ... 
    "main": "app.js", 
    "dependencies": { 
    "express": "^4.12.3", 
    "swagger-express-mw": "^0.1.0" 
    }, 
    ... 
} 

私はYAML構成でセキュリティ定義を登録したと思います。

swagger: "2.0" 
info: 
    ... 

# Set up security for the API 
securityDefinitions: 
    defaultApiKey: 
    type: apiKey 
    in: header 
    name: defaultApiKey 

security: 
    - defaultApiKey: [] 

この設定を完了するには、ミドルウェアをSwaggerExpress.create()関数に登録するだけで済みます。以下は現在の私のapp.js全体です。

'use strict'; 

var SwaggerExpress = require('swagger-express-mw'); 
var app = require('express')(); 
module.exports = app; // for testing 

var config = { 
    appRoot: __dirname // required config 
}; 

SwaggerExpress.create(config, function(err, swaggerExpress) { 
    if (err) { throw err; } 

    // Serve the Swagger documents and SwaggerUi 
    app.use(swaggerExpress.runner.swaggerTools.swaggerUi()); 

    // Install security 
    app.use(swaggerExpress.swaggerSecurity({ 
    defaultApiKey: function(req, def, scopes, callback) { 
     console.log("hit"); 
    } 
    })); 

    // install middleware 
    swaggerExpress.register(app); 

    var port = process.env.PORT || 10010; 
    app.listen(port); 
}); 

私はこれを使用しようとすると、私は以下を参照してください。

Error initializing middleware 
TypeError: swaggerExpress.swaggerSecurity is not a function 

ノー成功を収めて、このいくつかの異なる方法を設定しようとしています。 YAMLでAPIキーを正しく定義しましたか?その場合、app.jsファイルにAPIキーハンドラを登録するにはどうすればよいですか?

答えて

0

私はJSON形式にYAMLの定義を変換し、APIの定義をこのようにロードすることで、この問題を克服することができました:

'use strict'; 

// [INIT PRE-SERVER REQUIREMENTS] 
var fs = require('fs'); 
var os = require('os'); 
var https = require('https'); 


var swagger = require('swagger-tools'); 
var app = require('express')(); 
var db = require(/* db config path */); 
var swaggerObject = require('./api/swagger/swagger.json'); 

// Configure non-Swagger related middleware and server components prior to Swagger middleware 

swagger.initializeMiddleware(swaggerObject, function (middleware) { 

    // Intialize middleware 
    app.use(middleware.swaggerMetadata()); 

    // Setup security handlers 
    app.use(middleware.swaggerSecurity({ 
    api_key: function(req, def, scopes, callback) { 
     // API KEY LOGIC HERE 
     // IF SUCCESSFUL 
     callback(); 
    } 
    }); 

    // Route requests to appropriate controller 
    app.use(middleware.swaggerRouter({useStubs: true, controllers: './api/controllers'})); 

    // Setup documentation 
    app.use(middleware.swaggerUi()); 

    // Start the server 
    var httpsServer = https.createServer({ 
    // KEY INFO 
    }, app); 
    httpsServer.listen(443, function() { 
    console.log('Server created and listening for requests on port 443.'); 
    }); 
}); 
+0

swagger.jsonとは何ですか私はyamlしか持っていませんか? – danielad

+0

@danielad swagger-codegenツールで.yamlを.jsonに変換することができます。https://github.com/swagger-api/swagger-codegen/blob/master/README.md#to-generate-a-sample-クライアントライブラリ – Burke9077

+0

imはswagger-express-mdを使用していますか?私は魅力的なツールや何が必要ですか?どのように2つのニーズがあり、使用してくださいできますか? – danielad

1

少し遅れて、しかし、今後の参考のため。威張っ-急行-MWを有する が、これは(それが私の作品)あなたがそれを行うことができる方法である。

config: { 
    appRoot: __dirname, 
    swaggerSecurityHandlers: { 
     defaultApiKey: function(req, authOrSecDef, scopesOrApiKey, callback) { 
     // code here 
     } 
    } 
} 

私はそれが誰かのために有用であると思います。

関連する問題