簡體   English   中英

如何在Swagger中添加API密鑰

[英]How do you add an API key in Swagger

我嘗試了幾種方法來向Swagger添加基本的API密鑰授權(表達swagger)。 以下是我清單中的相關信息。

{
  ...
  "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密鑰處理程序?

有點晚了,但供以后參考。 使用swagger-express-mw,這是您可以做到的方式(它對我有用):

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

我希望這對某人有幫助。

通過將YAML定義轉換為JSON格式並以這種方式加載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.');
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM