在显示我的招摇之前要求提供凭据

问题描述

我正在尝试为我的API添加安全性。我已经使用node.js创建了API,并使用了express和swagger-ui-express模块​​。问题是任何人都可以访问该端点。因此,为解决此问题,我想在显示大量内容之前添加一个基本的身份验证。

enter image description here

在端点上实现基本身份验证的示例:

app.get('/users',(req,res) => {
    let user = auth(req)
    
    if (user === undefined || user['name'] !== 'admin' || user['pass'] !== 'adminpass') {
        res.statusCode = 401
        res.setHeader('WWW-Authenticate','Basic realm="Node"')
        res.end('Unauthorized')
    } else {
        res.status(200).send('Return all users');
    }
});

我想在swagger的端点中添加相同的示例:

const swaggerUi = require('swagger-ui-express');
const YAML = require('yamljs');
const swaggerDocument = YAML.load('./swagger.yaml');

const swaggerOptions = {
    swaggerDeFinition: {
        info: {
            version: "1.0.0",title: "Customer API",description: "Customer API information",contact: {
                name: "Amazing Developer"
            },servers: ["http://localhost:3000"]
        }
    },// ['.routes/*.js']
    apis: ["index.js"]
};

const swaggerDocs = swaggerJsDoc(swaggerOptions);
app.use('/api-docs',swaggerUi.serve,swaggerUi.setup(swaggerDocument));

有人可以帮助我吗?我试图这样做,但是没有用。我什至不知道是否可能。

解决方案:

app.use('/api-docs',function(req,res,next){
    let user = auth(req)
    if (user === undefined || user['name'] !== 'admin' || user['pass'] !== 'adminpass') {
        res.statusCode = 401
        res.setHeader('WWW-Authenticate','Basic realm="Node"')
        res.end('Unauthorized')
    } else {
        next();
    }
},swaggerUi.setup(swaggerDocument));

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)