ubuntu

在Ubuntu上Swagger如何实现认证授权

小樊
36
2025-05-21 17:19:29
栏目: 智能运维

在Ubuntu上使用Swagger实现认证授权,通常涉及以下几个步骤:

  1. 安装Swagger工具

    • 使用npm(Node.js的包管理器)来安装Swagger命令行工具。
    sudo npm install -g swagger-jsdoc swagger-ui-express
    
  2. 创建Swagger配置文件

    • 创建一个swagger.json文件来定义你的API规范,包括认证授权信息。
    {
      "swagger": "2.0",
      "info": {
        "description": "Sample API",
        "version": "1.0.0"
      },
      "securityDefinitions": {
        "Bearer": {
          "type": "apiKey",
          "name": "Authorization",
          "in": "header"
        }
      },
      "paths": {
        "/api/resource": {
          "get": {
            "summary": "Get a resource",
            "security": [
              {
                "Bearer": []
              }
            ],
            "responses": {
              "200": {
                "description": "Successful response"
              }
            }
          }
        }
      }
    }
    
  3. 集成Swagger到Express应用

    • 创建一个Express应用,并使用swagger-ui-express中间件来提供Swagger UI界面。
    const express = require('express');
    const swaggerUi = require('swagger-ui-express');
    const swaggerDocument = require('./swagger.json');
    
    const app = express();
    
    app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
    
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    
  4. 实现认证授权逻辑

    • 在Express应用中添加中间件来处理认证授权。
    const express = require('express');
    const jwt = require('jsonwebtoken');
    const swaggerUi = require('swagger-ui-express');
    const swaggerDocument = require('./swagger.json');
    
    const app = express();
    const secretKey = 'your-secret-key'; // 替换为你的密钥
    
    // 认证中间件
    const authenticateToken = (req, res, next) => {
      const authHeader = req.headers['authorization'];
      const token = authHeader && authHeader.split(' ')[1];
      if (token == null) return res.sendStatus(401);
    
      jwt.verify(token, secretKey, (err, user) => {
        if (err) return res.sendStatus(403);
        req.user = user;
        next();
      });
    };
    
    app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
    
    app.get('/api/resource', authenticateToken, (req, res) => {
      res.json({ message: 'Protected resource' });
    });
    
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    
  5. 生成和使用JWT令牌

    • 创建一个端点来生成JWT令牌,用户可以使用此令牌进行认证。
    const express = require('express');
    const jwt = require('jsonwebtoken');
    const bodyParser = require('body-parser');
    const swaggerUi = require('swagger-ui-express');
    const swaggerDocument = require('./swagger.json');
    
    const app = express();
    const secretKey = 'your-secret-key'; // 替换为你的密钥
    
    app.use(bodyParser.json());
    
    // 生成JWT令牌的端点
    app.post('/login', (req, res) => {
      const { username, password } = req.body;
      if (username === 'admin' && password === 'password') { // 替换为你的认证逻辑
        const token = jwt.sign({ username }, secretKey, { expiresIn: '1h' });
        res.json({ token });
      } else {
        res.status(401).json({ message: 'Invalid credentials' });
      }
    });
    
    // 认证中间件
    const authenticateToken = (req, res, next) => {
      const authHeader = req.headers['authorization'];
      const token = authHeader && authHeader.split(' ')[1];
      if (token == null) return res.sendStatus(401);
    
      jwt.verify(token, secretKey, (err, user) => {
        if (err) return res.sendStatus(403);
        req.user = user;
        next();
      });
    };
    
    app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
    
    app.get('/api/resource', authenticateToken, (req, res) => {
      res.json({ message: 'Protected resource' });
    });
    
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    

通过以上步骤,你可以在Ubuntu上使用Swagger实现认证授权。确保你的密钥安全,并且在生产环境中使用HTTPS来保护传输的数据。

0
看了该问题的人还看了