linux

Linux环境下Swagger API的安全认证怎么做

小樊
44
2025-07-31 22:59:02
栏目: 智能运维

在Linux环境下为Swagger API添加安全认证,可以确保只有授权用户才能访问API文档。以下是实现这一目标的详细步骤:

1. 安装Swagger

首先,确保你的Linux系统上已经安装了Swagger。你可以使用npm(Node.js的包管理器)来安装Swagger。

npm install -g swagger-ui-express

2. 创建Swagger配置文件

创建一个Swagger配置文件(通常是swagger.json),定义你的API规范。

{
  "swagger": "2.0",
  "info": {
    "description": "Sample API",
    "version": "1.0.0"
  },
  "host": "api.example.com",
  "basePath": "/v1",
  "schemes": [
    "https"
  ],
  "paths": {
    "/users": {
      "get": {
        "summary": "List all users",
        "responses": {
          "200": {
            "description": "A list of users"
          }
        }
      },
      "post": {
        "summary": "Create a new user",
        "responses": {
          "201": {
            "description": "User created"
          }
        }
      }
    }
  }
}

3. 实现API安全认证

Swagger支持多种安全方案,包括基本认证、OAuth2、API密钥等。以下是一个使用基本认证的示例。

3.1 安装Passport和Passport Basic

首先,安装Passport和Passport Basic模块。

npm install passport passport-basic

3.2 配置Passport

在你的应用中配置Passport以使用基本认证。

const express = require('express');
const passport = require('passport');
const BasicStrategy = require('passport-basic').Strategy;
const swaggerUi = require('swagger-ui-express');
const YAML = require('yamljs');
const swaggerDocument = YAML.load('./swagger.json');
const app = express();

// Passport configuration
passport.use(new BasicStrategy(
  function(username, password, done) {
    if (username === 'admin' && password === 'secret') {
      return done(null, { username: 'admin' });
    } else {
      return done(null, false);
    }
  }
));

passport.serializeUser(function(user, done) {
  done(null, user.username);
});

passport.deserializeUser(function(username, done) {
  done(null, { username: username });
});

app.use(passport.initialize());

// Swagger UI setup
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));

// Protected route
app.get('/protected', passport.authenticate('basic', { session: false }), (req, res) => {
  res.json({ message: 'This is a protected route' });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

4. 运行应用

启动你的Node.js应用。

node app.js

5. 测试认证

你可以使用Postman或其他API测试工具来测试认证。在请求头中添加Authorization: Basic YWRtaW46c2VjcmV0(这是admin:secret的Base64编码),然后访问受保护的路由。

其他认证方式

除了基本认证,Swagger还支持OAuth2和API密钥认证。以下是这两种认证方式的简要说明:

OAuth2认证

  1. 配置OAuth2服务器:使用Keycloak、Auth0等工具搭建OAuth2服务器,配置客户端ID、密钥、授权端点和令牌端点等参数。
  2. Swagger配置集成:在Swagger配置文件(swagger.yamlswagger.json)中添加OAuth2安全方案定义。
securityDefinitions:
  oauth2:
    type: oauth2
    flow: accessCode
    authorizationUrl: https://your-oauth-server/oauth/authorize
    tokenUrl: https://your-oauth-server/oauth/token
    scopes:
      read: Grants read access
      write: Grants write access
  1. API端点安全方案应用:在需要保护的API端点中添加安全方案。
paths:
  /protected-resource:
    get:
      security:
        - oauth2: []

API密钥认证

  1. 密钥生成:在系统中生成唯一的API密钥。
  2. Swagger配置集成:在Swagger配置文件中定义API密钥安全方案。
securityDefinitions:
  apiKeyAuth:
    type: apiKey
    in: header
    name: X-API-KEY
  1. API端点安全方案应用:在需要保护的API端点中添加安全方案。
paths:
  /protected-resource:
    get:
      security:
        - apiKeyAuth: 

0
看了该问题的人还看了