插件窝 干货文章 Swagger在Linux中的认证机制怎么设置

Swagger在Linux中的认证机制怎么设置

Swagger 认证 const Express    来源:    2025-05-08

Swagger在Linux中的认证机制设置指南

在Linux环境中为Swagger(OpenAPI)设置认证机制通常涉及以下几个方面。以下是详细的设置方法:

1. 基本认证(Basic Auth)

在Swagger UI配置中设置

# swagger.yaml 或 openapi.yaml 文件
securityDefinitions:
  basicAuth:
    type: basic
    description: HTTP Basic Authentication
security:
  - basicAuth: []

在Node.js Express中的实现示例

const express = require('express');
const swaggerUi = require('swagger-ui-express');
const basicAuth = require('express-basic-auth');

const app = express();

// 设置Swagger UI的Basic Auth
app.use('/api-docs', 
  basicAuth({
    users: { 'admin': 'password123' },
    challenge: true
  }),
  swaggerUi.serve, 
  swaggerUi.setup(swaggerDocument)
);

2. JWT认证

Swagger配置

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
security:
  - bearerAuth: []

Node.js中的实现示例

const express = require('express');
const jwt = require('jsonwebtoken');
const swaggerUi = require('swagger-ui-express');

const app = express();

// JWT验证中间件
const authenticateJWT = (req, res, next) => {
  const authHeader = req.headers.authorization;

  if (authHeader) {
    const token = authHeader.split(' ')[1];

    jwt.verify(token, 'your-secret-key', (err, user) => {
      if (err) {
        return res.sendStatus(403);
      }

      req.user = user;
      next();
    });
  } else {
    res.sendStatus(401);
  }
};

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

3. OAuth2认证

Swagger配置

components:
  securitySchemes:
    oAuth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://example.com/oauth/authorize
          tokenUrl: https://example.com/oauth/token
          scopes:
            read: Grants read access
            write: Grants write access
            admin: Grants access to admin operations
security:
  - oAuth2:
      - read
      - write

4. API密钥认证

Swagger配置

components:
  securitySchemes:
    apiKey:
      type: apiKey
      name: X-API-KEY
      in: header
security:
  - apiKey: []

Node.js中的实现示例

const apiKeyAuth = (req, res, next) => {
  const apiKey = req.headers['x-api-key'];

  if (apiKey === 'your-api-key-here') {
    next();
  } else {
    res.status(401).json({ error: 'Unauthorized' });
  }
};

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

5. 在Nginx中设置Swagger认证

如果你使用Nginx作为反向代理,可以在Nginx层面设置认证:

location /api-docs {
    auth_basic "Swagger UI Access";
    auth_basic_user_file /etc/nginx/.htpasswd;

    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

创建密码文件:

sudo sh -c "echo -n 'admin:' >> /etc/nginx/.htpasswd"
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

6. 在Spring Boot中设置Swagger认证

@Configuration
public class SwaggerConfig {

    @Bean
    public SecurityConfiguration security() {
        return SecurityConfigurationBuilder.builder()
            .clientId("test-client-id")
            .clientSecret("test-client-secret")
            .realm("test-realm")
            .appName("test-app")
            .scopeSeparator(",")
            .additionalQueryStringParams(null)
            .useBasicAuthenticationWithAccessCodeGrant(false)
            .build();
    }

    @Bean
    public SecurityScheme apiKey() {
        return new ApiKey("apiKey", "X-API-KEY", "header");
    }

    @Bean
    public SecurityScheme basicAuth() {
        return new BasicAuth("basicAuth");
    }
}

最佳实践建议

  1. 生产环境:永远不要在生产环境中使用默认凭证
  2. HTTPS:确保所有认证都通过HTTPS进行
  3. 密钥管理:使用环境变量或密钥管理系统存储敏感凭证
  4. 最小权限原则:只授予必要的访问权限
  5. 日志记录:记录认证尝试,特别是失败的尝试

根据你的具体应用场景和安全需求,选择最适合的认证机制。